csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.5 KiB
174 lines
5.5 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
|