Browse Source

Added failing SelectedItem/Index property changed tests.

pull/4659/head
Steven Kirk 6 years ago
parent
commit
10b3c88092
  1. 218
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

218
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

@ -554,6 +554,44 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.False(items.Single().IsSelected);
}
[Fact]
public void Removing_Selected_Item_Should_Update_Selection_With_AlwaysSelected()
{
var item0 = new Item();
var item1 = new Item();
var items = new AvaloniaList<Item>
{
item0,
item1,
};
var target = new TestSelector
{
Items = items,
Template = Template(),
SelectionMode = SelectionMode.AlwaysSelected,
};
Prepare(target);
target.SelectedIndex = 1;
Assert.Equal(items[1], target.SelectedItem);
Assert.Equal(1, target.SelectedIndex);
SelectionChangedEventArgs receivedArgs = null;
target.SelectionChanged += (_, args) => receivedArgs = args;
items.RemoveAt(1);
Assert.Same(item0, target.SelectedItem);
Assert.Equal(0, target.SelectedIndex);
Assert.NotNull(receivedArgs);
Assert.Equal(new[] { item0 }, receivedArgs.AddedItems);
Assert.Equal(new[] { item1 }, receivedArgs.RemovedItems);
Assert.True(items.Single().IsSelected);
}
[Fact]
public void Removing_Selected_Item_Should_Clear_Selection_With_BeginInit()
{
@ -771,6 +809,186 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.True(called);
}
[Fact]
public void Setting_SelectedIndex_Should_Raise_PropertyChanged_Events()
{
var items = new ObservableCollection<string> { "foo", "bar", "baz" };
var target = new TestSelector
{
Items = items,
Template = Template(),
};
var selectedIndexRaised = 0;
var selectedItemRaised = 0;
target.PropertyChanged += (s, e) =>
{
if (e.Property == SelectingItemsControl.SelectedIndexProperty)
{
Assert.Equal(-1, e.OldValue);
Assert.Equal(1, e.NewValue);
++selectedIndexRaised;
}
else if (e.Property == SelectingItemsControl.SelectedItemProperty)
{
Assert.Null(e.OldValue);
Assert.Equal("bar", e.NewValue);
++selectedItemRaised;
}
};
target.SelectedIndex = 1;
Assert.Equal(1, selectedIndexRaised);
Assert.Equal(1, selectedItemRaised);
}
[Fact]
public void Removing_Selected_Item_Should_Raise_PropertyChanged_Events()
{
var items = new ObservableCollection<string> { "foo", "bar", "baz" };
var target = new TestSelector
{
Items = items,
Template = Template(),
};
var selectedIndexRaised = 0;
var selectedItemRaised = 0;
target.SelectedIndex = 1;
target.PropertyChanged += (s, e) =>
{
if (e.Property == SelectingItemsControl.SelectedIndexProperty)
{
Assert.Equal(1, e.OldValue);
Assert.Equal(-1, e.NewValue);
++selectedIndexRaised;
}
else if (e.Property == SelectingItemsControl.SelectedItemProperty)
{
Assert.Equal("bar", e.OldValue);
Assert.Null(e.NewValue);
}
};
items.RemoveAt(1);
Assert.Equal(1, selectedIndexRaised);
Assert.Equal(0, selectedItemRaised);
}
[Fact]
public void Removing_Selected_Item0_Should_Raise_PropertyChanged_Events_With_AlwaysSelected()
{
var items = new ObservableCollection<string> { "foo", "bar", "baz" };
var target = new TestSelector
{
Items = items,
Template = Template(),
SelectionMode = SelectionMode.AlwaysSelected,
};
var selectedIndexRaised = 0;
var selectedItemRaised = 0;
target.SelectedIndex = 0;
target.PropertyChanged += (s, e) =>
{
if (e.Property == SelectingItemsControl.SelectedIndexProperty)
{
++selectedIndexRaised;
}
else if (e.Property == SelectingItemsControl.SelectedItemProperty)
{
Assert.Equal("foo", e.OldValue);
Assert.Equal("bar", e.NewValue);
++selectedItemRaised;
}
};
items.RemoveAt(0);
Assert.Equal(0, selectedIndexRaised);
Assert.Equal(1, selectedItemRaised);
}
[Fact]
public void Removing_Selected_Item1_Should_Raise_PropertyChanged_Events_With_AlwaysSelected()
{
var items = new ObservableCollection<string> { "foo", "bar", "baz" };
var target = new TestSelector
{
Items = items,
Template = Template(),
SelectionMode = SelectionMode.AlwaysSelected,
};
var selectedIndexRaised = 0;
var selectedItemRaised = 0;
target.SelectedIndex = 1;
target.PropertyChanged += (s, e) =>
{
if (e.Property == SelectingItemsControl.SelectedIndexProperty)
{
Assert.Equal(1, e.OldValue);
Assert.Equal(0, e.NewValue);
++selectedIndexRaised;
}
else if (e.Property == SelectingItemsControl.SelectedItemProperty)
{
Assert.Equal("bar", e.OldValue);
Assert.Equal("foo", e.NewValue);
}
};
items.RemoveAt(1);
Assert.Equal(1, selectedIndexRaised);
Assert.Equal(0, selectedItemRaised);
}
[Fact]
public void Removing_Item_Before_Selection_Should_Raise_PropertyChanged_Events()
{
var items = new ObservableCollection<string> { "foo", "bar", "baz" };
var target = new SelectingItemsControl
{
Items = items,
Template = Template(),
};
var selectedIndexRaised = 0;
var selectedItemRaised = 0;
target.SelectedIndex = 1;
target.PropertyChanged += (s, e) =>
{
if (e.Property == SelectingItemsControl.SelectedIndexProperty)
{
Assert.Equal(1, e.OldValue);
Assert.Equal(0, e.NewValue);
++selectedIndexRaised;
}
else if (e.Property == SelectingItemsControl.SelectedItemProperty)
{
++selectedItemRaised;
}
};
items.RemoveAt(0);
Assert.Equal(1, selectedIndexRaised);
Assert.Equal(0, selectedItemRaised);
}
[Fact]
public void Order_Of_Setting_Items_And_SelectedIndex_During_Initialization_Should_Not_Matter()
{

Loading…
Cancel
Save