SelectingItemsControlTests_AutoSelect.cs 3.3 KB

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