TransitionsTests.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using Avalonia.Controls;
  3. using Avalonia.UnitTests;
  4. using Xunit;
  5. namespace Avalonia.Animation.UnitTests
  6. {
  7. public class TransitionsTests
  8. {
  9. [Fact]
  10. public void Check_Transitions_Interpolation_Negative_Bounds_Clamp()
  11. {
  12. var clock = new MockGlobalClock();
  13. using (UnitTestApplication.Start(new TestServices(globalClock: clock)))
  14. {
  15. var border = new Border
  16. {
  17. Transitions =
  18. {
  19. new DoubleTransition
  20. {
  21. Duration = TimeSpan.FromSeconds(1),
  22. Property = Border.OpacityProperty,
  23. }
  24. }
  25. };
  26. border.Opacity = 0;
  27. clock.Pulse(TimeSpan.FromSeconds(0));
  28. clock.Pulse(TimeSpan.FromSeconds(-0.5));
  29. Assert.Equal(0, border.Opacity);
  30. }
  31. }
  32. [Fact]
  33. public void Check_Transitions_Interpolation_Positive_Bounds_Clamp()
  34. {
  35. var clock = new MockGlobalClock();
  36. using (UnitTestApplication.Start(new TestServices(globalClock: clock)))
  37. {
  38. var border = new Border
  39. {
  40. Transitions =
  41. {
  42. new DoubleTransition
  43. {
  44. Duration = TimeSpan.FromSeconds(1),
  45. Property = Border.OpacityProperty,
  46. }
  47. }
  48. };
  49. border.Opacity = 0;
  50. clock.Pulse(TimeSpan.FromSeconds(0));
  51. clock.Pulse(TimeSpan.FromMilliseconds(1001));
  52. Assert.Equal(0, border.Opacity);
  53. }
  54. }
  55. [Fact]
  56. public void TransitionInstance_With_Zero_Duration_Is_Completed_On_First_Tick()
  57. {
  58. var clock = new MockGlobalClock();
  59. using (UnitTestApplication.Start(new TestServices(globalClock: clock)))
  60. {
  61. int i = 0;
  62. var inst = new TransitionInstance(clock, TimeSpan.Zero).Subscribe(nextValue =>
  63. {
  64. switch (i++)
  65. {
  66. case 0: Assert.Equal(0, nextValue); break;
  67. case 1: Assert.Equal(1d, nextValue); break;
  68. }
  69. });
  70. clock.Pulse(TimeSpan.FromMilliseconds(10));
  71. }
  72. }
  73. }
  74. }