PerspexDictionaryTests.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // -----------------------------------------------------------------------
  2. // <copyright file="PerspexDictionaryTests.cs" company="Steven Kirk">
  3. // Copyright 2015 MIT Licence. See licence.md for more information.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. namespace Perspex.Base.UnitTests.Collections
  7. {
  8. using System.Collections.Generic;
  9. using System.Collections.Specialized;
  10. using Perspex.Collections;
  11. using Xunit;
  12. public class PerspexDictionaryTests
  13. {
  14. [Fact]
  15. public void Adding_Item_Should_Raise_CollectionChanged()
  16. {
  17. var target = new PerspexDictionary<string, string>();
  18. var tracker = new CollectionChangedTracker(target);
  19. target.Add("foo", "bar");
  20. Assert.NotNull(tracker.Args);
  21. Assert.Equal(NotifyCollectionChangedAction.Add, tracker.Args.Action);
  22. Assert.Equal(-1, tracker.Args.NewStartingIndex);
  23. Assert.Equal(1, tracker.Args.NewItems.Count);
  24. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.NewItems[0]);
  25. }
  26. [Fact]
  27. public void Adding_Item_Should_Raise_PropertyChanged()
  28. {
  29. var target = new PerspexDictionary<string, string>();
  30. var tracker = new PropertyChangedTracker(target);
  31. target.Add("foo", "bar");
  32. Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
  33. }
  34. [Fact]
  35. public void Assigning_Item_Should_Raise_CollectionChanged_Add()
  36. {
  37. var target = new PerspexDictionary<string, string>();
  38. var tracker = new CollectionChangedTracker(target);
  39. target["foo"] = "bar";
  40. Assert.NotNull(tracker.Args);
  41. Assert.Equal(NotifyCollectionChangedAction.Add, tracker.Args.Action);
  42. Assert.Equal(-1, tracker.Args.NewStartingIndex);
  43. Assert.Equal(1, tracker.Args.NewItems.Count);
  44. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.NewItems[0]);
  45. }
  46. [Fact]
  47. public void Assigning_Item_Should_Raise_CollectionChanged_Replace()
  48. {
  49. var target = new PerspexDictionary<string, string>();
  50. target["foo"] = "baz";
  51. var tracker = new CollectionChangedTracker(target);
  52. target["foo"] = "bar";
  53. Assert.NotNull(tracker.Args);
  54. Assert.Equal(NotifyCollectionChangedAction.Replace, tracker.Args.Action);
  55. Assert.Equal(-1, tracker.Args.NewStartingIndex);
  56. Assert.Equal(1, tracker.Args.NewItems.Count);
  57. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.NewItems[0]);
  58. }
  59. [Fact]
  60. public void Assigning_Item_Should_Raise_PropertyChanged_Add()
  61. {
  62. var target = new PerspexDictionary<string, string>();
  63. var tracker = new PropertyChangedTracker(target);
  64. target["foo"] = "bar";
  65. Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
  66. }
  67. [Fact]
  68. public void Assigning_Item_Should_Raise_PropertyChanged_Replace()
  69. {
  70. var target = new PerspexDictionary<string, string>();
  71. target["foo"] = "baz";
  72. var tracker = new PropertyChangedTracker(target);
  73. target["foo"] = "bar";
  74. Assert.Equal(new[] { "Item[foo]" }, tracker.Names);
  75. }
  76. [Fact]
  77. public void Removing_Item_Should_Raise_CollectionChanged()
  78. {
  79. var target = new PerspexDictionary<string, string>();
  80. target["foo"] = "bar";
  81. var tracker = new CollectionChangedTracker(target);
  82. target.Remove("foo");
  83. Assert.NotNull(tracker.Args);
  84. Assert.Equal(NotifyCollectionChangedAction.Remove, tracker.Args.Action);
  85. Assert.Equal(-1, tracker.Args.OldStartingIndex);
  86. Assert.Equal(1, tracker.Args.OldItems.Count);
  87. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.OldItems[0]);
  88. }
  89. [Fact]
  90. public void Removing_Item_Should_Raise_PropertyChanged()
  91. {
  92. var target = new PerspexDictionary<string, string>();
  93. target["foo"] = "bar";
  94. var tracker = new PropertyChangedTracker(target);
  95. target.Remove("foo");
  96. Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
  97. }
  98. [Fact]
  99. public void Clearing_Collection_Should_Raise_CollectionChanged()
  100. {
  101. var target = new PerspexDictionary<string, string>();
  102. target["foo"] = "bar";
  103. target["baz"] = "qux";
  104. var tracker = new CollectionChangedTracker(target);
  105. target.Clear();
  106. Assert.NotNull(tracker.Args);
  107. Assert.Equal(NotifyCollectionChangedAction.Remove, tracker.Args.Action);
  108. Assert.Equal(-1, tracker.Args.OldStartingIndex);
  109. Assert.Equal(2, tracker.Args.OldItems.Count);
  110. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.OldItems[0]);
  111. }
  112. [Fact]
  113. public void Clearing_Collection_Should_Raise_PropertyChanged()
  114. {
  115. var target = new PerspexDictionary<string, string>();
  116. target["foo"] = "bar";
  117. target["baz"] = "qux";
  118. var tracker = new PropertyChangedTracker(target);
  119. target.Clear();
  120. Assert.Equal(new[] { "Count", "Item[]" }, tracker.Names);
  121. }
  122. }
  123. }