Browse Source

Fix ItemsPresenterSimple tests.

There were two problems:

- There were two root controls (`TestScroller` and `TestRoot`)
- The root control needs to have a fixed size otherwise it will grow because `LayoutManager` passes `MaxClientSize` to its measure (which may be different to the initial measure that we were using to set its size).
pull/1014/head
Steven Kirk 9 years ago
parent
commit
48df92055e
  1. 121
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

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

@ -12,6 +12,7 @@ using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.UnitTests; using Avalonia.UnitTests;
@ -722,10 +723,10 @@ namespace Avalonia.Controls.UnitTests.Presenters
public void GetControlInDirection_Down_Should_Return_Existing_Container_If_Materialized() public void GetControlInDirection_Down_Should_Return_Existing_Container_If_Materialized()
{ {
var target = CreateTarget(); var target = CreateTarget();
var scroller = (TestScroller)target.Parent;
target.ApplyTemplate(); scroller.Width = scroller.Height = 100;
target.Measure(new Size(100, 100)); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
target.Arrange(new Rect(0, 0, 100, 100));
var from = target.Panel.Children[5]; var from = target.Panel.Children[5];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
@ -739,10 +740,10 @@ namespace Avalonia.Controls.UnitTests.Presenters
public void GetControlInDirection_Down_Should_Scroll_If_Necessary() public void GetControlInDirection_Down_Should_Scroll_If_Necessary()
{ {
var target = CreateTarget(); var target = CreateTarget();
var scroller = (TestScroller)target.Parent;
target.ApplyTemplate(); scroller.Width = scroller.Height = 100;
target.Measure(new Size(100, 100)); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
target.Arrange(new Rect(0, 0, 100, 100));
var from = target.Panel.Children[9]; var from = target.Panel.Children[9];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
@ -756,44 +757,40 @@ namespace Avalonia.Controls.UnitTests.Presenters
[Fact] [Fact]
public void GetControlInDirection_Down_Should_Scroll_If_Partially_Visible() public void GetControlInDirection_Down_Should_Scroll_If_Partially_Visible()
{ {
using (UnitTestApplication.Start(new TestServices())) var target = CreateTarget();
{ var scroller = (TestScroller)target.Parent;
var target = CreateTarget();
var scroller = (ScrollContentPresenter)target.Parent;
scroller.Measure(new Size(100, 95)); scroller.Width = 100;
scroller.Arrange(new Rect(0, 0, 100, 95)); scroller.Height = 95;
scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
var from = target.Panel.Children[8]; var from = target.Panel.Children[8];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
NavigationDirection.Down, NavigationDirection.Down,
from); from);
Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset); Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[8], result); Assert.Same(target.Panel.Children[8], result);
}
} }
[Fact] [Fact]
public void GetControlInDirection_Up_Should_Scroll_If_Partially_Visible_Item_Is_Currently_Shown() public void GetControlInDirection_Up_Should_Scroll_If_Partially_Visible_Item_Is_Currently_Shown()
{ {
using (UnitTestApplication.Start(new TestServices())) var target = CreateTarget();
{ var scroller = (TestScroller)target.Parent;
var target = CreateTarget();
var scroller = (ScrollContentPresenter)target.Parent;
scroller.Measure(new Size(100, 95)); scroller.Width = 100;
scroller.Arrange(new Rect(0, 0, 100, 95)); scroller.Height = 95;
((ILogicalScrollable)target).Offset = new Vector(0, 11); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
((ILogicalScrollable)target).Offset = new Vector(0, 11);
var from = target.Panel.Children[1]; var from = target.Panel.Children[1];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
NavigationDirection.Up, NavigationDirection.Up,
from); from);
Assert.Equal(new Vector(0, 10), ((ILogicalScrollable)target).Offset); Assert.Equal(new Vector(0, 10), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[0], result); Assert.Same(target.Panel.Children[0], result);
}
} }
[Fact] [Fact]
@ -834,10 +831,10 @@ namespace Avalonia.Controls.UnitTests.Presenters
public void GetControlInDirection_Right_Should_Return_Existing_Container_If_Materialized() public void GetControlInDirection_Right_Should_Return_Existing_Container_If_Materialized()
{ {
var target = CreateTarget(orientation: Orientation.Horizontal); var target = CreateTarget(orientation: Orientation.Horizontal);
var scroller = (TestScroller)target.Parent;
target.ApplyTemplate(); scroller.Width = scroller.Height = 100;
target.Measure(new Size(100, 100)); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
target.Arrange(new Rect(0, 0, 100, 100));
var from = target.Panel.Children[5]; var from = target.Panel.Children[5];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
@ -851,10 +848,10 @@ namespace Avalonia.Controls.UnitTests.Presenters
public void GetControlInDirection_Right_Should_Scroll_If_Necessary() public void GetControlInDirection_Right_Should_Scroll_If_Necessary()
{ {
var target = CreateTarget(orientation: Orientation.Horizontal); var target = CreateTarget(orientation: Orientation.Horizontal);
var scroller = (TestScroller)target.Parent;
target.ApplyTemplate(); scroller.Width = scroller.Height = 100;
target.Measure(new Size(100, 100)); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
target.Arrange(new Rect(0, 0, 100, 100));
var from = target.Panel.Children[9]; var from = target.Panel.Children[9];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
@ -868,32 +865,31 @@ namespace Avalonia.Controls.UnitTests.Presenters
[Fact] [Fact]
public void GetControlInDirection_Right_Should_Scroll_If_Partially_Visible() public void GetControlInDirection_Right_Should_Scroll_If_Partially_Visible()
{ {
using (UnitTestApplication.Start(new TestServices())) var target = CreateTarget(orientation: Orientation.Horizontal);
{ var scroller = (TestScroller)target.Parent;
var target = CreateTarget(orientation: Orientation.Horizontal);
var scroller = (ScrollContentPresenter)target.Parent;
scroller.Measure(new Size(95, 100)); scroller.Width = 95;
scroller.Arrange(new Rect(0, 0, 95, 100)); scroller.Height = 100;
scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
var from = target.Panel.Children[8]; var from = target.Panel.Children[8];
var result = ((ILogicalScrollable)target).GetControlInDirection( var result = ((ILogicalScrollable)target).GetControlInDirection(
NavigationDirection.Right, NavigationDirection.Right,
from); from);
Assert.Equal(new Vector(1, 0), ((ILogicalScrollable)target).Offset); Assert.Equal(new Vector(1, 0), ((ILogicalScrollable)target).Offset);
Assert.Same(target.Panel.Children[8], result); Assert.Same(target.Panel.Children[8], result);
}
} }
[Fact] [Fact]
public void GetControlInDirection_Left_Should_Scroll_If_Partially_Visible_Item_Is_Currently_Shown() public void GetControlInDirection_Left_Should_Scroll_If_Partially_Visible_Item_Is_Currently_Shown()
{ {
var target = CreateTarget(orientation: Orientation.Horizontal); var target = CreateTarget(orientation: Orientation.Horizontal);
var scroller = (TestScroller)target.Parent;
target.ApplyTemplate(); scroller.Width = 95;
target.Measure(new Size(95, 100)); scroller.Height = 100;
target.Arrange(new Rect(0, 0, 95, 100)); scroller.LayoutManager.ExecuteInitialLayoutPass(scroller);
((ILogicalScrollable)target).Offset = new Vector(11, 0); ((ILogicalScrollable)target).Offset = new Vector(11, 0);
var from = target.Panel.Children[1]; var from = target.Panel.Children[1];
@ -1007,8 +1003,6 @@ namespace Avalonia.Controls.UnitTests.Presenters
}; };
scroller.UpdateChild(); scroller.UpdateChild();
new TestRoot().Child = scroller;
return result; return result;
} }
@ -1030,11 +1024,17 @@ namespace Avalonia.Controls.UnitTests.Presenters
}); });
} }
private class TestScroller : ScrollContentPresenter, IRenderRoot private class TestScroller : ScrollContentPresenter, IRenderRoot, ILayoutRoot
{ {
public IRenderer Renderer { get; } public IRenderer Renderer { get; }
public Size ClientSize { get; } public Size ClientSize { get; }
public Size MaxClientSize => Size.Infinity;
public double LayoutScaling => 1;
public ILayoutManager LayoutManager { get; } = new LayoutManager();
public IRenderTarget CreateRenderTarget() public IRenderTarget CreateRenderTarget()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -1054,6 +1054,11 @@ namespace Avalonia.Controls.UnitTests.Presenters
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
protected override Size MeasureOverride(Size availableSize)
{
return base.MeasureOverride(availableSize);
}
} }
private class TestItemsPresenter : ItemsPresenter private class TestItemsPresenter : ItemsPresenter

Loading…
Cancel
Save