137 lines
4.6 KiB
C#
137 lines
4.6 KiB
C#
using Dalamud.Bindings.ImGui;
|
|
using Dalamud.Plugin.SelfTest;
|
|
|
|
namespace HellionChat.SelfTests;
|
|
|
|
// Verifies the FontManager came out of the DI container with every
|
|
// handle attached and no atlas-load failure on any of them. ItalicFont
|
|
// is allowed to be null when ItalicEnabled is off.
|
|
internal sealed class FontManagerCtorSmokeStep : ISelfTestStep
|
|
{
|
|
private readonly Plugin plugin;
|
|
|
|
public FontManagerCtorSmokeStep(Plugin plugin)
|
|
{
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public string Name => "Hellion Chat - FontManager ctor smoke";
|
|
|
|
public SelfTestStepResult RunStep()
|
|
{
|
|
var fm = this.plugin.FontManager;
|
|
if (fm is null)
|
|
{
|
|
ImGui.Text("Plugin.FontManager is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.Axis is null)
|
|
{
|
|
ImGui.Text("Axis handle is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.AxisItalic is null)
|
|
{
|
|
ImGui.Text("AxisItalic handle is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.FontAwesome is null)
|
|
{
|
|
ImGui.Text("FontAwesome handle is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.RegularFont is null)
|
|
{
|
|
ImGui.Text("RegularFont handle is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (Plugin.Config.ItalicEnabled && fm.ItalicFont is null)
|
|
{
|
|
ImGui.Text("ItalicEnabled is on but ItalicFont handle is null");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.Axis.LoadException is { } e1)
|
|
{
|
|
ImGui.Text($"Axis load exception: {e1.Message}");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.AxisItalic.LoadException is { } e2)
|
|
{
|
|
ImGui.Text($"AxisItalic load exception: {e2.Message}");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.FontAwesome.LoadException is { } e3)
|
|
{
|
|
ImGui.Text($"FontAwesome load exception: {e3.Message}");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.RegularFont.LoadException is { } e4)
|
|
{
|
|
ImGui.Text($"RegularFont load exception: {e4.Message}");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
if (fm.ItalicFont?.LoadException is { } e5)
|
|
{
|
|
ImGui.Text($"ItalicFont load exception: {e5.Message}");
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
// B1: assert the atlas actually finished building all required handles,
|
|
// not just that the references are non-null. FontsReady is the observable
|
|
// state the trimmed-fallback rebuild must still reach; a half-built atlas
|
|
// would pass the null/exception checks above but fail here.
|
|
if (!fm.FontsReady)
|
|
{
|
|
ImGui.Text("FontManager.FontsReady is false (atlas not fully built).");
|
|
SelfTestReport.Append(
|
|
Name,
|
|
"FAIL",
|
|
new[] { "FontsReady is false — atlas not fully built." }
|
|
);
|
|
return SelfTestStepResult.Fail;
|
|
}
|
|
|
|
// Report what was actually verified (Flo's request: don't just show Pass).
|
|
// The glyph-range entry counts make the B1 dedup visible — the cjk-fallback
|
|
// range is now a small trimmed remainder next to the large primary range.
|
|
var counts = fm.GlyphRangeLengths;
|
|
var italicState =
|
|
fm.ItalicFont is null ? "disabled (null)"
|
|
: fm.ItalicFont.Available ? "available"
|
|
: "NOT available";
|
|
var path = SelfTestReport.Append(
|
|
Name,
|
|
"PASS",
|
|
new[]
|
|
{
|
|
$"Axis available: {fm.Axis.Available}",
|
|
$"AxisItalic available: {fm.AxisItalic.Available}",
|
|
$"FontAwesome available: {fm.FontAwesome.Available}",
|
|
$"RegularFont available: {fm.RegularFont.Available}",
|
|
$"ItalicFont: {italicState}",
|
|
$"FontsReady: {fm.FontsReady}",
|
|
$"Glyph-range entries: primary={counts.Ranges}, jp={counts.JpRange}, "
|
|
+ $"cjk-fallback={counts.CjkFallback} (B1 trimmed)",
|
|
$"UseHellionFont={Plugin.Config.UseHellionFont}, ItalicEnabled={Plugin.Config.ItalicEnabled}",
|
|
}
|
|
);
|
|
ImGui.Text(
|
|
$"PASS — FontsReady, ranges primary={counts.Ranges}/jp={counts.JpRange}/"
|
|
+ $"cjk-fallback={counts.CjkFallback}. Report: {path}"
|
|
);
|
|
return SelfTestStepResult.Pass;
|
|
}
|
|
|
|
public void CleanUp() { }
|
|
}
|