using System.Text.Json; using static Terminal.Gui.ConfigurationManager; namespace Terminal.Gui.ConfigurationTests; public class ThemeScopeTests { public static readonly JsonSerializerOptions _jsonOptions = new () { Converters = { //new AttributeJsonConverter (), //new ColorJsonConverter () } }; [Fact] public void AllThemesPresent () { Reset (); Assert.True (Themes.ContainsKey ("Default")); Assert.True (Themes.ContainsKey ("Dark")); Assert.True (Themes.ContainsKey ("Light")); } [Fact] [AutoInitShutdown] public void Apply_ShouldApplyUpdatedProperties () { Reset (); Assert.NotEmpty (Themes); Assert.Equal (Alignment.End, Dialog.DefaultButtonAlignment); Themes ["Default"] ["Dialog.DefaultButtonAlignment"].PropertyValue = Alignment.Center; ThemeManager.Themes! [ThemeManager.SelectedTheme]!.Apply (); Assert.Equal (Alignment.Center, Dialog.DefaultButtonAlignment); Reset (); } [Fact] public void GetHardCodedDefaults_ShouldSetProperties () { Reset (); GetHardCodedDefaults (); Assert.NotEmpty (Themes); Assert.Equal ("Default", Themes.Theme); } [Fact] public void TestSerialize_RoundTrip () { Reset (); Dictionary initial = ThemeManager.Themes; string serialized = JsonSerializer.Serialize> (Themes, _jsonOptions); IDictionary deserialized = JsonSerializer.Deserialize> (serialized, _jsonOptions); Assert.NotEqual (initial, deserialized); Assert.Equal (deserialized.Count, initial.Count); } [Fact] public void ThemeManager_ClassMethodsWork () { Reset (); Assert.Equal (ThemeManager.Instance, Themes); Assert.NotEmpty (ThemeManager.Themes); ThemeManager.SelectedTheme = "foo"; Assert.Equal ("foo", ThemeManager.SelectedTheme); ThemeManager.Reset (); Assert.Equal (string.Empty, ThemeManager.SelectedTheme); Assert.Empty (ThemeManager.Themes); } }