SelectingItemsControlTests_AutoSelect.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Perspex.Collections;
  4. using Perspex.Controls.Presenters;
  5. using Perspex.Controls.Primitives;
  6. using Perspex.Controls.Templates;
  7. using Xunit;
  8. namespace Perspex.Controls.UnitTests.Primitives
  9. {
  10. public class SelectingItemsControlTests_AutoSelect
  11. {
  12. [Fact]
  13. public void First_Item_Should_Be_Selected()
  14. {
  15. var target = new TestSelector
  16. {
  17. Items = new[] { "foo", "bar" },
  18. Template = Template(),
  19. };
  20. target.ApplyTemplate();
  21. Assert.Equal(0, target.SelectedIndex);
  22. Assert.Equal("foo", target.SelectedItem);
  23. }
  24. [Fact]
  25. public void First_Item_Should_Be_Selected_When_Added()
  26. {
  27. var items = new PerspexList<string>();
  28. var target = new TestSelector
  29. {
  30. Items = items,
  31. Template = Template(),
  32. };
  33. target.ApplyTemplate();
  34. items.Add("foo");
  35. Assert.Equal(0, target.SelectedIndex);
  36. Assert.Equal("foo", target.SelectedItem);
  37. }
  38. [Fact]
  39. public void Item_Should_Be_Selected_When_Selection_Removed()
  40. {
  41. var items = new PerspexList<string>(new[] { "foo", "bar", "baz", "qux" });
  42. var target = new TestSelector
  43. {
  44. Items = items,
  45. Template = Template(),
  46. };
  47. target.ApplyTemplate();
  48. target.SelectedIndex = 2;
  49. items.RemoveAt(2);
  50. Assert.Equal(2, target.SelectedIndex);
  51. Assert.Equal("qux", target.SelectedItem);
  52. }
  53. [Fact]
  54. public void Selection_Should_Be_Cleared_When_No_Items_Left()
  55. {
  56. var items = new PerspexList<string>(new[] { "foo", "bar" });
  57. var target = new TestSelector
  58. {
  59. Items = items,
  60. Template = Template(),
  61. };
  62. target.ApplyTemplate();
  63. target.SelectedIndex = 1;
  64. items.RemoveAt(1);
  65. items.RemoveAt(0);
  66. Assert.Equal(-1, target.SelectedIndex);
  67. Assert.Null(target.SelectedItem);
  68. }
  69. private ControlTemplate Template()
  70. {
  71. return new ControlTemplate<SelectingItemsControl>(control =>
  72. new ItemsPresenter
  73. {
  74. Name = "itemsPresenter",
  75. [~ItemsPresenter.ItemsProperty] = control[~ItemsControl.ItemsProperty],
  76. [~ItemsPresenter.ItemsPanelProperty] = control[~ItemsControl.ItemsPanelProperty],
  77. });
  78. }
  79. private class TestSelector : SelectingItemsControl
  80. {
  81. static TestSelector()
  82. {
  83. SelectionModeProperty.OverrideDefaultValue<TestSelector>(SelectionMode.SingleAlways);
  84. }
  85. }
  86. private class Item : Control, ISelectable
  87. {
  88. public bool IsSelected { get; set; }
  89. }
  90. }
  91. }