123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- using System;
- using Avalonia.Animation;
- using Avalonia.Controls;
- using Xunit;
- namespace Avalonia.Base.UnitTests.Animation
- {
- public class TransitionsTests
- {
- [Fact]
- public void Check_Transitions_Interpolation_Negative_Bounds_Clamp()
- {
- var clock = new TestClock();
- var border = new Border
- {
- Transitions = new Transitions
- {
- new DoubleTransition
- {
- Duration = TimeSpan.FromSeconds(1), Property = Visual.OpacityProperty,
- }
- }
- };
- border.Opacity = 0;
- clock.Pulse(TimeSpan.FromSeconds(0));
- clock.Pulse(TimeSpan.FromSeconds(-0.5));
- Assert.Equal(0, border.Opacity);
- }
- [Fact]
- public void Check_Transitions_Interpolation_Positive_Bounds_Clamp()
- {
- var clock = new TestClock();
- var border = new Border
- {
- Transitions = new Transitions
- {
- new DoubleTransition
- {
- Duration = TimeSpan.FromSeconds(1), Property = Visual.OpacityProperty,
- }
- }
- };
- border.Opacity = 0;
- clock.Pulse(TimeSpan.FromSeconds(0));
- clock.Pulse(TimeSpan.FromMilliseconds(1001));
- Assert.Equal(0, border.Opacity);
- }
- [Fact]
- public void TransitionInstance_With_Zero_Duration_Is_Completed_On_First_Tick()
- {
- var clock = new TestClock();
- var i = 0;
- new TransitionInstance(clock, TimeSpan.Zero, TimeSpan.Zero).Subscribe(nextValue =>
- {
- switch (i++)
- {
- case 0:
- Assert.Equal(0, nextValue);
- break;
- case 1:
- Assert.Equal(1d, nextValue);
- break;
- }
- });
- clock.Pulse(TimeSpan.FromMilliseconds(10));
- }
- [Fact]
- public void TransitionInstance_Properly_Calculates_Delay_And_Duration_Values()
- {
- var clock = new TestClock();
- var i = -1;
- var completed = false;
- new TransitionInstance(clock, TimeSpan.FromMilliseconds(30), TimeSpan.FromMilliseconds(70)).Subscribe(
- nextValue =>
- {
- switch (i++)
- {
- case 0:
- Assert.Equal(0, nextValue);
- break;
- case 1:
- Assert.Equal(0, nextValue);
- break;
- case 2:
- Assert.Equal(0, nextValue);
- break;
- case 3:
- Assert.Equal(0, nextValue);
- break;
- case 4:
- Assert.Equal(Math.Round(10d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 5:
- Assert.Equal(Math.Round(20d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 6:
- Assert.Equal(Math.Round(30d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 7:
- Assert.Equal(Math.Round(40d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 8:
- Assert.Equal(Math.Round(50d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 9:
- Assert.Equal(Math.Round(60d / 70d, 4), Math.Round(nextValue, 4));
- break;
- case 10:
- Assert.Equal(1d, nextValue);
- break;
- }
- }, () => completed = true);
- for (var z = 0; z <= 10; z++)
- {
- clock.Pulse(TimeSpan.FromMilliseconds(10));
- }
- Assert.True(completed);
- }
- [Fact]
- public void TransitionInstance_With_Delay_But_Zero_Duration_Is_Completed_After_Delay()
- {
- var clock = new TestClock();
- var i = -1;
- var completed = false;
- new TransitionInstance(clock, TimeSpan.FromMilliseconds(30), TimeSpan.Zero).Subscribe(
- nextValue =>
- {
- switch (i++)
- {
- case 0:
- Assert.Equal(0, nextValue);
- break;
- case 1:
- Assert.Equal(0, nextValue);
- break;
- case 2:
- Assert.Equal(0, nextValue);
- break;
- case 3: // one iteration sooner than the test above, because the start of the transition is also the end
- Assert.Equal(1, nextValue);
- break;
- }
- }, () => completed = true);
- for (var z = 0; z <= 4; z++)
- {
- clock.Pulse(TimeSpan.FromMilliseconds(10));
- }
- Assert.True(completed);
- }
- }
- }
|