public void Raising_IsSelectedChanged_On_Someone_Elses_Item_Should_Not_Update_Selection() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedItem = items[1]; var notChild = new Item { IsSelected = true, }; target.RaiseEvent(new RoutedEventArgs { RoutedEvent = SelectingItemsControl.IsSelectedChangedEvent, Source = notChild, }); Assert.Equal(target.SelectedItem, items[1]); }
public void Resetting_Items_Collection_Should_Clear_Selection() { // Need to use ObservableCollection here as AvaloniaList signals a Clear as an // add + remove. var items = new ObservableCollection <Item> { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 1; Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); items.Clear(); Assert.Null(target.SelectedItem); Assert.Equal(-1, target.SelectedIndex); }
public void Clearing_IsSelected_And_Raising_IsSelectedChanged_On_Item_Should_Update_Selection() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.Presenter.ApplyTemplate(); target.SelectedItem = items[1]; Assert.False(items[0].IsSelected); Assert.True(items[1].IsSelected); items[1].IsSelected = false; items[1].RaiseEvent(new RoutedEventArgs(SelectingItemsControl.IsSelectedChangedEvent)); Assert.Equal(-1, target.SelectedIndex); Assert.Null(target.SelectedItem); }
public void Removing_Selected_Item_Should_Clear_Selection() { var items = new AvaloniaList <Item> { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 1; Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); items.RemoveAt(1); Assert.Null(target.SelectedItem); Assert.Equal(-1, target.SelectedIndex); }
public void Moving_Selected_Item_Should_Update_Selection() { var items = new AvaloniaList <Item> { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 0; Assert.Equal(items[0], target.SelectedItem); Assert.Equal(0, target.SelectedIndex); items.Move(0, 1); Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); }
public void Setting_SelectedItem_To_Not_Present_Item_Should_Clear_Selection() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedItem = items[1]; Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); target.SelectedItem = new Item(); Assert.Null(target.SelectedItem); Assert.Equal(-1, target.SelectedIndex); }
public void SelectedIndex_Item_Is_Updated_As_Items_Removed_When_Last_Item_Is_Selected() { var items = new ObservableCollection <string> { "Foo", "Bar", "FooBar" }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedItem = items[2]; Assert.Equal(items[2], target.SelectedItem); Assert.Equal(2, target.SelectedIndex); items.RemoveAt(0); Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); }
public void Nested_ListBox_Does_Not_Change_Parent_SelectedIndex() { SelectingItemsControl nested; var root = new SelectingItemsControl { Template = Template(), Items = new IControl[] { new Border(), nested = new ListBox { Template = Template(), Items = new[] { "foo", "bar" }, SelectedIndex = 1, } }, SelectedIndex = 0, }; root.ApplyTemplate(); root.Presenter.ApplyTemplate(); nested.ApplyTemplate(); nested.Presenter.ApplyTemplate(); Assert.Equal(0, root.SelectedIndex); Assert.Equal(1, nested.SelectedIndex); nested.SelectedIndex = 0; Assert.Equal(0, root.SelectedIndex); }
public void Clearing_SelectedIndex_Should_Raise_SelectionChanged_Event() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), SelectedIndex = 1, }; var called = false; target.SelectionChanged += (s, e) => { Assert.Same(items[1], e.RemovedItems.Cast <object>().Single()); Assert.Empty(e.AddedItems); called = true; }; target.ApplyTemplate(); target.Presenter.ApplyTemplate(); target.SelectedIndex = -1; Assert.True(called); }
public void Setting_Items_To_Null_Should_Clear_Selection() { var items = new AvaloniaList <Item> { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 1; Assert.Equal(items[1], target.SelectedItem); Assert.Equal(1, target.SelectedIndex); target.Items = null; Assert.Equal(null, target.SelectedItem); Assert.Equal(-1, target.SelectedIndex); }
public void Setting_SelectedItem_To_Non_Existent_Item_Should_Clear_Selection() { var target = new SelectingItemsControl { Template = Template(), }; target.ApplyTemplate(); target.SelectedItem = new Item(); Assert.Equal(-1, target.SelectedIndex); Assert.Null(target.SelectedItem); }
public void First_Item_Should_Be_Selected() { var target = new SelectingItemsControl { AutoSelect = true, Items = new[] { "foo", "bar" }, Template = Template(), }; target.ApplyTemplate(); Assert.Equal(0, target.SelectedIndex); Assert.Equal("foo", target.SelectedItem); }
public void First_Item_Should_Be_Selected_When_Added() { var items = new PerspexList <string>(); var target = new SelectingItemsControl { AutoSelect = true, Items = items, Template = Template(), }; target.ApplyTemplate(); items.Add("foo"); Assert.Equal(0, target.SelectedIndex); Assert.Equal("foo", target.SelectedItem); }
public void Item_Should_Be_Selected_When_Selection_Removed() { var items = new PerspexList <string>(new[] { "foo", "bar", "baz", "qux" }); var target = new SelectingItemsControl { AutoSelect = true, Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 2; items.RemoveAt(2); Assert.Equal(2, target.SelectedIndex); Assert.Equal("qux", target.SelectedItem); }
public void Item_IsSelected_Should_Initially_Be_False() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); Assert.False(items[0].IsSelected); Assert.False(items[1].IsSelected); }
public void Setting_SelectedIndex_Out_Of_Bounds_Should_Clear_Selection() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 2; Assert.Equal(-1, target.SelectedIndex); }
public void Setting_SelectedIndex_Should_Set_SelectedItem() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 1; Assert.Equal(items[1], target.SelectedItem); }
public void Selection_Should_Be_Cleared_When_No_Items_Left() { var items = new PerspexList <string>(new[] { "foo", "bar" }); var target = new SelectingItemsControl { AutoSelect = true, Items = items, Template = Template(), }; target.ApplyTemplate(); target.SelectedIndex = 1; items.RemoveAt(1); items.RemoveAt(0); Assert.Equal(-1, target.SelectedIndex); Assert.Null(target.SelectedItem); }
public void Setting_SelectedItem_Before_ApplyTemplate_Should_Set_Item_IsSelected_True() { var items = new[] { new Item(), new Item(), }; var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.SelectedItem = items[1]; target.ApplyTemplate(); Assert.False(items[0].IsSelected); Assert.True(items[1].IsSelected); }
public void Focusing_Item_With_Tab_Should_Not_Select_It() { var target = new SelectingItemsControl { Template = Template(), Items = new[] { "foo", "bar" }, }; target.ApplyTemplate(); var e = new GotFocusEventArgs { RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Tab, }; target.Presenter.Panel.Children[1].RaiseEvent(e); Assert.Equal(-1, target.SelectedIndex); }
public void Adding_Selected_Item_Should_Update_Selection() { var items = new PerspexList <Item>(new[] { new Item(), new Item(), }); var target = new SelectingItemsControl { Items = items, Template = Template(), }; target.ApplyTemplate(); items.Add(new Item { IsSelected = true }); Assert.Equal(2, target.SelectedIndex); Assert.Equal(items[2], target.SelectedItem); }
public void Focusing_Item_With_Pointer_Should_Select_It() { var target = new SelectingItemsControl { Template = Template(), Items = new[] { "foo", "bar" }, }; target.ApplyTemplate(); var e = new GotFocusEventArgs { RoutedEvent = InputElement.GotFocusEvent, NavigationMethod = NavigationMethod.Pointer, }; target.Presenter.Panel.Children[1].RaiseEvent(e); Assert.Equal(1, target.SelectedIndex); // GotFocus should be raised on parent control. Assert.False(e.Handled); }
public void Removing_Selected_Item_Should_Clear_Selection_With_BeginInit() { var items = new AvaloniaList <Item> { new Item(), new Item(), }; var target = new SelectingItemsControl(); target.BeginInit(); target.Items = items; target.Template = Template(); target.EndInit(); target.ApplyTemplate(); target.Presenter.ApplyTemplate(); target.SelectedIndex = 0; Assert.Equal(items[0], target.SelectedItem); Assert.Equal(0, target.SelectedIndex); SelectionChangedEventArgs receivedArgs = null; target.SelectionChanged += (_, args) => receivedArgs = args; var removed = items[0]; items.RemoveAt(0); Assert.Null(target.SelectedItem); Assert.Equal(-1, target.SelectedIndex); Assert.NotNull(receivedArgs); Assert.Empty(receivedArgs.AddedItems); Assert.Equal(new[] { removed }, receivedArgs.RemovedItems); Assert.False(items.Single().IsSelected); }