|
|
@@ -254,7 +254,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
|
- public void Removing_Items_When_Scrolled_To_End_Should_Add_Containers_At_Top()
|
|
|
+ public void Removing_Items_When_Scrolled_To_End_Should_Recyle_Containers_At_Top()
|
|
|
{
|
|
|
var target = CreateTarget(itemCount: 20, useAvaloniaList: true);
|
|
|
|
|
|
@@ -277,6 +277,32 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
Assert.Equal(expected, actual);
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Removing_Items_When_Scrolled_To_Near_End_Should_Recycle_Containers_At_Bottom_And_Top()
|
|
|
+ {
|
|
|
+ var target = CreateTarget(itemCount: 20, useAvaloniaList: true);
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Measure(new Size(100, 100));
|
|
|
+ target.Arrange(new Rect(0, 0, 100, 100));
|
|
|
+
|
|
|
+ ((ILogicalScrollable)target).Offset = new Vector(0, 9);
|
|
|
+
|
|
|
+ var expected = Enumerable.Range(9, 10).Select(x => $"Item {x}").ToList();
|
|
|
+ var items = (AvaloniaList<string>)target.Items;
|
|
|
+ var actual = target.Panel.Children.Select(x => x.DataContext).ToList();
|
|
|
+
|
|
|
+ Assert.Equal(expected, actual);
|
|
|
+
|
|
|
+ items.RemoveRange(15, 3);
|
|
|
+ expected = Enumerable.Range(7, 8).Select(x => $"Item {x}")
|
|
|
+ .Concat(Enumerable.Range(18, 2).Select(x => $"Item {x}"))
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ actual = target.Panel.Children.Select(x => x.DataContext).ToList();
|
|
|
+ Assert.Equal(expected, actual);
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Setting_Items_To_Null_Should_Remove_Containers()
|
|
|
{
|