Browse Source

Added failing tests for #4048.

Steven Kirk 5 years ago
parent
commit
faaa8f28e9

+ 21 - 0
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

@@ -1619,6 +1619,27 @@ namespace Avalonia.Controls.UnitTests.Primitives
             Assert.Equal(new[] { "bar" }, target.SelectedItems);
         }
 
+        [Fact]
+        public void Preserves_SelectedItem_When_Items_Changed()
+        {
+            // Issue #4048
+            var target = new SelectingItemsControl
+            {
+                Items = new[] { "foo", "bar", "baz"},
+                SelectedItem = "bar",
+            };
+
+            Prepare(target);
+
+            Assert.Equal(1, target.SelectedIndex);
+            Assert.Equal("bar", target.SelectedItem);
+
+            target.Items = new[] { "qux", "foo", "bar" };
+
+            Assert.Equal(2, target.SelectedIndex);
+            Assert.Equal("bar", target.SelectedItem);
+        }
+
         private static void Prepare(SelectingItemsControl target)
         {
             var root = new TestRoot

+ 11 - 0
tests/Avalonia.Controls.UnitTests/Selection/InternalSelectionModelTests.cs

@@ -205,6 +205,17 @@ namespace Avalonia.Controls.UnitTests.Selection
             Assert.Equal(2, target.SelectedIndex);
         }
 
+        [Fact]
+        public void Preserves_Selection_On_Source_Changed()
+        {
+            var target = CreateTarget();
+
+            target.SelectedIndex = 1;
+            target.Source = new[] { "baz", "foo", "bar" };
+
+            Assert.Equal(2, target.SelectedIndex);
+        }
+
         private static InternalSelectionModel CreateTarget(
             bool singleSelect = false,
             IList source = null,