| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #nullable enable
- using Xunit;
- namespace Terminal.Gui.ViewTests;
- [Trait ("Category", "View.Scheme")]
- public class SchemeTests
- {
- [Fact]
- public void GetScheme_Default_ReturnsBaseScheme ()
- {
- var view = new View ();
- var baseScheme = SchemeManager.GetHardCodedSchemes ()? ["Base"];
- Assert.Equal (baseScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void SetScheme_Explicitly_SetsSchemeCorrectly ()
- {
- var view = new View ();
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- view.SetScheme (dialogScheme);
- Assert.True (view.HasScheme);
- Assert.Equal (dialogScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void GetScheme_InheritsFromSuperView_WhenNotExplicitlySet ()
- {
- var superView = new View ();
- var subView = new View ();
- superView.Add (subView);
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- superView.SetScheme (dialogScheme);
- Assert.Equal (dialogScheme, subView.GetScheme ());
- Assert.False (subView.HasScheme);
- subView.Dispose ();
- superView.Dispose ();
- }
- [Fact]
- public void SetSchemeName_OverridesInheritedScheme ()
- {
- var view = new View ();
- view.SchemeName = "Dialog";
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- Assert.Equal (dialogScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void GetAttribute_ReturnsCorrectAttribute_Via_Mock ()
- {
- var view = new View { SchemeName = "Base" };
- view.Driver = new MockConsoleDriver ();
- view.Driver.SetAttribute (new Attribute (Color.Red, Color.Green));
- // Act
- var attribute = view.GetCurrentAttribute ();
- // Assert
- Assert.Equal (new Attribute (Color.Red, Color.Green), attribute);
- }
- [Fact]
- public void GetAttributeForRole_ReturnsCorrectAttribute ()
- {
- var view = new View { SchemeName = "Base" };
- Assert.Equal (view.GetScheme ().Normal, view.GetAttributeForRole (VisualRole.Normal));
- Assert.Equal (view.GetScheme ().HotNormal, view.GetAttributeForRole (VisualRole.HotNormal));
- Assert.Equal (view.GetScheme ().Focus, view.GetAttributeForRole (VisualRole.Focus));
- Assert.Equal (view.GetScheme ().HotFocus, view.GetAttributeForRole (VisualRole.HotFocus));
- Assert.Equal (view.GetScheme ().Disabled, view.GetAttributeForRole (VisualRole.Disabled));
- view.Dispose ();
- }
- [Fact]
- public void GetAttributeForRole_DisabledView_ReturnsCorrectAttribute ()
- {
- var view = new View { SchemeName = "Base" };
- view.Enabled = false;
- Assert.Equal (view.GetScheme ().Disabled, view.GetAttributeForRole (VisualRole.Normal));
- Assert.Equal (view.GetScheme ().Disabled, view.GetAttributeForRole (VisualRole.HotNormal));
- view.Dispose ();
- }
- [Fact]
- public void SetAttributeForRole_SetsCorrectAttribute ()
- {
- var view = new View { SchemeName = "Base" };
- view.Driver = new MockConsoleDriver ();
- view.Driver.SetAttribute (new Attribute (Color.Red, Color.Green));
- var previousAttribute = view.SetAttributeForRole (VisualRole.Focus);
- Assert.Equal (view.GetScheme ().Focus, view.GetCurrentAttribute ());
- Assert.NotEqual (previousAttribute, view.GetCurrentAttribute ());
- view.Dispose ();
- }
- [Fact]
- public void OnGettingScheme_Override_StopsDefaultBehavior ()
- {
- var view = new CustomView ();
- var customScheme = SchemeManager.GetHardCodedSchemes ()? ["Error"];
- Assert.Equal (customScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void OnSettingScheme_Override_PreventsSettingScheme ()
- {
- var view = new CustomView ();
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- view.SetScheme (dialogScheme);
- Assert.NotEqual (dialogScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void GettingScheme_Event_CanOverrideScheme ()
- {
- var view = new View ();
- var customScheme = SchemeManager.GetHardCodedSchemes ()? ["Error"]! with { Normal = Attribute.Default };
- Assert.NotEqual (Attribute.Default, view.GetScheme ().Normal);
- view.GettingScheme += (sender, args) =>
- {
- args.Result = customScheme;
- args.Handled = true;
- };
- Assert.Equal (customScheme, view.GetScheme ());
- Assert.Equal (Attribute.Default, view.GetScheme ().Normal);
- view.Dispose ();
- }
- [Fact]
- public void SettingScheme_Event_CanCancelSchemeChange ()
- {
- var view = new View ();
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- view.SchemeChanging += (sender, args) => args.Handled = true;
- view.SetScheme (dialogScheme);
- Assert.NotEqual (dialogScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void GetAttributeForRole_Event_CanOverrideAttribute ()
- {
- var view = new View { SchemeName = "Base" };
- var customAttribute = new Attribute (Color.BrightRed, Color.BrightYellow);
- view.GettingAttributeForRole += (sender, args) =>
- {
- if (args.Role == VisualRole.Focus)
- {
- args.Result = customAttribute;
- args.Handled = true;
- }
- };
- Assert.Equal (customAttribute, view.GetAttributeForRole (VisualRole.Focus));
- view.Dispose ();
- }
- [Fact]
- public void GetHardCodedSchemes_ReturnsExpectedSchemes ()
- {
- var schemes = Scheme.GetHardCodedSchemes ();
- Assert.NotNull (schemes);
- Assert.Contains ("Base", schemes.Keys);
- Assert.Contains ("Dialog", schemes.Keys);
- Assert.Contains ("Error", schemes.Keys);
- Assert.Contains ("Menu", schemes.Keys);
- Assert.Contains ("Toplevel", schemes.Keys);
- }
- [Fact]
- public void SchemeName_OverridesSuperViewScheme ()
- {
- var superView = new View ();
- var subView = new View ();
- superView.Add (subView);
- subView.SchemeName = "Error";
- var errorScheme = SchemeManager.GetHardCodedSchemes ()? ["Error"];
- Assert.Equal (errorScheme, subView.GetScheme ());
- subView.Dispose ();
- superView.Dispose ();
- }
- [Fact]
- public void Scheme_DefaultsToBase_WhenNotSet ()
- {
- var view = new View ();
- var baseScheme = SchemeManager.GetHardCodedSchemes ()? ["Base"];
- Assert.Equal (baseScheme, view.GetScheme ());
- view.Dispose ();
- }
- [Fact]
- public void Scheme_HandlesNullSuperViewGracefully ()
- {
- var view = new View ();
- view.SchemeName = "Dialog";
- var dialogScheme = SchemeManager.GetHardCodedSchemes ()? ["Dialog"];
- Assert.Equal (dialogScheme, view.GetScheme ());
- view.Dispose ();
- }
- private class CustomView : View
- {
- protected override bool OnGettingScheme (out Scheme? scheme)
- {
- scheme = SchemeManager.GetHardCodedSchemes ()? ["Error"];
- return true;
- }
- protected override bool OnSettingScheme (ValueChangingEventArgs<Scheme?> args)
- {
- return true; // Prevent setting the scheme
- }
- }
- [Fact]
- public void View_Resolves_Attributes_From_Scheme ()
- {
- View view = new Label { SchemeName = "Base" };
- foreach (VisualRole role in Enum.GetValues<VisualRole> ())
- {
- Attribute attr = view.GetAttributeForRole (role);
- Assert.NotEqual (default, attr.Foreground); // Defensive: avoid all-defaults
- }
- view.Dispose ();
- }
- }
|