|
@@ -683,6 +683,57 @@ namespace Avalonia.Controls.UnitTests.Primitives
|
|
|
Assert.Equal(new[] { 0, 1, 2 }, SelectedContainers(target));
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Ctrl_Selecting_Raises_SelectionChanged_Events()
|
|
|
+ {
|
|
|
+ var target = new ListBox
|
|
|
+ {
|
|
|
+ Template = Template(),
|
|
|
+ Items = new[] { "Foo", "Bar", "Baz", "Qux" },
|
|
|
+ SelectionMode = SelectionMode.Multiple,
|
|
|
+ };
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Presenter.ApplyTemplate();
|
|
|
+
|
|
|
+ SelectionChangedEventArgs receivedArgs = null;
|
|
|
+
|
|
|
+ target.SelectionChanged += (_, args) => receivedArgs = null;
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[1]);
|
|
|
+
|
|
|
+ VerifyAdded("Bar");
|
|
|
+
|
|
|
+ receivedArgs = null;
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: InputModifiers.Control);
|
|
|
+
|
|
|
+ VerifyAdded("Baz");
|
|
|
+
|
|
|
+ receivedArgs = null;
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: InputModifiers.Control);
|
|
|
+
|
|
|
+ VerifyAdded("Qux");
|
|
|
+
|
|
|
+ receivedArgs = null;
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[1], modifiers: InputModifiers.Control);
|
|
|
+
|
|
|
+ VerifyRemoved("Bar");
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Ctrl_Selecting_SelectedItem_With_Multiple_Selection_Active_Sets_SelectedItem_To_Next_Selection()
|
|
|
{
|
|
@@ -797,6 +848,52 @@ namespace Avalonia.Controls.UnitTests.Primitives
|
|
|
Assert.Equal(new[] { 0, 1, 2, 3, 4, 5 }, SelectedContainers(target));
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Shift_Selecting_Raises_SelectionChanged_Events()
|
|
|
+ {
|
|
|
+ var target = new ListBox
|
|
|
+ {
|
|
|
+ Template = Template(),
|
|
|
+ Items = new[] { "Foo", "Bar", "Baz", "Qux" },
|
|
|
+ SelectionMode = SelectionMode.Multiple,
|
|
|
+ };
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Presenter.ApplyTemplate();
|
|
|
+
|
|
|
+ SelectionChangedEventArgs receivedArgs = null;
|
|
|
+
|
|
|
+ target.SelectionChanged += (_, args) => receivedArgs = null;
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[1]);
|
|
|
+
|
|
|
+ VerifyAdded("Bar");
|
|
|
+
|
|
|
+ receivedArgs = null;
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[3], modifiers: InputModifiers.Shift);
|
|
|
+
|
|
|
+ VerifyAdded("Baz" ,"Qux");
|
|
|
+
|
|
|
+ receivedArgs = null;
|
|
|
+ _helper.Click((Interactive)target.Presenter.Panel.Children[2], modifiers: InputModifiers.Shift);
|
|
|
+
|
|
|
+ VerifyRemoved("Qux");
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Duplicate_Items_Are_Added_To_SelectedItems_In_Order()
|
|
|
{
|
|
@@ -845,6 +942,30 @@ namespace Avalonia.Controls.UnitTests.Primitives
|
|
|
Assert.Equal("Foo", target.SelectedItem);
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void SelectAll_Raises_SelectionChanged_Event()
|
|
|
+ {
|
|
|
+ var target = new TestSelector
|
|
|
+ {
|
|
|
+ Template = Template(),
|
|
|
+ Items = new[] { "Foo", "Bar", "Baz" },
|
|
|
+ SelectionMode = SelectionMode.Multiple,
|
|
|
+ };
|
|
|
+
|
|
|
+ target.ApplyTemplate();
|
|
|
+ target.Presenter.ApplyTemplate();
|
|
|
+
|
|
|
+ SelectionChangedEventArgs receivedArgs = null;
|
|
|
+
|
|
|
+ target.SelectionChanged += (_, e) => receivedArgs = e;
|
|
|
+
|
|
|
+ target.SelectAll();
|
|
|
+
|
|
|
+ Assert.NotNull(receivedArgs);
|
|
|
+ Assert.Equal(target.Items, receivedArgs.AddedItems);
|
|
|
+ Assert.Empty(receivedArgs.RemovedItems);
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void UnselectAll_Clears_SelectedIndex_And_SelectedItem()
|
|
|
{
|