ToggleButtonTests.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using Avalonia.Data;
  2. using Avalonia.UnitTests;
  3. using Xunit;
  4. namespace Avalonia.Controls.Primitives.UnitTests
  5. {
  6. public class ToggleButtonTests
  7. {
  8. private const string uncheckedClass = ":unchecked";
  9. private const string checkedClass = ":checked";
  10. private const string indeterminateClass = ":indeterminate";
  11. [Theory]
  12. [InlineData(false, uncheckedClass, false)]
  13. [InlineData(false, uncheckedClass, true)]
  14. [InlineData(true, checkedClass, false)]
  15. [InlineData(true, checkedClass, true)]
  16. [InlineData(null, indeterminateClass, false)]
  17. [InlineData(null, indeterminateClass, true)]
  18. public void ToggleButton_Has_Correct_Class_According_To_Is_Checked(bool? isChecked, string expectedClass, bool isThreeState)
  19. {
  20. var toggleButton = new ToggleButton();
  21. toggleButton.IsThreeState = isThreeState;
  22. toggleButton.IsChecked = isChecked;
  23. Assert.Contains(expectedClass, toggleButton.Classes);
  24. }
  25. [Fact]
  26. public void ToggleButton_Is_Checked_Binds_To_Bool()
  27. {
  28. var toggleButton = new ToggleButton();
  29. var source = new Class1();
  30. toggleButton.DataContext = source;
  31. toggleButton.Bind(ToggleButton.IsCheckedProperty, new Binding("Foo"));
  32. source.Foo = true;
  33. Assert.True(toggleButton.IsChecked);
  34. source.Foo = false;
  35. Assert.False(toggleButton.IsChecked);
  36. }
  37. [Fact]
  38. public void ToggleButton_ThreeState_Checked_Binds_To_Nullable_Bool()
  39. {
  40. var threeStateButton = new ToggleButton();
  41. var source = new Class1();
  42. threeStateButton.DataContext = source;
  43. threeStateButton.Bind(ToggleButton.IsCheckedProperty, new Binding(nameof(Class1.NullableFoo)));
  44. source.NullableFoo = true;
  45. Assert.True(threeStateButton.IsChecked);
  46. source.NullableFoo = false;
  47. Assert.False(threeStateButton.IsChecked);
  48. source.NullableFoo = null;
  49. Assert.Null(threeStateButton.IsChecked);
  50. }
  51. [Fact]
  52. public void ToggleButton_Events_Are_Raised_On_Is_Checked_Changes()
  53. {
  54. var threeStateButton = new ToggleButton();
  55. bool checkedRaised = false;
  56. threeStateButton.Checked += (_, __) => checkedRaised = true;
  57. threeStateButton.IsChecked = true;
  58. Assert.True(checkedRaised);
  59. bool uncheckedRaised = false;
  60. threeStateButton.Unchecked += (_, __) => uncheckedRaised = true;
  61. threeStateButton.IsChecked = false;
  62. Assert.True(uncheckedRaised);
  63. bool indeterminateRaised = false;
  64. threeStateButton.Indeterminate += (_, __) => indeterminateRaised = true;
  65. threeStateButton.IsChecked = null;
  66. Assert.True(indeterminateRaised);
  67. }
  68. [Fact]
  69. public void ToggleButton_Events_Are_Raised_When_Toggling()
  70. {
  71. var threeStateButton = new TestToggleButton { IsThreeState = true };
  72. bool checkedRaised = false;
  73. threeStateButton.Checked += (_, __) => checkedRaised = true;
  74. threeStateButton.Toggle();
  75. Assert.True(checkedRaised);
  76. bool indeterminateRaised = false;
  77. threeStateButton.Indeterminate += (_, __) => indeterminateRaised = true;
  78. threeStateButton.Toggle();
  79. Assert.True(indeterminateRaised);
  80. bool uncheckedRaised = false;
  81. threeStateButton.Unchecked += (_, __) => uncheckedRaised = true;
  82. threeStateButton.Toggle();
  83. Assert.True(uncheckedRaised);
  84. }
  85. private class Class1 : NotifyingBase
  86. {
  87. private bool _foo;
  88. private bool? nullableFoo;
  89. public bool Foo
  90. {
  91. get { return _foo; }
  92. set { _foo = value; RaisePropertyChanged(); }
  93. }
  94. public bool? NullableFoo
  95. {
  96. get { return nullableFoo; }
  97. set { nullableFoo = value; RaisePropertyChanged(); }
  98. }
  99. }
  100. private class TestToggleButton : ToggleButton
  101. {
  102. public new void Toggle() => base.Toggle();
  103. }
  104. }
  105. }