1+ // Licensed to the .NET Foundation under one or more agreements.
2+ // The .NET Foundation licenses this file to you under the MIT license.
3+ // See the LICENSE file in the project root for more information.
4+
5+ using System . Threading . Tasks ;
6+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
7+ using Microsoft . Toolkit . Uwp ;
8+ using Windows . UI . Xaml . Controls ;
9+ using Microsoft . Toolkit . Uwp . UI . Animations ;
10+ using System . Numerics ;
11+ using Microsoft . Toolkit . Uwp . UI ;
12+ using System ;
13+ using Windows . UI . Xaml . Media ;
14+
15+ namespace UnitTests . UWP . UI . Animations
16+ {
17+ [ TestClass ]
18+ [ TestCategory ( "Test_AnimationBuilderStart" ) ]
19+ public class Test_AnimationBuilderStart : VisualUITestBase
20+ {
21+ [ TestMethod ]
22+ public async Task Start_WithCallback_CompositionOnly ( )
23+ {
24+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
25+ {
26+ var button = new Button ( ) ;
27+ var grid = new Grid ( ) { Children = { button } } ;
28+
29+ await SetTestContentAsync ( grid ) ;
30+
31+ var tcs = new TaskCompletionSource < object > ( ) ;
32+
33+ AnimationBuilder . Create ( )
34+ . Scale (
35+ to : new Vector3 ( 1.2f , 1 , 1 ) ,
36+ delay : TimeSpan . FromMilliseconds ( 400 ) )
37+ . Opacity (
38+ to : 0.7 ,
39+ duration : TimeSpan . FromSeconds ( 1 ) )
40+ . Start ( button , ( ) => tcs . SetResult ( null ) ) ;
41+
42+ await tcs . Task ;
43+
44+ // Note: we're just testing Scale and Opacity here as they're among the Visual properties that
45+ // are kept in sync on the Visual object after an animation completes, so we can use their
46+ // values below to check that the animations have run correctly. There is no particular reason
47+ // why we chose these two animations specifically other than this. For instance, checking
48+ // Visual.TransformMatrix.Translation or Visual.Offset after an animation targeting those
49+ // properties doesn't correctly report the final value and remains out of sync ¯\_(ツ)_/¯
50+ Assert . AreEqual ( button . GetVisual ( ) . Scale , new Vector3 ( 1.2f , 1 , 1 ) ) ;
51+ Assert . AreEqual ( button . GetVisual ( ) . Opacity , 0.7f ) ;
52+ } ) ;
53+ }
54+
55+ [ TestMethod ]
56+ public async Task Start_WithCallback_XamlOnly ( )
57+ {
58+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
59+ {
60+ var button = new Button ( ) ;
61+ var grid = new Grid ( ) { Children = { button } } ;
62+
63+ await SetTestContentAsync ( grid ) ;
64+
65+ var tcs = new TaskCompletionSource < object > ( ) ;
66+
67+ AnimationBuilder . Create ( )
68+ . Translation (
69+ to : new Vector2 ( 80 , 20 ) ,
70+ layer : FrameworkLayer . Xaml )
71+ . Scale (
72+ to : new Vector2 ( 1.2f , 1 ) ,
73+ delay : TimeSpan . FromMilliseconds ( 400 ) ,
74+ layer : FrameworkLayer . Xaml )
75+ . Opacity (
76+ to : 0.7 ,
77+ duration : TimeSpan . FromSeconds ( 1 ) ,
78+ layer : FrameworkLayer . Xaml )
79+ . Start ( button , ( ) => tcs . SetResult ( null ) ) ;
80+
81+ await tcs . Task ;
82+
83+ CompositeTransform transform = button . RenderTransform as CompositeTransform ;
84+
85+ Assert . IsNotNull ( transform ) ;
86+ Assert . AreEqual ( transform . TranslateX , 80 ) ;
87+ Assert . AreEqual ( transform . TranslateY , 20 ) ;
88+ Assert . AreEqual ( transform . ScaleX , 1.2 , 0.0000001 ) ;
89+ Assert . AreEqual ( transform . ScaleY , 1 , 0.0000001 ) ;
90+ Assert . AreEqual ( button . Opacity , 0.7 , 0.0000001 ) ;
91+ } ) ;
92+ }
93+
94+ [ TestMethod ]
95+ public async Task Start_WithCallback_CompositionAndXaml ( )
96+ {
97+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
98+ {
99+ var button = new Button ( ) ;
100+ var grid = new Grid ( ) { Children = { button } } ;
101+
102+ await SetTestContentAsync ( grid ) ;
103+
104+ var tcs = new TaskCompletionSource < object > ( ) ;
105+
106+ AnimationBuilder . Create ( )
107+ . Scale (
108+ to : new Vector3 ( 1.2f , 1 , 1 ) ,
109+ delay : TimeSpan . FromMilliseconds ( 400 ) )
110+ . Opacity (
111+ to : 0.7 ,
112+ duration : TimeSpan . FromSeconds ( 1 ) )
113+ . Translation (
114+ to : new Vector2 ( 80 , 20 ) ,
115+ layer : FrameworkLayer . Xaml )
116+ . Start ( button , ( ) => tcs . SetResult ( null ) ) ;
117+
118+ await tcs . Task ;
119+
120+ CompositeTransform transform = button . RenderTransform as CompositeTransform ;
121+
122+ Assert . AreEqual ( button . GetVisual ( ) . Scale , new Vector3 ( 1.2f , 1 , 1 ) ) ;
123+ Assert . AreEqual ( button . GetVisual ( ) . Opacity , 0.7f ) ;
124+ Assert . IsNotNull ( transform ) ;
125+ Assert . AreEqual ( transform . TranslateX , 80 ) ;
126+ Assert . AreEqual ( transform . TranslateY , 20 ) ;
127+ } ) ;
128+ }
129+ }
130+ }
0 commit comments