ResourceDictionaryTests.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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;
  4. using Avalonia.Controls;
  5. using Moq;
  6. using Xunit;
  7. namespace Avalonia.Styling.UnitTests
  8. {
  9. public class ResourceDictionaryTests
  10. {
  11. [Fact]
  12. public void TryGetResource_Should_Find_Resource()
  13. {
  14. var target = new ResourceDictionary
  15. {
  16. { "foo", "bar" },
  17. };
  18. Assert.True(target.TryGetResource("foo", out var result));
  19. Assert.Equal("bar", result);
  20. }
  21. [Fact]
  22. public void TryGetResource_Should_Find_Resource_From_Merged_Dictionary()
  23. {
  24. var target = new ResourceDictionary
  25. {
  26. MergedDictionaries =
  27. {
  28. new ResourceDictionary
  29. {
  30. { "foo", "bar" },
  31. }
  32. }
  33. };
  34. Assert.True(target.TryGetResource("foo", out var result));
  35. Assert.Equal("bar", result);
  36. }
  37. [Fact]
  38. public void TryGetResource_Should_Find_Resource_From_Itself_Before_Merged_Dictionary()
  39. {
  40. var target = new ResourceDictionary
  41. {
  42. { "foo", "bar" },
  43. };
  44. target.MergedDictionaries.Add(new ResourceDictionary
  45. {
  46. { "foo", "baz" },
  47. });
  48. Assert.True(target.TryGetResource("foo", out var result));
  49. Assert.Equal("bar", result);
  50. }
  51. [Fact]
  52. public void TryGetResource_Should_Find_Resource_From_Later_Merged_Dictionary()
  53. {
  54. var target = new ResourceDictionary
  55. {
  56. MergedDictionaries =
  57. {
  58. new ResourceDictionary
  59. {
  60. { "foo", "bar" },
  61. },
  62. new ResourceDictionary
  63. {
  64. { "foo", "baz" },
  65. }
  66. }
  67. };
  68. Assert.True(target.TryGetResource("foo", out var result));
  69. Assert.Equal("baz", result);
  70. }
  71. [Fact]
  72. public void ResourcesChanged_Should_Be_Raised_On_Resource_Add()
  73. {
  74. var target = new ResourceDictionary();
  75. var raised = false;
  76. target.ResourcesChanged += (_, __) => raised = true;
  77. target.Add("foo", "bar");
  78. Assert.True(raised);
  79. }
  80. [Fact]
  81. public void ResourcesChanged_Should_Be_Raised_On_MergedDictionary_Add()
  82. {
  83. var target = new ResourceDictionary();
  84. var raised = false;
  85. target.ResourcesChanged += (_, __) => raised = true;
  86. target.MergedDictionaries.Add(new ResourceDictionary
  87. {
  88. { "foo", "bar" },
  89. });
  90. Assert.True(raised);
  91. }
  92. [Fact]
  93. public void ResourcesChanged_Should_Not_Be_Raised_On_Empty_MergedDictionary_Add()
  94. {
  95. var target = new ResourceDictionary();
  96. var raised = false;
  97. target.ResourcesChanged += (_, __) => raised = true;
  98. target.MergedDictionaries.Add(new ResourceDictionary());
  99. Assert.False(raised);
  100. }
  101. [Fact]
  102. public void ResourcesChanged_Should_Be_Raised_On_MergedDictionary_Remove()
  103. {
  104. var target = new ResourceDictionary
  105. {
  106. MergedDictionaries =
  107. {
  108. new ResourceDictionary { { "foo", "bar" } },
  109. }
  110. };
  111. var raised = false;
  112. target.ResourcesChanged += (_, __) => raised = true;
  113. target.MergedDictionaries.RemoveAt(0);
  114. Assert.True(raised);
  115. }
  116. [Fact]
  117. public void ResourcesChanged_Should_Be_Raised_On_MergedDictionary_Resource_Add()
  118. {
  119. var target = new ResourceDictionary
  120. {
  121. MergedDictionaries =
  122. {
  123. new ResourceDictionary(),
  124. }
  125. };
  126. var raised = false;
  127. target.ResourcesChanged += (_, __) => raised = true;
  128. ((IResourceDictionary)target.MergedDictionaries[0]).Add("foo", "bar");
  129. Assert.True(raised);
  130. }
  131. [Fact]
  132. public void MergedDictionary_ParentResourcesChanged_Should_Be_Called_On_Resource_Add()
  133. {
  134. var target = new ResourceDictionary();
  135. var merged = new Mock<ISetResourceParent>();
  136. target.MergedDictionaries.Add(merged.Object);
  137. merged.ResetCalls();
  138. target.Add("foo", "bar");
  139. merged.Verify(
  140. x => x.ParentResourcesChanged(It.IsAny<ResourcesChangedEventArgs>()),
  141. Times.Once);
  142. }
  143. [Fact]
  144. public void MergedDictionary_ParentResourcesChanged_Should_Be_Called_On_NotifyResourceChanged()
  145. {
  146. var target = new ResourceDictionary();
  147. var merged = new Mock<ISetResourceParent>();
  148. target.MergedDictionaries.Add(merged.Object);
  149. merged.ResetCalls();
  150. ((ISetResourceParent)target).ParentResourcesChanged(new ResourcesChangedEventArgs());
  151. merged.Verify(
  152. x => x.ParentResourcesChanged(It.IsAny<ResourcesChangedEventArgs>()),
  153. Times.Once);
  154. }
  155. }
  156. }