AvaloniaDictionaryTests.cs 5.4 KB

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