SelectorTests_Class.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright (c) The Perspex 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.Linq;
  4. using System.Reactive.Linq;
  5. using System.Threading.Tasks;
  6. using Moq;
  7. using Perspex.Controls;
  8. using Perspex.Styling;
  9. using Xunit;
  10. namespace Perspex.Styling.UnitTests
  11. {
  12. public class SelectorTests_Class
  13. {
  14. [Fact]
  15. public void Class_Selector_Should_Have_Correct_String_Representation()
  16. {
  17. var target = new Selector().Class("foo");
  18. Assert.Equal(".foo", target.ToString());
  19. }
  20. [Fact]
  21. public void PesudoClass_Selector_Should_Have_Correct_String_Representation()
  22. {
  23. var target = new Selector().Class(":foo");
  24. Assert.Equal(":foo", target.ToString());
  25. }
  26. [Fact]
  27. public async Task Class_Matches_Control_With_Class()
  28. {
  29. var control = new Control1
  30. {
  31. Classes = new Classes { "foo" },
  32. };
  33. var target = new Selector().Class("foo");
  34. var activator = target.Match(control).ObservableResult;
  35. Assert.True(await activator.Take(1));
  36. }
  37. [Fact]
  38. public async Task Class_Doesnt_Match_Control_Without_Class()
  39. {
  40. var control = new Control1
  41. {
  42. Classes = new Classes { "bar" },
  43. };
  44. var target = new Selector().Class("foo");
  45. var activator = target.Match(control).ObservableResult;
  46. Assert.False(await activator.Take(1));
  47. }
  48. [Fact]
  49. public async Task Class_Matches_Control_With_TemplatedParent()
  50. {
  51. var control = new Control1
  52. {
  53. Classes = new Classes { "foo" },
  54. TemplatedParent = new Mock<ITemplatedControl>().Object,
  55. };
  56. var target = new Selector().Class("foo");
  57. var activator = target.Match(control).ObservableResult;
  58. Assert.True(await activator.Take(1));
  59. }
  60. [Fact]
  61. public async Task Class_Tracks_Additions()
  62. {
  63. var control = new Control1();
  64. var target = new Selector().Class("foo");
  65. var activator = target.Match(control).ObservableResult;
  66. Assert.False(await activator.Take(1));
  67. control.Classes.Add("foo");
  68. Assert.True(await activator.Take(1));
  69. }
  70. [Fact]
  71. public async Task Class_Tracks_Removals()
  72. {
  73. var control = new Control1
  74. {
  75. Classes = new Classes { "foo" },
  76. };
  77. var target = new Selector().Class("foo");
  78. var activator = target.Match(control).ObservableResult;
  79. Assert.True(await activator.Take(1));
  80. control.Classes.Remove("foo");
  81. Assert.False(await activator.Take(1));
  82. }
  83. [Fact]
  84. public async Task Multiple_Classes()
  85. {
  86. var control = new Control1();
  87. var target = new Selector().Class("foo").Class("bar");
  88. var activator = target.Match(control).ObservableResult;
  89. Assert.False(await activator.Take(1));
  90. control.Classes.Add("foo");
  91. Assert.False(await activator.Take(1));
  92. control.Classes.Add("bar");
  93. Assert.True(await activator.Take(1));
  94. control.Classes.Remove("bar");
  95. Assert.False(await activator.Take(1));
  96. }
  97. public class Control1 : TestControlBase
  98. {
  99. }
  100. }
  101. }