ButtonTests.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Windows.Input;
  3. using Avalonia.Markup.Xaml.Data;
  4. using Xunit;
  5. namespace Avalonia.Controls.UnitTests
  6. {
  7. public class ButtonTests
  8. {
  9. [Fact]
  10. public void Button_Is_Disabled_When_Command_Is_Disabled()
  11. {
  12. var command = new TestCommand(false);
  13. var target = new Button
  14. {
  15. Command = command,
  16. };
  17. Assert.False(target.IsEnabled);
  18. command.IsEnabled = true;
  19. Assert.True(target.IsEnabled);
  20. command.IsEnabled = false;
  21. Assert.False(target.IsEnabled);
  22. }
  23. [Fact]
  24. public void Button_Is_Disabled_When_Bound_Command_Doesnt_Exist()
  25. {
  26. var target = new Button
  27. {
  28. [!Button.CommandProperty] = new Binding("Command"),
  29. };
  30. Assert.False(target.IsEnabled);
  31. }
  32. [Fact]
  33. public void Button_Is_Disabled_When_Bound_Command_Is_Removed()
  34. {
  35. var viewModel = new
  36. {
  37. Command = new TestCommand(true),
  38. };
  39. var target = new Button
  40. {
  41. DataContext = viewModel,
  42. [!Button.CommandProperty] = new Binding("Command"),
  43. };
  44. Assert.True(target.IsEnabled);
  45. target.DataContext = null;
  46. Assert.False(target.IsEnabled);
  47. }
  48. [Fact]
  49. public void Button_Is_Enabled_When_Bound_Command_Is_Added()
  50. {
  51. var viewModel = new
  52. {
  53. Command = new TestCommand(true),
  54. };
  55. var target = new Button
  56. {
  57. DataContext = new object(),
  58. [!Button.CommandProperty] = new Binding("Command"),
  59. };
  60. Assert.False(target.IsEnabled);
  61. target.DataContext = viewModel;
  62. Assert.True(target.IsEnabled);
  63. }
  64. [Fact]
  65. public void Button_Is_Disabled_When_Disabled_Bound_Command_Is_Added()
  66. {
  67. var viewModel = new
  68. {
  69. Command = new TestCommand(false),
  70. };
  71. var target = new Button
  72. {
  73. DataContext = new object(),
  74. [!Button.CommandProperty] = new Binding("Command"),
  75. };
  76. Assert.False(target.IsEnabled);
  77. target.DataContext = viewModel;
  78. Assert.False(target.IsEnabled);
  79. }
  80. private class TestCommand : ICommand
  81. {
  82. private bool _enabled;
  83. public TestCommand(bool enabled)
  84. {
  85. _enabled = enabled;
  86. }
  87. public bool IsEnabled
  88. {
  89. get { return _enabled; }
  90. set
  91. {
  92. if (_enabled != value)
  93. {
  94. _enabled = value;
  95. CanExecuteChanged?.Invoke(this, EventArgs.Empty);
  96. }
  97. }
  98. }
  99. public event EventHandler CanExecuteChanged;
  100. public bool CanExecute(object parameter) => _enabled;
  101. public void Execute(object parameter)
  102. {
  103. }
  104. }
  105. }
  106. }