|
|
@@ -1,16 +1,13 @@
|
|
|
using System;
|
|
|
-using System.Linq;
|
|
|
-using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using Avalonia.Animation;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Styling;
|
|
|
-using Avalonia.UnitTests;
|
|
|
-using Avalonia.Data;
|
|
|
using Xunit;
|
|
|
using Avalonia.Animation.Easings;
|
|
|
using System.Threading;
|
|
|
using System.Reactive.Linq;
|
|
|
+using Avalonia.Layout;
|
|
|
|
|
|
namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
@@ -23,47 +20,27 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- KeyTime = TimeSpan.FromSeconds(0.5)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, KeyTime = TimeSpan.FromSeconds(0.5)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 0d),
|
|
|
- },
|
|
|
- KeyTime = TimeSpan.FromSeconds(0)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 0d), }, KeyTime = TimeSpan.FromSeconds(0)
|
|
|
};
|
|
|
|
|
|
- var animation = new Avalonia.Animation.Animation()
|
|
|
- {
|
|
|
- Duration = TimeSpan.FromSeconds(1),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
- };
|
|
|
+ var animation = new Animation() { Duration = TimeSpan.FromSeconds(1), Children = { keyframe2, keyframe1 } };
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 100d
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 100d };
|
|
|
|
|
|
var clock = new TestClock();
|
|
|
- var animationRun = animation.RunAsync(border, clock);
|
|
|
|
|
|
- clock.Step(TimeSpan.Zero);
|
|
|
+ animation.RunAsync(border, clock);
|
|
|
+
|
|
|
+ clock.Step(TimeSpan.Zero);
|
|
|
Assert.Equal(border.Width, 0d);
|
|
|
|
|
|
- clock.Step(TimeSpan.FromSeconds(1));
|
|
|
+ clock.Step(TimeSpan.FromSeconds(1));
|
|
|
Assert.Equal(border.Width, 100d);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -72,40 +49,24 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 200d),
|
|
|
- },
|
|
|
- Cue = new Cue(1d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- Cue = new Cue(0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
|
|
|
- var animation = new Avalonia.Animation.Animation()
|
|
|
+ var animation = new Animation()
|
|
|
{
|
|
|
Duration = TimeSpan.FromSeconds(3),
|
|
|
Delay = TimeSpan.FromSeconds(3),
|
|
|
DelayBetweenIterations = TimeSpan.FromSeconds(3),
|
|
|
IterationCount = new IterationCount(2),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 100d
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 100d };
|
|
|
|
|
|
var clock = new TestClock();
|
|
|
var animationRun = animation.RunAsync(border, clock);
|
|
|
@@ -133,43 +94,28 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 0d),
|
|
|
- },
|
|
|
- Cue = new Cue(0.0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 0d), }, Cue = new Cue(0.0d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 300d),
|
|
|
- },
|
|
|
- Cue = new Cue(1.0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 300d), }, Cue = new Cue(1.0d)
|
|
|
};
|
|
|
|
|
|
- var animation = new Avalonia.Animation.Animation()
|
|
|
+ var animation = new Animation()
|
|
|
{
|
|
|
Duration = TimeSpan.FromSeconds(0.05d),
|
|
|
Delay = TimeSpan.FromSeconds(0.05d),
|
|
|
Easing = new SineEaseInOut(),
|
|
|
FillMode = FillMode.Both,
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe1,
|
|
|
- keyframe2
|
|
|
- }
|
|
|
+ Children = { keyframe1, keyframe2 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 100d,
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 100d, };
|
|
|
|
|
|
var clock = new TestClock();
|
|
|
- var animationRun = animation.RunAsync(border, clock);
|
|
|
+
|
|
|
+ animation.RunAsync(border, clock);
|
|
|
|
|
|
clock.Step(TimeSpan.FromSeconds(0d));
|
|
|
Assert.Equal(border.Width, 0d);
|
|
|
@@ -186,20 +132,12 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 200d),
|
|
|
- },
|
|
|
- Cue = new Cue(1d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- Cue = new Cue(0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
|
|
|
var animation = new Animation()
|
|
|
@@ -208,23 +146,15 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
Delay = TimeSpan.FromSeconds(0),
|
|
|
DelayBetweenIterations = TimeSpan.FromSeconds(0),
|
|
|
IterationCount = new IterationCount(1),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 50d
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 50d };
|
|
|
var propertyChangedCount = 0;
|
|
|
var animationCompletedCount = 0;
|
|
|
- border.PropertyChanged += (sender, e) =>
|
|
|
+ border.PropertyChanged += (_, e) =>
|
|
|
{
|
|
|
- if (e.Property == Control.WidthProperty)
|
|
|
+ if (e.Property == Layoutable.WidthProperty)
|
|
|
{
|
|
|
propertyChangedCount++;
|
|
|
}
|
|
|
@@ -257,20 +187,12 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 200d),
|
|
|
- },
|
|
|
- Cue = new Cue(1d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- Cue = new Cue(0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
|
|
|
var animation = new Animation()
|
|
|
@@ -279,22 +201,14 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
Delay = TimeSpan.FromSeconds(0),
|
|
|
DelayBetweenIterations = TimeSpan.FromSeconds(0),
|
|
|
IterationCount = new IterationCount(1),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 100d
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 100d };
|
|
|
var propertyChangedCount = 0;
|
|
|
- border.PropertyChanged += (sender, e) =>
|
|
|
+ border.PropertyChanged += (_, e) =>
|
|
|
{
|
|
|
- if (e.Property == Control.WidthProperty)
|
|
|
+ if (e.Property == Layoutable.WidthProperty)
|
|
|
{
|
|
|
propertyChangedCount++;
|
|
|
}
|
|
|
@@ -315,20 +229,12 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 200d),
|
|
|
- },
|
|
|
- Cue = new Cue(1d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- Cue = new Cue(0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
|
|
|
var animation = new Animation()
|
|
|
@@ -337,22 +243,14 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
Delay = TimeSpan.FromSeconds(0),
|
|
|
DelayBetweenIterations = TimeSpan.FromSeconds(0),
|
|
|
IterationCount = new IterationCount(1),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
- {
|
|
|
- Height = 100d,
|
|
|
- Width = 50d
|
|
|
- };
|
|
|
+ var border = new Border() { Height = 100d, Width = 50d };
|
|
|
var propertyChangedCount = 0;
|
|
|
- border.PropertyChanged += (sender, e) =>
|
|
|
+ border.PropertyChanged += (_, e) =>
|
|
|
{
|
|
|
- if (e.Property == Control.WidthProperty)
|
|
|
+ if (e.Property == Layoutable.WidthProperty)
|
|
|
{
|
|
|
propertyChangedCount++;
|
|
|
}
|
|
|
@@ -361,6 +259,7 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
var clock = new TestClock();
|
|
|
var cancellationTokenSource = new CancellationTokenSource();
|
|
|
var animationRun = animation.RunAsync(border, clock, cancellationTokenSource.Token);
|
|
|
+ Assert.False(animationRun.IsCompleted);
|
|
|
|
|
|
Assert.Equal(0, propertyChangedCount);
|
|
|
|
|
|
@@ -381,24 +280,16 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
|
- public void Cancellation_Of_Completed_Animation_Does_Not_Fail()
|
|
|
+ public void Dont_Run_Infinite_Iteration_Animation_On_RunAsync_Method()
|
|
|
{
|
|
|
var keyframe1 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 200d),
|
|
|
- },
|
|
|
- Cue = new Cue(1d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
};
|
|
|
|
|
|
var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Setters =
|
|
|
- {
|
|
|
- new Setter(Border.WidthProperty, 100d),
|
|
|
- },
|
|
|
- Cue = new Cue(0d)
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
|
|
|
var animation = new Animation()
|
|
|
@@ -406,23 +297,47 @@ namespace Avalonia.Base.UnitTests.Animation
|
|
|
Duration = TimeSpan.FromSeconds(10),
|
|
|
Delay = TimeSpan.FromSeconds(0),
|
|
|
DelayBetweenIterations = TimeSpan.FromSeconds(0),
|
|
|
- IterationCount = new IterationCount(1),
|
|
|
- Children =
|
|
|
- {
|
|
|
- keyframe2,
|
|
|
- keyframe1
|
|
|
- }
|
|
|
+ IterationCount = IterationCount.Infinite,
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
};
|
|
|
|
|
|
- var border = new Border()
|
|
|
+ var border = new Border() { Height = 100d, Width = 50d };
|
|
|
+ var clock = new TestClock();
|
|
|
+ var cancellationTokenSource = new CancellationTokenSource();
|
|
|
+ var animationRun = animation.RunAsync(border, clock, cancellationTokenSource.Token);
|
|
|
+
|
|
|
+
|
|
|
+ Assert.True(animationRun.IsCompleted);
|
|
|
+ Assert.NotNull(animationRun.Exception);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Cancellation_Of_Completed_Animation_Does_Not_Fail()
|
|
|
+ {
|
|
|
+ var keyframe1 = new KeyFrame()
|
|
|
+ {
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 200d), }, Cue = new Cue(1d)
|
|
|
+ };
|
|
|
+
|
|
|
+ var keyframe2 = new KeyFrame()
|
|
|
{
|
|
|
- Height = 100d,
|
|
|
- Width = 50d
|
|
|
+ Setters = { new Setter(Layoutable.WidthProperty, 100d), }, Cue = new Cue(0d)
|
|
|
};
|
|
|
+
|
|
|
+ var animation = new Animation()
|
|
|
+ {
|
|
|
+ Duration = TimeSpan.FromSeconds(10),
|
|
|
+ Delay = TimeSpan.FromSeconds(0),
|
|
|
+ DelayBetweenIterations = TimeSpan.FromSeconds(0),
|
|
|
+ IterationCount = new IterationCount(1),
|
|
|
+ Children = { keyframe2, keyframe1 }
|
|
|
+ };
|
|
|
+
|
|
|
+ var border = new Border() { Height = 100d, Width = 50d };
|
|
|
var propertyChangedCount = 0;
|
|
|
- border.PropertyChanged += (sender, e) =>
|
|
|
+ border.PropertyChanged += (_, e) =>
|
|
|
{
|
|
|
- if (e.Property == Control.WidthProperty)
|
|
|
+ if (e.Property == Layoutable.WidthProperty)
|
|
|
{
|
|
|
propertyChangedCount++;
|
|
|
}
|