1
0

InputElement_Enabled.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Avalonia.Controls;
  2. using Xunit;
  3. namespace Avalonia.Base.UnitTests.Input
  4. {
  5. public class InputElement_Enabled
  6. {
  7. [Fact]
  8. public void IsEffectivelyEnabled_Follows_IsEnabled()
  9. {
  10. var target = new Decorator();
  11. Assert.True(target.IsEnabled);
  12. Assert.True(target.IsEffectivelyEnabled);
  13. target.IsEnabled = false;
  14. Assert.False(target.IsEnabled);
  15. Assert.False(target.IsEffectivelyEnabled);
  16. }
  17. [Fact]
  18. public void IsEffectivelyEnabled_Follows_Ancestor_IsEnabled()
  19. {
  20. Decorator child;
  21. Decorator grandchild;
  22. var target = new Decorator
  23. {
  24. Child = child = new Decorator
  25. {
  26. Child = grandchild = new Decorator(),
  27. }
  28. };
  29. Assert.True(target.IsEnabled);
  30. Assert.True(target.IsEffectivelyEnabled);
  31. Assert.True(child.IsEnabled);
  32. Assert.True(child.IsEffectivelyEnabled);
  33. Assert.True(grandchild.IsEnabled);
  34. Assert.True(grandchild.IsEffectivelyEnabled);
  35. target.IsEnabled = false;
  36. Assert.False(target.IsEnabled);
  37. Assert.False(target.IsEffectivelyEnabled);
  38. Assert.True(child.IsEnabled);
  39. Assert.False(child.IsEffectivelyEnabled);
  40. Assert.True(grandchild.IsEnabled);
  41. Assert.False(grandchild.IsEffectivelyEnabled);
  42. }
  43. [Fact]
  44. public void Disabled_Pseudoclass_Follows_IsEffectivelyEnabled()
  45. {
  46. Decorator child;
  47. var target = new Decorator
  48. {
  49. Child = child = new Decorator()
  50. };
  51. Assert.DoesNotContain(":disabled", child.Classes);
  52. target.IsEnabled = false;
  53. Assert.Contains(":disabled", child.Classes);
  54. }
  55. [Fact]
  56. public void IsEffectivelyEnabled_Respects_IsEnabledCore()
  57. {
  58. Decorator child;
  59. var target = new TestControl
  60. {
  61. Child = child = new Decorator()
  62. };
  63. target.ShouldEnable = false;
  64. Assert.True(target.IsEnabled);
  65. Assert.False(target.IsEffectivelyEnabled);
  66. Assert.True(child.IsEnabled);
  67. Assert.False(child.IsEffectivelyEnabled);
  68. }
  69. private class TestControl : Decorator
  70. {
  71. private bool _shouldEnable;
  72. public bool ShouldEnable
  73. {
  74. get => _shouldEnable;
  75. set { _shouldEnable = value; UpdateIsEffectivelyEnabled(); }
  76. }
  77. protected override bool IsEnabledCore => IsEnabled && _shouldEnable;
  78. }
  79. }
  80. }