|
|
@@ -1,5 +1,7 @@
|
|
|
using System;
|
|
|
+using Avalonia.Animation.Animators;
|
|
|
using Avalonia.Controls;
|
|
|
+using Avalonia.Controls.Shapes;
|
|
|
using Avalonia.Data;
|
|
|
using Avalonia.Layout;
|
|
|
using Avalonia.Media;
|
|
|
@@ -100,6 +102,71 @@ namespace Avalonia.Animation.UnitTests
|
|
|
Times.Never);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData(null)] //null value
|
|
|
+ [InlineData("stringValue")] //string value
|
|
|
+ public void Invalid_Values_In_Animation_Should_Not_Crash_Animations(object invalidValue)
|
|
|
+ {
|
|
|
+ var keyframe1 = new KeyFrame()
|
|
|
+ {
|
|
|
+ Setters =
|
|
|
+ {
|
|
|
+ new Setter(Layoutable.WidthProperty, 1d),
|
|
|
+ },
|
|
|
+ KeyTime = TimeSpan.FromSeconds(0)
|
|
|
+ };
|
|
|
+
|
|
|
+ var keyframe2 = new KeyFrame()
|
|
|
+ {
|
|
|
+ Setters =
|
|
|
+ {
|
|
|
+ new Setter(Layoutable.WidthProperty, 2d),
|
|
|
+ },
|
|
|
+ KeyTime = TimeSpan.FromSeconds(2),
|
|
|
+ };
|
|
|
+
|
|
|
+ var keyframe3 = new KeyFrame()
|
|
|
+ {
|
|
|
+ Setters =
|
|
|
+ {
|
|
|
+ new Setter(Layoutable.WidthProperty, invalidValue),
|
|
|
+ },
|
|
|
+ KeyTime = TimeSpan.FromSeconds(3),
|
|
|
+ };
|
|
|
+
|
|
|
+ var animation = new Animation()
|
|
|
+ {
|
|
|
+ Duration = TimeSpan.FromSeconds(3),
|
|
|
+ Children =
|
|
|
+ {
|
|
|
+ keyframe1,
|
|
|
+ keyframe2,
|
|
|
+ keyframe3
|
|
|
+ },
|
|
|
+ IterationCount = new IterationCount(5),
|
|
|
+ PlaybackDirection = PlaybackDirection.Alternate,
|
|
|
+ };
|
|
|
+
|
|
|
+ var rect = new Rectangle()
|
|
|
+ {
|
|
|
+ Width = 11,
|
|
|
+ };
|
|
|
+
|
|
|
+ var originalValue = rect.Width;
|
|
|
+
|
|
|
+ var clock = new TestClock();
|
|
|
+ var animationRun = animation.RunAsync(rect, clock);
|
|
|
+
|
|
|
+ clock.Step(TimeSpan.Zero);
|
|
|
+ Assert.Equal(rect.Width, 1);
|
|
|
+ clock.Step(TimeSpan.FromSeconds(2));
|
|
|
+ Assert.Equal(rect.Width, 2);
|
|
|
+ clock.Step(TimeSpan.FromSeconds(3));
|
|
|
+ //here we have invalid value so value should be expected and set to initial original value
|
|
|
+ Assert.Equal(rect.Width, originalValue);
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Transition_Is_Not_Applied_When_StyleTrigger_Changes_With_LocalValue_Present()
|
|
|
{
|