From 22bf1dd11044dd7eafbe7cb146ad4f4daf7ff027 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Tue, 26 May 2026 22:57:11 +0200 Subject: [PATCH] test(selftests): cover theme picker category map --- HellionChat/Plugin.cs | 1 + .../SelfTests/ThemePickerCategoryStep.cs | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 HellionChat/SelfTests/ThemePickerCategoryStep.cs diff --git a/HellionChat/Plugin.cs b/HellionChat/Plugin.cs index c5ef1ab..e271a68 100755 --- a/HellionChat/Plugin.cs +++ b/HellionChat/Plugin.cs @@ -343,6 +343,7 @@ public sealed class Plugin : IAsyncDalamudPlugin new SelfTests.FoxBannerTextureSmokeStep(this), new SelfTests.SidebarModeAutoSwitchStep(this), new SelfTests.ColorEditorBufferStep(this), + new SelfTests.ThemePickerCategoryStep(this), new SelfTests.ConfigMigrationV20Step(this), new SelfTests.HoverSheenAllocStep(this), new SelfTests.HonorificHeaderRenderStep(this), diff --git a/HellionChat/SelfTests/ThemePickerCategoryStep.cs b/HellionChat/SelfTests/ThemePickerCategoryStep.cs new file mode 100644 index 0000000..c7641f6 --- /dev/null +++ b/HellionChat/SelfTests/ThemePickerCategoryStep.cs @@ -0,0 +1,51 @@ +using System.Linq; +using Dalamud.Bindings.ImGui; +using Dalamud.Plugin.SelfTest; +using HellionChat.Themes; +using HellionChat.Ui.Components.Settings; + +namespace HellionChat.SelfTests; + +internal sealed class ThemePickerCategoryStep : ISelfTestStep +{ + private readonly Plugin _plugin; + + public ThemePickerCategoryStep(Plugin plugin) + { + _plugin = plugin; + } + + public string Name => "Hellion Chat - Theme picker category coverage"; + + public SelfTestStepResult RunStep() + { + var builtinSlugs = _plugin.ThemeRegistry.BuiltinSlugs.ToHashSet(); + var categorySlugs = ThemePicker.CategoryMapSlugs.ToList(); + + var duplicates = categorySlugs.GroupBy(x => x).Where(g => g.Count() > 1).Select(g => g.Key).ToList(); + if (duplicates.Count > 0) + { + ImGui.Text($"Duplicate slugs in category map: {string.Join(", ", duplicates)}"); + return SelfTestStepResult.Fail; + } + + var categorySet = categorySlugs.ToHashSet(); + var missing = builtinSlugs.Except(categorySet).ToList(); + var unknown = categorySet.Except(builtinSlugs).ToList(); + + if (missing.Count > 0) + { + ImGui.Text($"Builtin slugs missing from category map: {string.Join(", ", missing)}"); + return SelfTestStepResult.Fail; + } + if (unknown.Count > 0) + { + ImGui.Text($"Unknown slugs in category map (no matching builtin): {string.Join(", ", unknown)}"); + return SelfTestStepResult.Fail; + } + + return SelfTestStepResult.Pass; + } + + public void CleanUp() { } +}