PerspexDictionaryTests.cs 5.3 KB

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