|
|
@@ -10,6 +10,7 @@ using Avalonia.Controls.Generators;
|
|
|
using Avalonia.Controls.Presenters;
|
|
|
using Avalonia.Controls.Primitives;
|
|
|
using Avalonia.Controls.Templates;
|
|
|
+using Avalonia.Input;
|
|
|
using Xunit;
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
@@ -131,7 +132,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Moving_To_And_From_The_End_With_Partial_Item_Should_Set_Panel_PixelOffset()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 95));
|
|
|
@@ -162,7 +163,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Inserting_Items_Should_Update_Containers()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -187,7 +188,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Removing_First_Materialized_Item_Should_Update_Containers()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -209,7 +210,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Removing_Items_From_Middle_Should_Update_Containers_When_All_Items_Visible()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 200));
|
|
|
@@ -234,7 +235,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Removing_Last_Item_Should_Update_Containers_When_All_Items_Visible()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 200));
|
|
|
@@ -258,7 +259,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Removing_Items_When_Scrolled_To_End_Should_Recyle_Containers_At_Top()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20, useAvaloniaList: true);
|
|
|
+ var target = CreateTarget(useAvaloniaList: true);
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -282,7 +283,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Removing_Items_When_Scrolled_To_Near_End_Should_Recycle_Containers_At_Bottom_And_Top()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20, useAvaloniaList: true);
|
|
|
+ var target = CreateTarget(useAvaloniaList: true);
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -308,7 +309,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Replacing_Items_Should_Update_Containers()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -329,7 +330,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Moving_Items_Should_Update_Containers()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -353,7 +354,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
[Fact]
|
|
|
public void Setting_Items_To_Null_Should_Remove_Containers()
|
|
|
{
|
|
|
- var target = CreateTarget(itemCount: 20);
|
|
|
+ var target = CreateTarget();
|
|
|
|
|
|
target.ApplyTemplate();
|
|
|
target.Measure(new Size(100, 100));
|
|
|
@@ -370,6 +371,81 @@ namespace Avalonia.Controls.UnitTests.Presenters
|
|
|
Assert.Empty(target.Panel.Children);
|
|
|
}
|
|
|
|
|
|
+ public class Vertical
|
|
|
+ {
|
|
|
+ [Fact]
|
|
|
+ public void GetControlInDirection_Down_Should_Return_Existing_Container_If_Materialized()
|
|
|
+ {
|
|
|
+ var target = CreateTarget();
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Measure(new Size(100, 100));
|
|
|
+ target.Arrange(new Rect(0, 0, 100, 100));
|
|
|
+
|
|
|
+ var from = target.Panel.Children[5];
|
|
|
+ var result = ((ILogicalScrollable)target).GetControlInDirection(
|
|
|
+ FocusNavigationDirection.Down,
|
|
|
+ from);
|
|
|
+
|
|
|
+ Assert.Same(target.Panel.Children[6], result);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void GetControlInDirection_Down_Should_Scroll_If_Necessary()
|
|
|
+ {
|
|
|
+ var target = CreateTarget();
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Measure(new Size(100, 100));
|
|
|
+ target.Arrange(new Rect(0, 0, 100, 100));
|
|
|
+
|
|
|
+ var from = target.Panel.Children[9];
|
|
|
+ var result = ((ILogicalScrollable)target).GetControlInDirection(
|
|
|
+ FocusNavigationDirection.Down,
|
|
|
+ from);
|
|
|
+
|
|
|
+ Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
|
|
|
+ Assert.Same(target.Panel.Children[9], result);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void GetControlInDirection_Down_Should_Scroll_If_Partially_Visible()
|
|
|
+ {
|
|
|
+ var target = CreateTarget();
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Measure(new Size(100, 95));
|
|
|
+ target.Arrange(new Rect(0, 0, 100, 95));
|
|
|
+
|
|
|
+ var from = target.Panel.Children[8];
|
|
|
+ var result = ((ILogicalScrollable)target).GetControlInDirection(
|
|
|
+ FocusNavigationDirection.Down,
|
|
|
+ from);
|
|
|
+
|
|
|
+ Assert.Equal(new Vector(0, 1), ((ILogicalScrollable)target).Offset);
|
|
|
+ Assert.Same(target.Panel.Children[8], result);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void GetControlInDirection_Up_Should_Scroll_If_Partially_Visible_Is_Currently_Shown()
|
|
|
+ {
|
|
|
+ var target = CreateTarget();
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Measure(new Size(100, 95));
|
|
|
+ target.Arrange(new Rect(0, 0, 100, 95));
|
|
|
+ ((ILogicalScrollable)target).Offset = new Vector(0, 11);
|
|
|
+
|
|
|
+ var from = target.Panel.Children[1];
|
|
|
+ var result = ((ILogicalScrollable)target).GetControlInDirection(
|
|
|
+ FocusNavigationDirection.Up,
|
|
|
+ from);
|
|
|
+
|
|
|
+ Assert.Equal(new Vector(0, 10), ((ILogicalScrollable)target).Offset);
|
|
|
+ Assert.Same(target.Panel.Children[0], result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public class WithContainers
|
|
|
{
|
|
|
[Fact]
|