|
|
|
@ -10,8 +10,10 @@ using Avalonia.Controls.Selection; |
|
|
|
using Avalonia.Controls.Templates; |
|
|
|
using Avalonia.Data; |
|
|
|
using Avalonia.Input; |
|
|
|
using Avalonia.Input.Platform; |
|
|
|
using Avalonia.Interactivity; |
|
|
|
using Avalonia.UnitTests; |
|
|
|
using Moq; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
@ -701,261 +703,290 @@ namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
[Fact] |
|
|
|
public void Shift_Selecting_From_No_Selection_Selects_From_Start() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0, 1, 2 }, SelectedContainers(target)); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0, 1, 2 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Ctrl_Selecting_Raises_SelectionChanged_Events() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
SelectionChangedEventArgs receivedArgs = null; |
|
|
|
SelectionChangedEventArgs receivedArgs = null; |
|
|
|
|
|
|
|
target.SelectionChanged += (_, args) => receivedArgs = args; |
|
|
|
target.SelectionChanged += (_, args) => receivedArgs = args; |
|
|
|
|
|
|
|
void VerifyAdded(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.AddedItems); |
|
|
|
Assert.Empty(receivedArgs.RemovedItems); |
|
|
|
} |
|
|
|
void VerifyAdded(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.AddedItems); |
|
|
|
Assert.Empty(receivedArgs.RemovedItems); |
|
|
|
} |
|
|
|
|
|
|
|
void VerifyRemoved(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.RemovedItems); |
|
|
|
Assert.Empty(receivedArgs.AddedItems); |
|
|
|
} |
|
|
|
void VerifyRemoved(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.RemovedItems); |
|
|
|
Assert.Empty(receivedArgs.AddedItems); |
|
|
|
} |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
|
|
|
|
VerifyAdded("Bar"); |
|
|
|
VerifyAdded("Bar"); |
|
|
|
|
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
VerifyAdded("Baz"); |
|
|
|
VerifyAdded("Baz"); |
|
|
|
|
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
VerifyAdded("Qux"); |
|
|
|
VerifyAdded("Qux"); |
|
|
|
|
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
VerifyRemoved("Bar"); |
|
|
|
VerifyRemoved("Bar"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Ctrl_Selecting_SelectedItem_With_Multiple_Selection_Active_Sets_SelectedItem_To_Next_Selection() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
Assert.Equal(new[] { "Bar", "Baz", "Qux" }, target.SelectedItems); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(2, target.SelectedIndex); |
|
|
|
Assert.Equal("Baz", target.SelectedItem); |
|
|
|
Assert.Equal(new[] { "Baz", "Qux" }, target.SelectedItems); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
Assert.Equal(new[] { "Bar", "Baz", "Qux" }, target.SelectedItems); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(2, target.SelectedIndex); |
|
|
|
Assert.Equal("Baz", target.SelectedItem); |
|
|
|
Assert.Equal(new[] { "Baz", "Qux" }, target.SelectedItems); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Ctrl_Selecting_Non_SelectedItem_With_Multiple_Selection_Active_Leaves_SelectedItem_The_Same() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
Assert.Equal(1, target.SelectedIndex); |
|
|
|
Assert.Equal("Bar", target.SelectedItem); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Ctrl_Select_Correct_Item_When_Duplicate_Items_Are_Present() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[4], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 3, 4 }, SelectedContainers(target)); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[4], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 3, 4 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Shift_Select_Correct_Item_When_Duplicates_Are_Present() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[5], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 3, 4, 5 }, SelectedContainers(target)); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[5], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 3, 4, 5 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Can_Shift_Select_All_Items_When_Duplicates_Are_Present() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[5], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0, 1, 2, 3, 4, 5 }, SelectedContainers(target)); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[5], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
var panel = target.Presenter.Panel; |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0, 1, 2, 3, 4, 5 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Shift_Selecting_Raises_SelectionChanged_Events() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Qux" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
SelectionChangedEventArgs receivedArgs = null; |
|
|
|
SelectionChangedEventArgs receivedArgs = null; |
|
|
|
|
|
|
|
target.SelectionChanged += (_, args) => receivedArgs = args; |
|
|
|
target.SelectionChanged += (_, args) => receivedArgs = args; |
|
|
|
|
|
|
|
void VerifyAdded(params string[] selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(selection, receivedArgs.AddedItems); |
|
|
|
Assert.Empty(receivedArgs.RemovedItems); |
|
|
|
} |
|
|
|
void VerifyAdded(params string[] selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(selection, receivedArgs.AddedItems); |
|
|
|
Assert.Empty(receivedArgs.RemovedItems); |
|
|
|
} |
|
|
|
|
|
|
|
void VerifyRemoved(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.RemovedItems); |
|
|
|
Assert.Empty(receivedArgs.AddedItems); |
|
|
|
} |
|
|
|
void VerifyRemoved(string selection) |
|
|
|
{ |
|
|
|
Assert.NotNull(receivedArgs); |
|
|
|
Assert.Equal(new[] { selection }, receivedArgs.RemovedItems); |
|
|
|
Assert.Empty(receivedArgs.AddedItems); |
|
|
|
} |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1]); |
|
|
|
|
|
|
|
VerifyAdded("Bar"); |
|
|
|
VerifyAdded("Bar"); |
|
|
|
|
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Shift); |
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
VerifyAdded("Baz" ,"Qux"); |
|
|
|
VerifyAdded("Baz", "Qux"); |
|
|
|
|
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Shift); |
|
|
|
receivedArgs = null; |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
VerifyRemoved("Qux"); |
|
|
|
VerifyRemoved("Qux"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Duplicate_Items_Are_Added_To_SelectedItems_In_Order() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz", "Foo", "Bar", "Baz" }, |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { "Foo" }, target.SelectedItems); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[4], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[4], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { "Foo", "Bar" }, target.SelectedItems); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Foo" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Foo" }, target.SelectedItems); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Foo", "Bar" }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { "Foo", "Bar", "Foo", "Bar" }, target.SelectedItems); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -1158,70 +1189,79 @@ namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
[Fact] |
|
|
|
public void Left_Click_On_SelectedItem_Should_Clear_Existing_Selection() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
target.SelectAll(); |
|
|
|
|
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
Assert.Equal(new[] { "Foo", }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0 }, SelectedContainers(target)); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
target.SelectAll(); |
|
|
|
|
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
Assert.Equal(new[] { "Foo", }, target.SelectedItems); |
|
|
|
Assert.Equal(new[] { 0 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Right_Click_On_SelectedItem_Should_Not_Clear_Existing_Selection() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
target.SelectAll(); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
target.SelectAll(); |
|
|
|
|
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0], MouseButton.Right); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0], MouseButton.Right); |
|
|
|
|
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
Assert.Equal(3, target.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Right_Click_On_UnselectedItem_Should_Clear_Existing_Selection() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(2, target.SelectedItems.Count); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(2, target.SelectedItems.Count); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -1253,41 +1293,47 @@ namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
[Fact] |
|
|
|
public void Shift_Right_Click_Should_Not_Select_Multiple() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right, modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right, modifiers: KeyModifiers.Shift); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Ctrl_Right_Click_Should_Not_Select_Multiple() |
|
|
|
{ |
|
|
|
var target = new ListBox |
|
|
|
using (UnitTestApplication.Start()) |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
|
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
var target = new ListBox |
|
|
|
{ |
|
|
|
Template = Template(), |
|
|
|
Items = new[] { "Foo", "Bar", "Baz" }, |
|
|
|
ItemTemplate = new FuncDataTemplate<string>((x, _) => new TextBlock { Width = 20, Height = 10 }), |
|
|
|
SelectionMode = SelectionMode.Multiple, |
|
|
|
}; |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<PlatformHotkeyConfiguration>().ToConstant(new Mock<PlatformHotkeyConfiguration>().Object); |
|
|
|
target.ApplyTemplate(); |
|
|
|
target.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[0]); |
|
|
|
_helper.Click((Interactive)target.Presenter.Panel.Children[2], MouseButton.Right, modifiers: KeyModifiers.Control); |
|
|
|
|
|
|
|
Assert.Equal(1, target.SelectedItems.Count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
|