From b29754cc5af9fe6cae1299f76879e9ae224d3ed4 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Wed, 2 Nov 2022 16:18:14 -0600 Subject: [PATCH 1/2] moves isovverriden to Responder, adds unit tests --- Terminal.Gui/Core/Responder.cs | 20 ++++++++++++++ Terminal.Gui/Core/View.cs | 19 -------------- UnitTests/ResponderTests.cs | 48 ++++++++++++++++++++++++++++++++++ UnitTests/ViewTests.cs | 24 ----------------- 4 files changed, 68 insertions(+), 43 deletions(-) diff --git a/Terminal.Gui/Core/Responder.cs b/Terminal.Gui/Core/Responder.cs index 37de82145..7b92f8a04 100644 --- a/Terminal.Gui/Core/Responder.cs +++ b/Terminal.Gui/Core/Responder.cs @@ -16,6 +16,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Reflection; namespace Terminal.Gui { /// @@ -236,6 +237,25 @@ namespace Terminal.Gui { /// public virtual void OnVisibleChanged () { } + /// + /// Utilty function to determine is overridden in the . + /// + /// The view. + /// The method name. + /// if it's overridden, otherwise. + internal static bool IsOverridden (Responder subclass, string method) + { + MethodInfo m = subclass.GetType ().GetMethod (method, + BindingFlags.Instance + | BindingFlags.Public + | BindingFlags.NonPublic + | BindingFlags.DeclaredOnly); + if (m == null) { + return false; + } + return m.GetBaseDefinition ().DeclaringType != m.DeclaringType; + } + /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// diff --git a/Terminal.Gui/Core/View.cs b/Terminal.Gui/Core/View.cs index 7cafe2ad8..488478991 100644 --- a/Terminal.Gui/Core/View.cs +++ b/Terminal.Gui/Core/View.cs @@ -3073,24 +3073,5 @@ namespace Terminal.Gui { return top; } - - /// - /// Check if the is overridden in the . - /// - /// The view. - /// The method name. - /// if it's overridden, otherwise. - public static bool IsOverridden (View view, string method) - { - MethodInfo m = view.GetType ().GetMethod (method, - BindingFlags.Instance - | BindingFlags.Public - | BindingFlags.NonPublic - | BindingFlags.DeclaredOnly); - if (m == null) { - return false; - } - return m.GetBaseDefinition ().DeclaringType != m.DeclaringType; - } } } diff --git a/UnitTests/ResponderTests.cs b/UnitTests/ResponderTests.cs index 7f2d927f8..3b21a9af7 100644 --- a/UnitTests/ResponderTests.cs +++ b/UnitTests/ResponderTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Terminal.Gui; using Xunit; +using static Terminal.Gui.Core.ViewTests; // Alias Console to MockConsole so we don't accidentally use Console using Console = Terminal.Gui.FakeConsole; @@ -44,5 +45,52 @@ namespace Terminal.Gui.Core { { } + + public class DerivedView : View { + public DerivedView () + { + } + + public override bool OnKeyDown (KeyEvent keyEvent) + { + return true; + } + } + + [Fact] + public void IsOverridden_False_IfNotOverridden () + { + // MouseEvent IS defined on Responder but NOT overridden + Assert.False (Responder.IsOverridden (new Responder () { }, "MouseEvent")); + + // MouseEvent is defined on Responder and NOT overrident on View + Assert.False (Responder.IsOverridden (new View () { Text = "View does not override MouseEvent" }, "MouseEvent")); + Assert.False (Responder.IsOverridden (new DerivedView () { Text = "DerivedView does not override MouseEvent" }, "MouseEvent")); + + // MouseEvent is NOT defined on DerivedView + Assert.False (Responder.IsOverridden (new DerivedView () { Text = "DerivedView does not override MouseEvent" }, "MouseEvent")); + + // OnKeyDown is defined on View and NOT overrident on Button + Assert.False (Responder.IsOverridden (new Button () { Text = "Button does not override OnKeyDown" }, "OnKeyDown")); + } + + [Fact] + public void IsOverridden_True_IfOverridden () + { + // MouseEvent is defined on Responder IS overriden on ScrollBarView (but not View) + Assert.True (Responder.IsOverridden (new ScrollBarView () { Text = "ScrollBarView overrides MouseEvent" }, "MouseEvent")); + + // OnKeyDown is defined on View + Assert.True (Responder.IsOverridden (new View () { Text = "View overrides OnKeyDown" }, "OnKeyDown")); + + // OnKeyDown is defined on DerivedView + Assert.True (Responder.IsOverridden (new DerivedView () { Text = "DerivedView overrides OnKeyDown" }, "OnKeyDown")); + + // ScrollBarView overrides both MouseEvent (from Responder) and Redraw (from View) + Assert.True (Responder.IsOverridden (new ScrollBarView () { Text = "ScrollBarView overrides MouseEvent" }, "MouseEvent")); + Assert.True (Responder.IsOverridden (new ScrollBarView () { Text = "ScrollBarView overrides Redraw" }, "Redraw")); + + Assert.True (Responder.IsOverridden (new Button () { Text = "Button overrides MouseEvent" }, "MouseEvent")); + } } } diff --git a/UnitTests/ViewTests.cs b/UnitTests/ViewTests.cs index 03969c4a7..e2a20e80b 100644 --- a/UnitTests/ViewTests.cs +++ b/UnitTests/ViewTests.cs @@ -4062,29 +4062,5 @@ This is a tes Assert.False (view.IsKeyPress); Assert.True (view.IsKeyUp); } - - [Fact, AutoInitShutdown] - public void IsOverridden_False_IfNotOverriden () - { - var view = new DerivedView () { Text = "DerivedView does not override MouseEvent", Width = 10, Height = 10 }; - - Assert.False (View.IsOverridden (view, "MouseEvent")); - - var view2 = new Button () { Text = "Button does not overrides OnKeyDown", Width = 10, Height = 10 }; - - Assert.False (View.IsOverridden (view2, "OnKeyDown")); - } - - [Fact, AutoInitShutdown] - public void IsOverridden_True_IfOverriden () - { - var view = new Button () { Text = "Button overrides MouseEvent", Width = 10, Height = 10 }; - - Assert.True (View.IsOverridden (view, "MouseEvent")); - - var view2 = new DerivedView () { Text = "DerivedView overrides OnKeyDown", Width = 10, Height = 10 }; - - Assert.True (View.IsOverridden (view2, "OnKeyDown")); - } } } From bc617252c477ea73d3a026facc19172adc6899b8 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Wed, 2 Nov 2022 16:29:11 -0600 Subject: [PATCH 2/2] removed files not having to with this PR --- Terminal.Gui/Views/ComboBox.cs | 2 +- Terminal.Gui/Views/ListView.cs | 1 + UnitTests/ComboBoxTests.cs | 36 +++++++++++++++++----------------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Terminal.Gui/Views/ComboBox.cs b/Terminal.Gui/Views/ComboBox.cs index 173dc188d..c26a340ed 100644 --- a/Terminal.Gui/Views/ComboBox.cs +++ b/Terminal.Gui/Views/ComboBox.cs @@ -484,7 +484,7 @@ namespace Terminal.Gui { search.SetFocus (); } - search.CursorPosition = search.Text.ConsoleWidth; + search.CursorPosition = search.Text.RuneCount; return base.OnEnter (view); } diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index 6997ce5ce..957216837 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/Terminal.Gui/Views/ListView.cs @@ -728,6 +728,7 @@ namespace Terminal.Gui { if (lastSelectedItem == -1) { EnsuresVisibilitySelectedItem (); + OnSelectedChanged (); } return base.OnEnter (view); diff --git a/UnitTests/ComboBoxTests.cs b/UnitTests/ComboBoxTests.cs index 41adc4b40..bf5b385c0 100644 --- a/UnitTests/ComboBoxTests.cs +++ b/UnitTests/ComboBoxTests.cs @@ -826,9 +826,9 @@ Three ", output); TestHelpers.AssertDriverColorsAre (@" 000000 -222222 -222222 -222222", attributes); +00000 +22222 +22222", attributes); Assert.True (cb.Subviews [1].ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()))); Assert.Equal ("", selected); @@ -838,9 +838,9 @@ Three ", output); cb.Redraw (cb.Bounds); TestHelpers.AssertDriverColorsAre (@" 000000 -222222 -000002 -222222", attributes); +22222 +00000 +22222", attributes); Assert.True (cb.Subviews [1].ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()))); Assert.Equal ("", selected); @@ -850,9 +850,9 @@ Three ", output); cb.Redraw (cb.Bounds); TestHelpers.AssertDriverColorsAre (@" 000000 -222222 -222222 -000002", attributes); +22222 +22222 +00000", attributes); Assert.True (cb.Subviews [1].ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ()))); Assert.Equal ("Three", selected); @@ -868,9 +868,9 @@ Three ", output); cb.Redraw (cb.Bounds); TestHelpers.AssertDriverColorsAre (@" 000000 -222222 -222222 -000002", attributes); +22222 +22222 +00000", attributes); Assert.True (cb.Subviews [1].ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()))); Assert.Equal ("Three", selected); @@ -880,9 +880,9 @@ Three ", output); cb.Redraw (cb.Bounds); TestHelpers.AssertDriverColorsAre (@" 000000 -222222 -000002 -111112", attributes); +22222 +00000 +11111", attributes); Assert.True (cb.Subviews [1].ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ()))); Assert.Equal ("Three", selected); @@ -892,9 +892,9 @@ Three ", output); cb.Redraw (cb.Bounds); TestHelpers.AssertDriverColorsAre (@" 000000 -000002 -222222 -111112", attributes); +00000 +22222 +11111", attributes); Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ()))); Assert.Equal ("Three", selected);