SelectableMixinTests.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Avalonia.Controls.Mixins;
  2. using Avalonia.Controls.Primitives;
  3. using Avalonia.UnitTests;
  4. using Xunit;
  5. namespace Avalonia.Controls.UnitTests.Mixins
  6. {
  7. public class SelectableMixinTests : ScopedTestBase
  8. {
  9. [Fact]
  10. public void Selected_Class_Should_Not_Initially_Be_Added()
  11. {
  12. var target = new TestControl();
  13. Assert.Empty(target.Classes);
  14. }
  15. [Fact]
  16. public void Setting_IsSelected_Should_Add_Selected_Class()
  17. {
  18. var target = new TestControl();
  19. target.IsSelected = true;
  20. Assert.Equal(new[] { ":selected" }, target.Classes);
  21. }
  22. [Fact]
  23. public void Clearing_IsSelected_Should_Remove_Selected_Class()
  24. {
  25. var target = new TestControl();
  26. target.IsSelected = true;
  27. target.IsSelected = false;
  28. Assert.Empty(target.Classes);
  29. }
  30. [Fact]
  31. public void Setting_IsSelected_Should_Raise_IsSelectedChangedEvent()
  32. {
  33. var target = new TestControl();
  34. var raised = false;
  35. target.AddHandler(
  36. SelectingItemsControl.IsSelectedChangedEvent,
  37. (s, e) => raised = true);
  38. target.IsSelected = true;
  39. Assert.True(raised);
  40. }
  41. private class TestControl : Control, ISelectable
  42. {
  43. public static readonly StyledProperty<bool> IsSelectedProperty =
  44. AvaloniaProperty.Register<TestControl, bool>(nameof(IsSelected));
  45. static TestControl()
  46. {
  47. SelectableMixin.Attach<TestControl>(IsSelectedProperty);
  48. }
  49. public bool IsSelected
  50. {
  51. get { return GetValue(IsSelectedProperty); }
  52. set { SetValue(IsSelectedProperty, value); }
  53. }
  54. }
  55. }
  56. }