SelectorTests_Multiple.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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 System.Collections.Generic;
  5. using System.Linq;
  6. using Avalonia.Controls;
  7. using Avalonia.Controls.Templates;
  8. using Avalonia.VisualTree;
  9. using Xunit;
  10. namespace Avalonia.Styling.UnitTests
  11. {
  12. public class SelectorTests_Multiple
  13. {
  14. [Fact]
  15. public void Named_Template_Child_Of_Control_With_Two_Classes()
  16. {
  17. var template = new FuncControlTemplate((parent, scope) =>
  18. {
  19. return new Border
  20. {
  21. Name = "border",
  22. }.RegisterInNameScope(scope).WithNameScope(scope);
  23. });
  24. var control = new Button
  25. {
  26. Template = template,
  27. };
  28. control.ApplyTemplate();
  29. var selector = default(Selector)
  30. .OfType<Button>()
  31. .Class("foo")
  32. .Class("bar")
  33. .Template()
  34. .Name("border");
  35. var border = (Border)((IVisual)control).VisualChildren.Single();
  36. var values = new List<bool>();
  37. var match = selector.Match(border);
  38. Assert.Equal(SelectorMatchResult.Sometimes, match.Result);
  39. match.Activator.Subscribe(x => values.Add(x));
  40. Assert.Equal(new[] { false }, values);
  41. control.Classes.AddRange(new[] { "foo", "bar" });
  42. Assert.Equal(new[] { false, true }, values);
  43. control.Classes.Remove("foo");
  44. Assert.Equal(new[] { false, true, false }, values);
  45. }
  46. [Fact]
  47. public void Named_OfType_Template_Child_Of_Control_With_Two_Classes_Wrong_Type()
  48. {
  49. var template = new FuncControlTemplate((parent, scope) =>
  50. {
  51. return new Border
  52. {
  53. Name = "border",
  54. }.RegisterInNameScope(scope).WithNameScope(scope);
  55. });
  56. var control = new Button
  57. {
  58. Template = template,
  59. };
  60. control.ApplyTemplate();
  61. var selector = default(Selector)
  62. .OfType<Button>()
  63. .Class("foo")
  64. .Class("bar")
  65. .Template()
  66. .OfType<TextBlock>()
  67. .Name("baz");
  68. var border = (Border)((IVisual)control).VisualChildren.Single();
  69. var values = new List<bool>();
  70. var match = selector.Match(border);
  71. Assert.Equal(SelectorMatchResult.NeverThisType, match.Result);
  72. }
  73. [Fact]
  74. public void Named_Class_Template_Child_Of_Control()
  75. {
  76. var template = new FuncControlTemplate((parent, scope) =>
  77. {
  78. return new Border
  79. {
  80. Name = "border",
  81. }.RegisterInNameScope(scope).WithNameScope(scope);
  82. });
  83. var control = new Button
  84. {
  85. Template = template,
  86. };
  87. control.ApplyTemplate();
  88. var selector = default(Selector)
  89. .OfType<Button>()
  90. .Template()
  91. .Name("border")
  92. .Class("foo");
  93. var border = (Border)((IVisual)control).VisualChildren.Single();
  94. var values = new List<bool>();
  95. var match = selector.Match(border);
  96. Assert.Equal(SelectorMatchResult.Sometimes, match.Result);
  97. match.Activator.Subscribe(x => values.Add(x));
  98. Assert.Equal(new[] { false }, values);
  99. border.Classes.AddRange(new[] { "foo" });
  100. Assert.Equal(new[] { false, true }, values);
  101. border.Classes.Remove("foo");
  102. Assert.Equal(new[] { false, true, false }, values);
  103. }
  104. [Fact]
  105. public void TargetType_OfType()
  106. {
  107. var selector = default(Selector).OfType<Button>();
  108. Assert.Equal(typeof(Button), selector.TargetType);
  109. }
  110. [Fact]
  111. public void TargetType_OfType_Class()
  112. {
  113. var selector = default(Selector)
  114. .OfType<Button>()
  115. .Class("foo");
  116. Assert.Equal(typeof(Button), selector.TargetType);
  117. }
  118. [Fact]
  119. public void TargetType_Is_Class()
  120. {
  121. var selector = default(Selector)
  122. .Is<Button>()
  123. .Class("foo");
  124. Assert.Equal(typeof(Button), selector.TargetType);
  125. }
  126. [Fact]
  127. public void TargetType_Child()
  128. {
  129. var selector = default(Selector)
  130. .OfType<Button>()
  131. .Child()
  132. .OfType<TextBlock>();
  133. Assert.Equal(typeof(TextBlock), selector.TargetType);
  134. }
  135. [Fact]
  136. public void TargetType_Descendant()
  137. {
  138. var selector = default(Selector)
  139. .OfType<Button>()
  140. .Descendant()
  141. .OfType<TextBlock>();
  142. Assert.Equal(typeof(TextBlock), selector.TargetType);
  143. }
  144. [Fact]
  145. public void TargetType_Template()
  146. {
  147. var selector = default(Selector)
  148. .OfType<Button>()
  149. .Template()
  150. .OfType<TextBlock>();
  151. Assert.Equal(typeof(TextBlock), selector.TargetType);
  152. }
  153. }
  154. }