Browse Source

Merge pull request #652 from donandren/issues/651

added failing unit test for #651
pull/653/head
Steven Kirk 10 years ago
committed by GitHub
parent
commit
90460bce37
  1. 4
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
  2. 106
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

4
src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

@ -116,7 +116,7 @@ namespace Avalonia.Controls.Presenters
CreateAndRemoveContainers();
if (e.NewStartingIndex >= FirstIndex &&
e.NewStartingIndex + e.NewItems.Count <= NextIndex)
e.NewStartingIndex < NextIndex)
{
RecycleContainers();
}
@ -125,7 +125,7 @@ namespace Avalonia.Controls.Presenters
case NotifyCollectionChangedAction.Remove:
if (e.OldStartingIndex >= FirstIndex &&
e.OldStartingIndex + e.OldItems.Count <= NextIndex)
e.OldStartingIndex < NextIndex)
{
RecycleContainersOnRemove();
}

106
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

@ -554,6 +554,110 @@ namespace Avalonia.Controls.UnitTests.Presenters
}
}
[Fact]
public void InsertRange_Items_Should_Update_Containers()
{
var target = CreateTarget(useAvaloniaList: true);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 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);
var toAdd = Enumerable.Range(0, 3).Select(x => $"New Item {x}").ToList();
int index = 1;
items.InsertRange(index, toAdd);
expected.InsertRange(index, toAdd);
expected.RemoveRange(10, toAdd.Count);
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
[Fact]
public void InsertRange_Items_Before_Last_Should_Update_Containers()
{
var target = CreateTarget(useAvaloniaList: true);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 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);
var toAdd = Enumerable.Range(0, 3).Select(x => $"New Item {x}").ToList();
int index = 8;
items.InsertRange(index, toAdd);
expected.InsertRange(index, toAdd);
expected.RemoveRange(10, toAdd.Count);
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
[Fact]
public void RemoveRange_Items_Should_Update_Containers()
{
var target = CreateTarget(useAvaloniaList: true);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 13).Select(x => $"Item {x}").ToList();
var items = (AvaloniaList<string>)target.Items;
var actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected.Take(10), actual);
int index = 5;
int count = 3;
items.RemoveRange(index, count);
expected.RemoveRange(index, count);
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
[Fact]
public void RemoveRange_Items_Before_Last_Should_Update_Containers()
{
var target = CreateTarget(useAvaloniaList: true);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 13).Select(x => $"Item {x}").ToList();
var items = (AvaloniaList<string>)target.Items;
var actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected.Take(10), actual);
int index = 8;
int count = 3;
items.RemoveRange(index, count);
expected.RemoveRange(index, count);
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
public class Vertical
{
[Fact]
@ -877,4 +981,4 @@ namespace Avalonia.Controls.UnitTests.Presenters
}
}
}
}
}
Loading…
Cancel
Save