SelectorTests_Multiple.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 Template_Child_Of_Control_With_Two_Classes()
  16. {
  17. var template = new FuncControlTemplate(parent =>
  18. {
  19. return new Border
  20. {
  21. Name = "border",
  22. };
  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 activator = selector.Match(border).ObservableResult;
  38. activator.Subscribe(x => values.Add(x));
  39. Assert.Equal(new[] { false }, values);
  40. control.Classes.AddRange(new[] { "foo", "bar" });
  41. Assert.Equal(new[] { false, true }, values);
  42. control.Classes.Remove("foo");
  43. Assert.Equal(new[] { false, true, false }, values);
  44. }
  45. [Fact]
  46. public void TargetType_OfType()
  47. {
  48. var selector = default(Selector).OfType<Button>();
  49. Assert.Equal(typeof(Button), selector.TargetType);
  50. }
  51. [Fact]
  52. public void TargetType_OfType_Class()
  53. {
  54. var selector = default(Selector)
  55. .OfType<Button>()
  56. .Class("foo");
  57. Assert.Equal(typeof(Button), selector.TargetType);
  58. }
  59. [Fact]
  60. public void TargetType_Is_Class()
  61. {
  62. var selector = default(Selector)
  63. .Is<Button>()
  64. .Class("foo");
  65. Assert.Equal(typeof(Button), selector.TargetType);
  66. }
  67. [Fact]
  68. public void TargetType_Child()
  69. {
  70. var selector = default(Selector)
  71. .OfType<Button>()
  72. .Child()
  73. .OfType<TextBlock>();
  74. Assert.Equal(typeof(TextBlock), selector.TargetType);
  75. }
  76. [Fact]
  77. public void TargetType_Descendant()
  78. {
  79. var selector = default(Selector)
  80. .OfType<Button>()
  81. .Descendant()
  82. .OfType<TextBlock>();
  83. Assert.Equal(typeof(TextBlock), selector.TargetType);
  84. }
  85. [Fact]
  86. public void TargetType_Template()
  87. {
  88. var selector = default(Selector)
  89. .OfType<Button>()
  90. .Template()
  91. .OfType<TextBlock>();
  92. Assert.Equal(typeof(TextBlock), selector.TargetType);
  93. }
  94. }
  95. }