Browse Source

Merge branch 'pr/592'

pull/612/head
Steven Kirk 10 years ago
parent
commit
8d6de2d383
  1. 4
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
  2. 38
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

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

@ -252,7 +252,7 @@ namespace Avalonia.Controls.Presenters
var index = NextIndex; var index = NextIndex;
var step = 1; var step = 1;
while (!panel.IsFull) while (!panel.IsFull && index >= 0)
{ {
if (index >= ItemCount) if (index >= ItemCount)
{ {
@ -475,7 +475,7 @@ namespace Avalonia.Controls.Presenters
// is only partially visible due to differing item sizes. If the container is only // is only partially visible due to differing item sizes. If the container is only
// partially visible, scroll again. Don't do this if there's no layout manager: // partially visible, scroll again. Don't do this if there's no layout manager:
// it means we're running a unit test. // it means we're running a unit test.
if (layoutManager != null) if (container != null && layoutManager != null)
{ {
layoutManager.ExecuteLayoutPass(); layoutManager.ExecuteLayoutPass();

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

@ -326,6 +326,27 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
} }
[Fact]
public void Measuring_To_Infinity_When_Scrolled_To_End_Should_Not_Throw()
{
var target = CreateTarget(useAvaloniaList: true);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
((ILogicalScrollable)target).Offset = new Vector(0, 10);
// Check for issue #589: this should not throw.
target.Measure(Size.Infinity);
var expected = Enumerable.Range(0, 20).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);
}
[Fact] [Fact]
public void Replacing_Items_Should_Update_Containers() public void Replacing_Items_Should_Update_Containers()
{ {
@ -484,6 +505,23 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Equal(0, ((IVirtualizingPanel)target.Panel).PixelOffset); Assert.Equal(0, ((IVirtualizingPanel)target.Panel).PixelOffset);
} }
[Fact]
public void Scrolling_To_Item_In_Zero_Sized_Presenter_Doesnt_Throw()
{
using (UnitTestApplication.Start(TestServices.RealLayoutManager))
{
var target = CreateTarget(itemCount: 10);
var items = (IList<string>)target.Items;
target.ApplyTemplate();
target.Measure(Size.Empty);
target.Arrange(Rect.Empty);
// Check for issue #591: this should not throw.
target.ScrollIntoView(items[0]);
}
}
public class Vertical public class Vertical
{ {
[Fact] [Fact]

Loading…
Cancel
Save