AvaloniaDictionaryTests.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using Avalonia.Collections;
  5. using Avalonia.Data.Core;
  6. using Xunit;
  7. namespace Avalonia.Base.UnitTests.Collections
  8. {
  9. public class AvaloniaDictionaryTests
  10. {
  11. [Fact]
  12. public void Adding_Item_Should_Raise_CollectionChanged()
  13. {
  14. var target = new AvaloniaDictionary<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 AvaloniaDictionary<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 AvaloniaDictionary<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 AvaloniaDictionary<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 AvaloniaDictionary<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 AvaloniaDictionary<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 AvaloniaDictionary<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 Remove_Method_Should_Remove_Item_From_Collection()
  88. {
  89. var target = new AvaloniaDictionary<string, string>() { { "foo", "bar" } };
  90. Assert.Equal(target.Count, 1);
  91. target.Remove("foo");
  92. Assert.Equal(target.Count, 0);
  93. }
  94. [Fact]
  95. public void Removing_Item_Should_Raise_PropertyChanged()
  96. {
  97. var target = new AvaloniaDictionary<string, string>();
  98. target["foo"] = "bar";
  99. var tracker = new PropertyChangedTracker(target);
  100. target.Remove("foo");
  101. Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
  102. }
  103. [Fact]
  104. public void Clearing_Collection_Should_Raise_CollectionChanged()
  105. {
  106. var target = new AvaloniaDictionary<string, string>();
  107. target["foo"] = "bar";
  108. target["baz"] = "qux";
  109. var tracker = new CollectionChangedTracker(target);
  110. target.Clear();
  111. Assert.NotNull(tracker.Args);
  112. Assert.Equal(NotifyCollectionChangedAction.Remove, tracker.Args.Action);
  113. Assert.Equal(-1, tracker.Args.OldStartingIndex);
  114. Assert.Equal(2, tracker.Args.OldItems.Count);
  115. Assert.Equal(new KeyValuePair<string, string>("foo", "bar"), tracker.Args.OldItems[0]);
  116. }
  117. [Fact]
  118. public void Clearing_Collection_Should_Raise_PropertyChanged()
  119. {
  120. var target = new AvaloniaDictionary<string, string>();
  121. target["foo"] = "bar";
  122. target["baz"] = "qux";
  123. var tracker = new PropertyChangedTracker(target);
  124. target.Clear();
  125. Assert.Equal(new[] { "Count", CommonPropertyNames.IndexerName }, tracker.Names);
  126. }
  127. }
  128. }