ToggleButtonTests.cs 4.4 KB

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