From b44df1c609aae0a93525fed6ee5cdd48e73024e8 Mon Sep 17 00:00:00 2001 From: BDisp Date: Tue, 3 Jan 2023 13:59:06 +0000 Subject: [PATCH 1/2] Fixes #2269. ListView.EnsuresVisibilitySelectedItem must be public. --- Terminal.Gui/Views/ListView.cs | 9 +++-- UnitTests/ListViewTests.cs | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index 6997ce5ce..f848ee9b4 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/Terminal.Gui/Views/ListView.cs @@ -743,7 +743,10 @@ namespace Terminal.Gui { return base.OnLeave (view); } - void EnsuresVisibilitySelectedItem () + /// + /// Ensures the selected item is always visible on the screen. + /// + public void EnsuresVisibilitySelectedItem () { SuperView?.LayoutSubviews (); if (selected < top) { @@ -840,7 +843,7 @@ namespace Terminal.Gui { if (src == null || src?.Count == 0) { return 0; } - + int maxLength = 0; for (int i = 0; i < src.Count; i++) { var t = src [i]; @@ -924,7 +927,7 @@ namespace Terminal.Gui { return i; } } else if (t is string s) { - if (s.ToUpperInvariant ().StartsWith (search.ToUpperInvariant ())) { + if (s.StartsWith (search, StringComparison.InvariantCultureIgnoreCase)) { return i; } } diff --git a/UnitTests/ListViewTests.cs b/UnitTests/ListViewTests.cs index 3c2d12b4a..b6358e609 100644 --- a/UnitTests/ListViewTests.cs +++ b/UnitTests/ListViewTests.cs @@ -451,5 +451,67 @@ namespace Terminal.Gui.Views { lv.SetSourceAsync (null); Assert.NotNull (lv.Source); } + + [Fact] + public void ListWrapper_StartsWith () + { + var lw = new ListWrapper (new List { "One", "Two", "Three" }); + + Assert.Equal (1, lw.StartsWith ("t")); + Assert.Equal (1, lw.StartsWith ("tw")); + Assert.Equal (2, lw.StartsWith ("th")); + Assert.Equal (1, lw.StartsWith ("T")); + Assert.Equal (1, lw.StartsWith ("TW")); + Assert.Equal (2, lw.StartsWith ("TH")); + + lw = new ListWrapper (new List { "One", "Two", "Three" }); + + Assert.Equal (1, lw.StartsWith ("t")); + Assert.Equal (1, lw.StartsWith ("tw")); + Assert.Equal (2, lw.StartsWith ("th")); + Assert.Equal (1, lw.StartsWith ("T")); + Assert.Equal (1, lw.StartsWith ("TW")); + Assert.Equal (2, lw.StartsWith ("TH")); + } + + [Fact, AutoInitShutdown] + public void EnsuresVisibilitySelectedItem_SelectedItem () + { + var source = new List (); + for (int i = 0; i < 10; i++) { + source.Add ($"Item {i}"); + } + var lv = new ListView (source) { + Width = 10, + Height = 5 + }; + Application.Top.Add (lv); + Application.Begin (Application.Top); + + TestHelpers.AssertDriverContentsWithFrameAre (@" +Item 0 +Item 1 +Item 2 +Item 3 +Item 4", output); + + lv.SelectedItem = 6; + Application.Refresh (); + TestHelpers.AssertDriverContentsWithFrameAre (@" +Item 0 +Item 1 +Item 2 +Item 3 +Item 4", output); + + lv.EnsuresVisibilitySelectedItem (); + Application.Refresh (); + TestHelpers.AssertDriverContentsWithFrameAre (@" +Item 2 +Item 3 +Item 4 +Item 5 +Item 6", output); + } } } From 2c921b056d6cfbcfca652186ea7958d4a3c91beb Mon Sep 17 00:00:00 2001 From: BDisp Date: Tue, 3 Jan 2023 15:10:28 +0000 Subject: [PATCH 2/2] Change method name to EnsureSelectedItemVisible. --- Terminal.Gui/Views/ListView.cs | 6 +++--- UnitTests/ListViewTests.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index f848ee9b4..67d0e88c4 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/Terminal.Gui/Views/ListView.cs @@ -430,7 +430,7 @@ namespace Terminal.Gui { var newItem = KeystrokeNavigator?.GetNextMatchingItem (SelectedItem, (char)kb.KeyValue); if (newItem is int && newItem != -1) { SelectedItem = (int)newItem; - EnsuresVisibilitySelectedItem (); + EnsureSelectedItemVisible (); SetNeedsDisplay (); return true; } @@ -727,7 +727,7 @@ namespace Terminal.Gui { Application.Driver.SetCursorVisibility (CursorVisibility.Invisible); if (lastSelectedItem == -1) { - EnsuresVisibilitySelectedItem (); + EnsureSelectedItemVisible (); } return base.OnEnter (view); @@ -746,7 +746,7 @@ namespace Terminal.Gui { /// /// Ensures the selected item is always visible on the screen. /// - public void EnsuresVisibilitySelectedItem () + public void EnsureSelectedItemVisible () { SuperView?.LayoutSubviews (); if (selected < top) { diff --git a/UnitTests/ListViewTests.cs b/UnitTests/ListViewTests.cs index b6358e609..389a4137a 100644 --- a/UnitTests/ListViewTests.cs +++ b/UnitTests/ListViewTests.cs @@ -203,7 +203,7 @@ namespace Terminal.Gui.Views { [Fact] [AutoInitShutdown] - public void EnsuresVisibilitySelectedItem_Top () + public void EnsureSelectedItemVisible_Top () { var source = new List () { "First", "Second" }; ListView lv = new ListView (source) { Width = Dim.Fill (), Height = 1 }; @@ -475,7 +475,7 @@ namespace Terminal.Gui.Views { } [Fact, AutoInitShutdown] - public void EnsuresVisibilitySelectedItem_SelectedItem () + public void EnsureSelectedItemVisible_SelectedItem () { var source = new List (); for (int i = 0; i < 10; i++) { @@ -504,7 +504,7 @@ Item 2 Item 3 Item 4", output); - lv.EnsuresVisibilitySelectedItem (); + lv.EnsureSelectedItemVisible (); Application.Refresh (); TestHelpers.AssertDriverContentsWithFrameAre (@" Item 2