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); + } } }