6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.scenario.animation.shared;
27
28 import com.sun.javafx.animation.TickCalculation;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertNotSame;
31 import static org.junit.Assert.assertSame;
32 import static org.junit.Assert.assertTrue;
33 import javafx.animation.KeyFrame;
34 import javafx.animation.KeyValue;
35 import javafx.beans.property.IntegerProperty;
36 import javafx.beans.property.SimpleIntegerProperty;
37 import javafx.util.Duration;
38
39 import org.junit.Test;
40
41 public class GeneralClipInterpolatorTest {
42
43 @Test
44 public void testSetKeyFrame() {
45 final KeyFrame kf1 = new KeyFrame(Duration.ZERO);
46 final KeyFrame kf2 = new KeyFrame(Duration.millis(1000));
47 final KeyFrame kf3 = new KeyFrame(Duration.millis(2000));
48 final GeneralClipInterpolator gci = new GeneralClipInterpolator(new KeyFrame[] {kf1, kf2, kf3}, new long[] {0, 6000, 6000});
49
50 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf2, kf3}, new long[] {0, 6000, 6000}));
51 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf2 }, new long[] {0, 6000 }));
52 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf3}, new long[] {0, 6000}));
53 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{kf1 }, new long[] {0 }));
54 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{ kf2, kf3}, new long[] { 6000, 6000}));
55 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{ kf2 }, new long[] { 6000 }));
56 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{ kf3}, new long[] { 6000}));
57 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{ }, new long[] { }));
58 }
59
60 @Test
61 public void test_OneKeyFrameOnly() {
62 // main purpose of this test is to ensure we do not throw exceptions
63 final KeyFrame kf1 = new KeyFrame(Duration.ZERO);
64 final KeyFrame kf2 = new KeyFrame(Duration.ZERO);
65
66 // one key frame
67 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {kf1}, new long[] {0});
68 gci1.validate(true);
69 gci1.validate(true);
70 gci1.setKeyFrames(new KeyFrame[]{kf2}, new long[] {6000});
71 gci1.validate(true);
72 gci1.setKeyFrames(new KeyFrame[]{}, new long[] {});
73 gci1.validate(true);
74
75 // no key frames
76 final GeneralClipInterpolator gci2 = new GeneralClipInterpolator (new KeyFrame[] {}, new long[] {});
77 gci2.validate(true);
78 gci2.validate(true);
79 gci2.setKeyFrames(new KeyFrame[]{kf1}, new long[] {0});
80 gci2.validate(true);
81 }
82
83 @Test
84 public void test_NoKeyValues() {
85 final KeyFrame start1 = new KeyFrame(Duration.ZERO);
86 final KeyFrame start2 = new KeyFrame(Duration.ZERO);
87 final KeyFrame end1 = new KeyFrame(Duration.millis(1000));
88 final KeyFrame end2a = new KeyFrame(Duration.millis(2000));
89 final KeyFrame end2b = new KeyFrame(Duration.millis(3000));
90
91 // four key frames
92 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {start1, start2, end1, end2a}, new long[] {0, 0, 6000, 12000});
93 gci1.validate(true);
94 gci1.interpolate(TickCalculation.fromMillis(300));
95 gci1.interpolate(TickCalculation.fromMillis(1300));
96
97 gci1.validate(true);
98 gci1.interpolate(TickCalculation.fromMillis(800));
99 gci1.interpolate(TickCalculation.fromMillis(1800));
100
101 gci1.setKeyFrames(new KeyFrame[]{start1, start2, end1, end2b}, new long[] {0, 0, 6000, 18000});
102 gci1.interpolate(TickCalculation.fromMillis(400));
103 gci1.interpolate(TickCalculation.fromMillis(1400));
104
105 gci1.validate(true);
106 gci1.interpolate(TickCalculation.fromMillis(600));
107 gci1.interpolate(TickCalculation.fromMillis(1600));
108
109 // two key frames
110 final GeneralClipInterpolator gci2 = new GeneralClipInterpolator (new KeyFrame[] {end1, end2a}, new long[] {6000, 12000});
111 gci2.validate(true);
112 gci2.interpolate(TickCalculation.fromMillis(300));
113 gci2.interpolate(TickCalculation.fromMillis(1300));
114
115 gci2.validate(true);
116 gci2.interpolate(TickCalculation.fromMillis(800));
117 gci2.interpolate(TickCalculation.fromMillis(1800));
118
119 gci2.setKeyFrames(new KeyFrame[]{end1, end2b}, new long[] {6000, 18000});
120 gci2.interpolate(TickCalculation.fromMillis(400));
121 gci2.interpolate(TickCalculation.fromMillis(1400));
122
123 gci2.validate(true);
124 gci2.interpolate(TickCalculation.fromMillis(600));
125 gci2.interpolate(TickCalculation.fromMillis(1600));
126 }
127
128 @Test
129 public void test_ThreeKeyFrames_OneKeyValue() {
130 final IntegerProperty v = new SimpleIntegerProperty();
131 final KeyFrame start1 = new KeyFrame(Duration.ZERO);
132 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v, 30));
133 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v, 40));
134 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v, 60));
135 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v, 70));
136
137 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {start1, start2, mid1, end1}, new long[] {0, 0, 6000, 12000});
138 v.set(0);
139 gci1.validate(true);
140 gci1.interpolate(TickCalculation.fromMillis(0));
141 assertEquals(30, v.get());
142 gci1.interpolate(TickCalculation.fromMillis(300));
143 assertEquals(33, v.get());
144 gci1.interpolate(TickCalculation.fromMillis(1000));
145 assertEquals(40, v.get());
146 gci1.interpolate(TickCalculation.fromMillis(1600));
147 assertEquals(52, v.get());
148 gci1.interpolate(TickCalculation.fromMillis(2000));
149 assertEquals(60, v.get());
150
151 // re-validate
152 v.set(20);
153 gci1.validate(true);
154 gci1.interpolate(TickCalculation.fromMillis(0));
155 assertEquals(30, v.get());
156 gci1.interpolate(TickCalculation.fromMillis(800));
157 assertEquals(38, v.get());
181 gci1.validate(true);
182 gci1.interpolate(TickCalculation.fromMillis(0));
183 assertEquals(30, v.get());
184 gci1.interpolate(TickCalculation.fromMillis(700));
185 assertEquals(37, v.get());
186 gci1.interpolate(TickCalculation.fromMillis(1000));
187 assertEquals(40, v.get());
188 gci1.interpolate(TickCalculation.fromMillis(1300));
189 assertEquals(43, v.get());
190 gci1.interpolate(TickCalculation.fromMillis(4000));
191 assertEquals(70, v.get());
192 }
193
194 @Test
195 public void test_TwoKeyFrames_OneKeyValue() {
196 final IntegerProperty v = new SimpleIntegerProperty();
197 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v, 40));
198 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v, 60));
199 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v, 70));
200
201 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {mid1, end1}, new long[] {6000, 12000});
202 v.set(0);
203 gci1.validate(true);
204 gci1.interpolate(TickCalculation.fromMillis(0));
205 assertEquals( 0, v.get());
206 gci1.interpolate(TickCalculation.fromMillis(300));
207 assertEquals(12, v.get());
208 gci1.interpolate(TickCalculation.fromMillis(1000));
209 assertEquals(40, v.get());
210 gci1.interpolate(TickCalculation.fromMillis(1600));
211 assertEquals(52, v.get());
212 gci1.interpolate(TickCalculation.fromMillis(2000));
213 assertEquals(60, v.get());
214
215 // re-validate
216 v.set(20);
217 gci1.validate(true);
218 gci1.interpolate(TickCalculation.fromMillis(0));
219 assertEquals(20, v.get());
220 gci1.interpolate(TickCalculation.fromMillis(800));
221 assertEquals(36, v.get());
250 gci1.interpolate(TickCalculation.fromMillis(1000));
251 assertEquals(40, v.get());
252 gci1.interpolate(TickCalculation.fromMillis(1300));
253 assertEquals(43, v.get());
254 gci1.interpolate(TickCalculation.fromMillis(4000));
255 assertEquals(70, v.get());
256 }
257
258 @Test
259 public void test_ThreeKeyFrames_ThreeKeyValues() {
260 final IntegerProperty v1 = new SimpleIntegerProperty();
261 final IntegerProperty v2 = new SimpleIntegerProperty();
262 final IntegerProperty v3 = new SimpleIntegerProperty();
263 final IntegerProperty v4 = new SimpleIntegerProperty();
264 final KeyFrame start1 = new KeyFrame(Duration.ZERO, new KeyValue(v3, 230), new KeyValue(v4, 330));
265 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v2, 130));
266 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 140), new KeyValue(v3, 240));
267 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 160));
268 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v1, 70), new KeyValue(v2, 170));
269
270 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {start1, start2, mid1, end1}, new long[] {0, 0, 6000, 12000});
271 v1.set( 0);
272 v2.set(100);
273 v3.set(200);
274 v4.set(300);
275 gci1.validate(true);
276 gci1.interpolate(TickCalculation.fromMillis(0));
277 assertEquals( 0, v1.get());
278 assertEquals(130, v2.get());
279 assertEquals(230, v3.get());
280 assertEquals(300, v4.get());
281 gci1.interpolate(TickCalculation.fromMillis(300));
282 assertEquals( 12, v1.get());
283 assertEquals(133, v2.get());
284 assertEquals(233, v3.get());
285 assertEquals(300, v4.get());
286 gci1.interpolate(TickCalculation.fromMillis(1000));
287 assertEquals( 40, v1.get());
288 assertEquals(140, v2.get());
289 assertEquals(240, v3.get());
290 assertEquals(300, v4.get());
388 assertEquals( 43, v1.get());
389 assertEquals(143, v2.get());
390 assertEquals(240, v3.get());
391 assertEquals(320, v4.get());
392 gci1.interpolate(TickCalculation.fromMillis(4000));
393 assertEquals( 70, v1.get());
394 assertEquals(170, v2.get());
395 assertEquals(240, v3.get());
396 assertEquals(320, v4.get());
397 }
398
399 @Test
400 public void test_TwoKeyFrames_ThreeKeyValues() {
401 final IntegerProperty v1 = new SimpleIntegerProperty();
402 final IntegerProperty v2 = new SimpleIntegerProperty();
403 final IntegerProperty v3 = new SimpleIntegerProperty();
404 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 140), new KeyValue(v3, 240));
405 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 160), new KeyValue(v3, 260));
406 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v1, 70), new KeyValue(v2, 170), new KeyValue(v3, 270));
407
408 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {mid1, end1}, new long[] {6000, 12000});
409 v1.set( 0);
410 v2.set(100);
411 v3.set(200);
412 gci1.validate(true);
413 gci1.interpolate(TickCalculation.fromMillis(0));
414 assertEquals( 0, v1.get());
415 assertEquals(100, v2.get());
416 assertEquals(200, v3.get());
417 gci1.interpolate(TickCalculation.fromMillis(300));
418 assertEquals( 12, v1.get());
419 assertEquals(112, v2.get());
420 assertEquals(212, v3.get());
421 gci1.interpolate(TickCalculation.fromMillis(1000));
422 assertEquals( 40, v1.get());
423 assertEquals(140, v2.get());
424 assertEquals(240, v3.get());
425 gci1.interpolate(TickCalculation.fromMillis(1600));
426 assertEquals( 52, v1.get());
427 assertEquals(152, v2.get());
428 assertEquals(252, v3.get());
506 assertEquals(243, v3.get());
507 gci1.interpolate(TickCalculation.fromMillis(4000));
508 assertEquals( 70, v1.get());
509 assertEquals(170, v2.get());
510 assertEquals(270, v3.get());
511 }
512
513
514 @Test
515 public void test_DuplicateKeyValue() {
516 final IntegerProperty v1 = new SimpleIntegerProperty();
517 final IntegerProperty v2 = new SimpleIntegerProperty();
518 final KeyFrame start1 = new KeyFrame(Duration.ZERO, new KeyValue(v1, 30), new KeyValue(v2, 0));
519 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v1, 30), new KeyValue(v1, -30), new KeyValue(v2, 0));
520 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 100));
521 final KeyFrame mid2 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v1, -40), new KeyValue(v2, 100));
522 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 0));
523 final KeyFrame end2 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v1, -60), new KeyValue(v2, 0));
524
525 // single value in start, single value in mid, duplicate value in end
526 final GeneralClipInterpolator gci1 = new GeneralClipInterpolator (new KeyFrame[] {start1, mid1, end2}, new long[] {0, 6000, 12000});
527 v1.set(0);
528 v2.set(0);
529 gci1.validate(true);
530 gci1.interpolate(TickCalculation.fromMillis(0));
531 assertEquals(30, v1.get());
532 assertEquals(0, v2.get());
533 gci1.interpolate(TickCalculation.fromMillis(300));
534 assertEquals(33, v1.get());
535 assertEquals(30, v2.get());
536 gci1.interpolate(TickCalculation.fromMillis(1000));
537 assertEquals(40, v1.get());
538 assertEquals(100, v2.get());
539 gci1.interpolate(TickCalculation.fromMillis(1600));
540 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
541 assertEquals(40, v2.get());
542 gci1.interpolate(TickCalculation.fromMillis(2000));
543 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
544 assertEquals(0, v2.get());
545
546 // single value in start, duplicate value in mid, single value in end
547 final GeneralClipInterpolator gci2 = new GeneralClipInterpolator (new KeyFrame[] {start1, mid2, end1}, new long[] {0, 6000, 12000});
548 v1.set(0);
549 v2.set(0);
550 gci2.validate(true);
551 gci2.interpolate(TickCalculation.fromMillis(0));
552 assertEquals(30, v1.get());
553 assertEquals(0, v2.get());
554 gci2.interpolate(TickCalculation.fromMillis(300));
555 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()));
556 assertEquals(30, v2.get());
557 gci2.interpolate(TickCalculation.fromMillis(1000));
558 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
559 assertEquals(100, v2.get());
560 gci2.interpolate(TickCalculation.fromMillis(1600));
561 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
562 assertEquals(40, v2.get());
563 gci2.interpolate(TickCalculation.fromMillis(2000));
564 assertEquals(60, v1.get());
565 assertEquals(0, v2.get());
566
567 // duplicate value in start, single value in mid, single value in end
568 final GeneralClipInterpolator gci3 = new GeneralClipInterpolator (new KeyFrame[] {start2, mid1, end1}, new long[] {0, 6000, 12000});
569 v1.set(0);
570 v2.set(0);
571 gci3.validate(true);
572 gci3.interpolate(TickCalculation.fromMillis(0));
573 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
574 assertEquals(0, v2.get());
575 gci3.interpolate(TickCalculation.fromMillis(300));
576 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (-9 == v1.get()));
577 assertEquals(30, v2.get());
578 gci3.interpolate(TickCalculation.fromMillis(1000));
579 assertEquals(40, v1.get());
580 assertEquals(100, v2.get());
581 gci3.interpolate(TickCalculation.fromMillis(1600));
582 assertEquals(52, v1.get());
583 assertEquals(40, v2.get());
584 gci3.interpolate(TickCalculation.fromMillis(2000));
585 assertEquals(60, v1.get());
586 assertEquals(0, v2.get());
587
588 // duplicate value in start, duplicate value in mid, single value in end
589 final GeneralClipInterpolator gci4 = new GeneralClipInterpolator (new KeyFrame[] {start2, mid2, end1}, new long[] {0, 6000, 12000});
590 v1.set(0);
591 v2.set(0);
592 gci4.validate(true);
593 gci4.interpolate(TickCalculation.fromMillis(0));
594 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
595 assertEquals(0, v2.get());
596 gci4.interpolate(TickCalculation.fromMillis(300));
597 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()) || (-9 == v1.get()) || (-33 == v1.get()));
598 assertEquals(30, v2.get());
599 gci4.interpolate(TickCalculation.fromMillis(1000));
600 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
601 assertEquals(100, v2.get());
602 gci4.interpolate(TickCalculation.fromMillis(1600));
603 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
604 assertEquals(40, v2.get());
605 gci4.interpolate(TickCalculation.fromMillis(2000));
606 assertEquals(60, v1.get());
607 assertEquals(0, v2.get());
608
609 // duplicate value in start, single value in mid, duplicate value in end
610 final GeneralClipInterpolator gci5 = new GeneralClipInterpolator (new KeyFrame[] {start2, mid1, end2}, new long[] {0, 6000, 12000});
611 v1.set(0);
612 v2.set(0);
613 gci5.validate(true);
614 gci5.interpolate(TickCalculation.fromMillis(0));
615 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
616 assertEquals(0, v2.get());
617 gci5.interpolate(TickCalculation.fromMillis(300));
618 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (-9 == v1.get()));
619 assertEquals(30, v2.get());
620 gci5.interpolate(TickCalculation.fromMillis(1000));
621 assertEquals(40, v1.get());
622 assertEquals(100, v2.get());
623 gci5.interpolate(TickCalculation.fromMillis(1600));
624 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
625 assertEquals(40, v2.get());
626 gci5.interpolate(TickCalculation.fromMillis(2000));
627 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
628 assertEquals(0, v2.get());
629
630 // single value in start, duplicate value in mid, duplicate value in end
631 final GeneralClipInterpolator gci6 = new GeneralClipInterpolator (new KeyFrame[] {start1, mid2, end2}, new long[] {0, 6000, 12000});
632 v1.set(0);
633 v2.set(0);
634 gci6.validate(true);
635 gci6.interpolate(TickCalculation.fromMillis(0));
636 assertEquals(30, v1.get());
637 assertEquals(0, v2.get());
638 gci6.interpolate(TickCalculation.fromMillis(300));
639 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()));
640 assertEquals(30, v2.get());
641 gci6.interpolate(TickCalculation.fromMillis(1000));
642 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
643 assertEquals(100, v2.get());
644 gci6.interpolate(TickCalculation.fromMillis(1600));
645 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
646 assertEquals(40, v2.get());
647 gci6.interpolate(TickCalculation.fromMillis(2000));
648 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
649 assertEquals(0, v2.get());
650
651 // duplicate value in start, duplicate value in mid, duplicate value in end
652 final GeneralClipInterpolator gci7 = new GeneralClipInterpolator (new KeyFrame[] {start2, mid2, end2}, new long[] {0, 6000, 12000});
653 v1.set(0);
654 v2.set(0);
655 gci7.validate(true);
656 gci7.interpolate(TickCalculation.fromMillis(0));
657 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
658 assertEquals(0, v2.get());
659 gci7.interpolate(TickCalculation.fromMillis(300));
660 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()) || (-9 == v1.get()) || (-33 == v1.get()));
661 assertEquals(30, v2.get());
662 gci7.interpolate(TickCalculation.fromMillis(1000));
663 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
664 assertEquals(100, v2.get());
665 gci7.interpolate(TickCalculation.fromMillis(1600));
666 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
667 assertEquals(40, v2.get());
668 gci7.interpolate(TickCalculation.fromMillis(2000));
669 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
670 assertEquals(0, v2.get());
671
672 // no value in start, single value in mid, duplicate value in end
673 final GeneralClipInterpolator gci8 = new GeneralClipInterpolator (new KeyFrame[] {mid1, end2}, new long[] {6000, 12000});
674 v1.set(0);
675 v2.set(0);
676 gci8.validate(true);
677 gci8.interpolate(TickCalculation.fromMillis(0));
678 assertEquals(0, v1.get());
679 assertEquals(0, v2.get());
680 gci8.interpolate(TickCalculation.fromMillis(400));
681 assertEquals(16, v1.get());
682 assertEquals(40, v2.get());
683 gci8.interpolate(TickCalculation.fromMillis(1000));
684 assertEquals(40, v1.get());
685 assertEquals(100, v2.get());
686 gci8.interpolate(TickCalculation.fromMillis(1600));
687 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
688 assertEquals(40, v2.get());
689 gci8.interpolate(TickCalculation.fromMillis(2000));
690 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
691 assertEquals(0, v2.get());
692
693 // no value in start, duplicate value in mid, single value in end
694 final GeneralClipInterpolator gci9 = new GeneralClipInterpolator (new KeyFrame[] {mid2, end1}, new long[] {6000, 12000});
695 v1.set(0);
696 v2.set(0);
697 gci9.validate(true);
698 gci9.interpolate(TickCalculation.fromMillis(0));
699 assertEquals(0, v1.get());
700 assertEquals(0, v2.get());
701 gci9.interpolate(TickCalculation.fromMillis(400));
702 assertTrue("v1.get(): " + v1.get(), (16 == v1.get()) || (-16 == v1.get()));
703 assertEquals(40, v2.get());
704 gci9.interpolate(TickCalculation.fromMillis(1000));
705 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
706 assertEquals(100, v2.get());
707 gci9.interpolate(TickCalculation.fromMillis(1600));
708 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
709 assertEquals(40, v2.get());
710 gci9.interpolate(TickCalculation.fromMillis(2000));
711 assertEquals(60, v1.get());
712 assertEquals(0, v2.get());
713
714 // no value in start, duplicate value in mid, duplicate value in end
715 final GeneralClipInterpolator gci10 = new GeneralClipInterpolator (new KeyFrame[] {mid2, end2}, new long[] {6000, 12000});
716 v1.set(0);
717 v2.set(0);
718 gci10.validate(true);
719 gci10.interpolate(TickCalculation.fromMillis(0));
720 assertEquals(0, v1.get());
721 assertEquals(0, v2.get());
722 gci10.interpolate(TickCalculation.fromMillis(400));
723 assertTrue("v1.get(): " + v1.get(), (16 == v1.get()) || (-16 == v1.get()));
724 assertEquals(40, v2.get());
725 gci10.interpolate(TickCalculation.fromMillis(1000));
726 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
727 assertEquals(100, v2.get());
728 gci10.interpolate(TickCalculation.fromMillis(1600));
729 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
730 assertEquals(40, v2.get());
731 gci10.interpolate(TickCalculation.fromMillis(2000));
732 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
733 assertEquals(0, v2.get());
734 }
735 }
|
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package test.com.sun.scenario.animation.shared;
27
28 import com.sun.javafx.animation.TickCalculation;
29 import com.sun.scenario.animation.shared.GeneralClipInterpolatorShim;
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertNotSame;
32 import static org.junit.Assert.assertSame;
33 import static org.junit.Assert.assertTrue;
34 import javafx.animation.KeyFrame;
35 import javafx.animation.KeyValue;
36 import javafx.beans.property.IntegerProperty;
37 import javafx.beans.property.SimpleIntegerProperty;
38 import javafx.util.Duration;
39
40 import org.junit.Test;
41
42 public class GeneralClipInterpolatorTest {
43
44 @Test
45 public void testSetKeyFrame() {
46 final KeyFrame kf1 = new KeyFrame(Duration.ZERO);
47 final KeyFrame kf2 = new KeyFrame(Duration.millis(1000));
48 final KeyFrame kf3 = new KeyFrame(Duration.millis(2000));
49 final GeneralClipInterpolatorShim gci = new GeneralClipInterpolatorShim(new KeyFrame[] {kf1, kf2, kf3}, new long[] {0, 6000, 6000});
50
51 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf2, kf3}, new long[] {0, 6000, 6000}));
52 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf2 }, new long[] {0, 6000 }));
53 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{kf1, kf3}, new long[] {0, 6000}));
54 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{kf1 }, new long[] {0 }));
55 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{ kf2, kf3}, new long[] { 6000, 6000}));
56 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{ kf2 }, new long[] { 6000 }));
57 assertNotSame(gci, gci.setKeyFrames(new KeyFrame[]{ kf3}, new long[] { 6000}));
58 assertSame (gci, gci.setKeyFrames(new KeyFrame[]{ }, new long[] { }));
59 }
60
61 @Test
62 public void test_OneKeyFrameOnly() {
63 // main purpose of this test is to ensure we do not throw exceptions
64 final KeyFrame kf1 = new KeyFrame(Duration.ZERO);
65 final KeyFrame kf2 = new KeyFrame(Duration.ZERO);
66
67 // one key frame
68 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {kf1}, new long[] {0});
69 gci1.validate(true);
70 gci1.validate(true);
71 gci1.setKeyFrames(new KeyFrame[]{kf2}, new long[] {6000});
72 gci1.validate(true);
73 gci1.setKeyFrames(new KeyFrame[]{}, new long[] {});
74 gci1.validate(true);
75
76 // no key frames
77 final GeneralClipInterpolatorShim gci2 = new GeneralClipInterpolatorShim (new KeyFrame[] {}, new long[] {});
78 gci2.validate(true);
79 gci2.validate(true);
80 gci2.setKeyFrames(new KeyFrame[]{kf1}, new long[] {0});
81 gci2.validate(true);
82 }
83
84 @Test
85 public void test_NoKeyValues() {
86 final KeyFrame start1 = new KeyFrame(Duration.ZERO);
87 final KeyFrame start2 = new KeyFrame(Duration.ZERO);
88 final KeyFrame end1 = new KeyFrame(Duration.millis(1000));
89 final KeyFrame end2a = new KeyFrame(Duration.millis(2000));
90 final KeyFrame end2b = new KeyFrame(Duration.millis(3000));
91
92 // four key frames
93 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, start2, end1, end2a}, new long[] {0, 0, 6000, 12000});
94 gci1.validate(true);
95 gci1.interpolate(TickCalculation.fromMillis(300));
96 gci1.interpolate(TickCalculation.fromMillis(1300));
97
98 gci1.validate(true);
99 gci1.interpolate(TickCalculation.fromMillis(800));
100 gci1.interpolate(TickCalculation.fromMillis(1800));
101
102 gci1.setKeyFrames(new KeyFrame[]{start1, start2, end1, end2b}, new long[] {0, 0, 6000, 18000});
103 gci1.interpolate(TickCalculation.fromMillis(400));
104 gci1.interpolate(TickCalculation.fromMillis(1400));
105
106 gci1.validate(true);
107 gci1.interpolate(TickCalculation.fromMillis(600));
108 gci1.interpolate(TickCalculation.fromMillis(1600));
109
110 // two key frames
111 final GeneralClipInterpolatorShim gci2 = new GeneralClipInterpolatorShim (new KeyFrame[] {end1, end2a}, new long[] {6000, 12000});
112 gci2.validate(true);
113 gci2.interpolate(TickCalculation.fromMillis(300));
114 gci2.interpolate(TickCalculation.fromMillis(1300));
115
116 gci2.validate(true);
117 gci2.interpolate(TickCalculation.fromMillis(800));
118 gci2.interpolate(TickCalculation.fromMillis(1800));
119
120 gci2.setKeyFrames(new KeyFrame[]{end1, end2b}, new long[] {6000, 18000});
121 gci2.interpolate(TickCalculation.fromMillis(400));
122 gci2.interpolate(TickCalculation.fromMillis(1400));
123
124 gci2.validate(true);
125 gci2.interpolate(TickCalculation.fromMillis(600));
126 gci2.interpolate(TickCalculation.fromMillis(1600));
127 }
128
129 @Test
130 public void test_ThreeKeyFrames_OneKeyValue() {
131 final IntegerProperty v = new SimpleIntegerProperty();
132 final KeyFrame start1 = new KeyFrame(Duration.ZERO);
133 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v, 30));
134 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v, 40));
135 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v, 60));
136 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v, 70));
137
138 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, start2, mid1, end1}, new long[] {0, 0, 6000, 12000});
139 v.set(0);
140 gci1.validate(true);
141 gci1.interpolate(TickCalculation.fromMillis(0));
142 assertEquals(30, v.get());
143 gci1.interpolate(TickCalculation.fromMillis(300));
144 assertEquals(33, v.get());
145 gci1.interpolate(TickCalculation.fromMillis(1000));
146 assertEquals(40, v.get());
147 gci1.interpolate(TickCalculation.fromMillis(1600));
148 assertEquals(52, v.get());
149 gci1.interpolate(TickCalculation.fromMillis(2000));
150 assertEquals(60, v.get());
151
152 // re-validate
153 v.set(20);
154 gci1.validate(true);
155 gci1.interpolate(TickCalculation.fromMillis(0));
156 assertEquals(30, v.get());
157 gci1.interpolate(TickCalculation.fromMillis(800));
158 assertEquals(38, v.get());
182 gci1.validate(true);
183 gci1.interpolate(TickCalculation.fromMillis(0));
184 assertEquals(30, v.get());
185 gci1.interpolate(TickCalculation.fromMillis(700));
186 assertEquals(37, v.get());
187 gci1.interpolate(TickCalculation.fromMillis(1000));
188 assertEquals(40, v.get());
189 gci1.interpolate(TickCalculation.fromMillis(1300));
190 assertEquals(43, v.get());
191 gci1.interpolate(TickCalculation.fromMillis(4000));
192 assertEquals(70, v.get());
193 }
194
195 @Test
196 public void test_TwoKeyFrames_OneKeyValue() {
197 final IntegerProperty v = new SimpleIntegerProperty();
198 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v, 40));
199 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v, 60));
200 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v, 70));
201
202 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {mid1, end1}, new long[] {6000, 12000});
203 v.set(0);
204 gci1.validate(true);
205 gci1.interpolate(TickCalculation.fromMillis(0));
206 assertEquals( 0, v.get());
207 gci1.interpolate(TickCalculation.fromMillis(300));
208 assertEquals(12, v.get());
209 gci1.interpolate(TickCalculation.fromMillis(1000));
210 assertEquals(40, v.get());
211 gci1.interpolate(TickCalculation.fromMillis(1600));
212 assertEquals(52, v.get());
213 gci1.interpolate(TickCalculation.fromMillis(2000));
214 assertEquals(60, v.get());
215
216 // re-validate
217 v.set(20);
218 gci1.validate(true);
219 gci1.interpolate(TickCalculation.fromMillis(0));
220 assertEquals(20, v.get());
221 gci1.interpolate(TickCalculation.fromMillis(800));
222 assertEquals(36, v.get());
251 gci1.interpolate(TickCalculation.fromMillis(1000));
252 assertEquals(40, v.get());
253 gci1.interpolate(TickCalculation.fromMillis(1300));
254 assertEquals(43, v.get());
255 gci1.interpolate(TickCalculation.fromMillis(4000));
256 assertEquals(70, v.get());
257 }
258
259 @Test
260 public void test_ThreeKeyFrames_ThreeKeyValues() {
261 final IntegerProperty v1 = new SimpleIntegerProperty();
262 final IntegerProperty v2 = new SimpleIntegerProperty();
263 final IntegerProperty v3 = new SimpleIntegerProperty();
264 final IntegerProperty v4 = new SimpleIntegerProperty();
265 final KeyFrame start1 = new KeyFrame(Duration.ZERO, new KeyValue(v3, 230), new KeyValue(v4, 330));
266 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v2, 130));
267 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 140), new KeyValue(v3, 240));
268 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 160));
269 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v1, 70), new KeyValue(v2, 170));
270
271 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, start2, mid1, end1}, new long[] {0, 0, 6000, 12000});
272 v1.set( 0);
273 v2.set(100);
274 v3.set(200);
275 v4.set(300);
276 gci1.validate(true);
277 gci1.interpolate(TickCalculation.fromMillis(0));
278 assertEquals( 0, v1.get());
279 assertEquals(130, v2.get());
280 assertEquals(230, v3.get());
281 assertEquals(300, v4.get());
282 gci1.interpolate(TickCalculation.fromMillis(300));
283 assertEquals( 12, v1.get());
284 assertEquals(133, v2.get());
285 assertEquals(233, v3.get());
286 assertEquals(300, v4.get());
287 gci1.interpolate(TickCalculation.fromMillis(1000));
288 assertEquals( 40, v1.get());
289 assertEquals(140, v2.get());
290 assertEquals(240, v3.get());
291 assertEquals(300, v4.get());
389 assertEquals( 43, v1.get());
390 assertEquals(143, v2.get());
391 assertEquals(240, v3.get());
392 assertEquals(320, v4.get());
393 gci1.interpolate(TickCalculation.fromMillis(4000));
394 assertEquals( 70, v1.get());
395 assertEquals(170, v2.get());
396 assertEquals(240, v3.get());
397 assertEquals(320, v4.get());
398 }
399
400 @Test
401 public void test_TwoKeyFrames_ThreeKeyValues() {
402 final IntegerProperty v1 = new SimpleIntegerProperty();
403 final IntegerProperty v2 = new SimpleIntegerProperty();
404 final IntegerProperty v3 = new SimpleIntegerProperty();
405 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 140), new KeyValue(v3, 240));
406 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 160), new KeyValue(v3, 260));
407 final KeyFrame end2 = new KeyFrame(Duration.millis(4000), new KeyValue(v1, 70), new KeyValue(v2, 170), new KeyValue(v3, 270));
408
409 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {mid1, end1}, new long[] {6000, 12000});
410 v1.set( 0);
411 v2.set(100);
412 v3.set(200);
413 gci1.validate(true);
414 gci1.interpolate(TickCalculation.fromMillis(0));
415 assertEquals( 0, v1.get());
416 assertEquals(100, v2.get());
417 assertEquals(200, v3.get());
418 gci1.interpolate(TickCalculation.fromMillis(300));
419 assertEquals( 12, v1.get());
420 assertEquals(112, v2.get());
421 assertEquals(212, v3.get());
422 gci1.interpolate(TickCalculation.fromMillis(1000));
423 assertEquals( 40, v1.get());
424 assertEquals(140, v2.get());
425 assertEquals(240, v3.get());
426 gci1.interpolate(TickCalculation.fromMillis(1600));
427 assertEquals( 52, v1.get());
428 assertEquals(152, v2.get());
429 assertEquals(252, v3.get());
507 assertEquals(243, v3.get());
508 gci1.interpolate(TickCalculation.fromMillis(4000));
509 assertEquals( 70, v1.get());
510 assertEquals(170, v2.get());
511 assertEquals(270, v3.get());
512 }
513
514
515 @Test
516 public void test_DuplicateKeyValue() {
517 final IntegerProperty v1 = new SimpleIntegerProperty();
518 final IntegerProperty v2 = new SimpleIntegerProperty();
519 final KeyFrame start1 = new KeyFrame(Duration.ZERO, new KeyValue(v1, 30), new KeyValue(v2, 0));
520 final KeyFrame start2 = new KeyFrame(Duration.ZERO, new KeyValue(v1, 30), new KeyValue(v1, -30), new KeyValue(v2, 0));
521 final KeyFrame mid1 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v2, 100));
522 final KeyFrame mid2 = new KeyFrame(Duration.millis(1000), new KeyValue(v1, 40), new KeyValue(v1, -40), new KeyValue(v2, 100));
523 final KeyFrame end1 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v2, 0));
524 final KeyFrame end2 = new KeyFrame(Duration.millis(2000), new KeyValue(v1, 60), new KeyValue(v1, -60), new KeyValue(v2, 0));
525
526 // single value in start, single value in mid, duplicate value in end
527 final GeneralClipInterpolatorShim gci1 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, mid1, end2}, new long[] {0, 6000, 12000});
528 v1.set(0);
529 v2.set(0);
530 gci1.validate(true);
531 gci1.interpolate(TickCalculation.fromMillis(0));
532 assertEquals(30, v1.get());
533 assertEquals(0, v2.get());
534 gci1.interpolate(TickCalculation.fromMillis(300));
535 assertEquals(33, v1.get());
536 assertEquals(30, v2.get());
537 gci1.interpolate(TickCalculation.fromMillis(1000));
538 assertEquals(40, v1.get());
539 assertEquals(100, v2.get());
540 gci1.interpolate(TickCalculation.fromMillis(1600));
541 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
542 assertEquals(40, v2.get());
543 gci1.interpolate(TickCalculation.fromMillis(2000));
544 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
545 assertEquals(0, v2.get());
546
547 // single value in start, duplicate value in mid, single value in end
548 final GeneralClipInterpolatorShim gci2 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, mid2, end1}, new long[] {0, 6000, 12000});
549 v1.set(0);
550 v2.set(0);
551 gci2.validate(true);
552 gci2.interpolate(TickCalculation.fromMillis(0));
553 assertEquals(30, v1.get());
554 assertEquals(0, v2.get());
555 gci2.interpolate(TickCalculation.fromMillis(300));
556 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()));
557 assertEquals(30, v2.get());
558 gci2.interpolate(TickCalculation.fromMillis(1000));
559 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
560 assertEquals(100, v2.get());
561 gci2.interpolate(TickCalculation.fromMillis(1600));
562 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
563 assertEquals(40, v2.get());
564 gci2.interpolate(TickCalculation.fromMillis(2000));
565 assertEquals(60, v1.get());
566 assertEquals(0, v2.get());
567
568 // duplicate value in start, single value in mid, single value in end
569 final GeneralClipInterpolatorShim gci3 = new GeneralClipInterpolatorShim (new KeyFrame[] {start2, mid1, end1}, new long[] {0, 6000, 12000});
570 v1.set(0);
571 v2.set(0);
572 gci3.validate(true);
573 gci3.interpolate(TickCalculation.fromMillis(0));
574 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
575 assertEquals(0, v2.get());
576 gci3.interpolate(TickCalculation.fromMillis(300));
577 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (-9 == v1.get()));
578 assertEquals(30, v2.get());
579 gci3.interpolate(TickCalculation.fromMillis(1000));
580 assertEquals(40, v1.get());
581 assertEquals(100, v2.get());
582 gci3.interpolate(TickCalculation.fromMillis(1600));
583 assertEquals(52, v1.get());
584 assertEquals(40, v2.get());
585 gci3.interpolate(TickCalculation.fromMillis(2000));
586 assertEquals(60, v1.get());
587 assertEquals(0, v2.get());
588
589 // duplicate value in start, duplicate value in mid, single value in end
590 final GeneralClipInterpolatorShim gci4 = new GeneralClipInterpolatorShim (new KeyFrame[] {start2, mid2, end1}, new long[] {0, 6000, 12000});
591 v1.set(0);
592 v2.set(0);
593 gci4.validate(true);
594 gci4.interpolate(TickCalculation.fromMillis(0));
595 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
596 assertEquals(0, v2.get());
597 gci4.interpolate(TickCalculation.fromMillis(300));
598 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()) || (-9 == v1.get()) || (-33 == v1.get()));
599 assertEquals(30, v2.get());
600 gci4.interpolate(TickCalculation.fromMillis(1000));
601 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
602 assertEquals(100, v2.get());
603 gci4.interpolate(TickCalculation.fromMillis(1600));
604 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
605 assertEquals(40, v2.get());
606 gci4.interpolate(TickCalculation.fromMillis(2000));
607 assertEquals(60, v1.get());
608 assertEquals(0, v2.get());
609
610 // duplicate value in start, single value in mid, duplicate value in end
611 final GeneralClipInterpolatorShim gci5 = new GeneralClipInterpolatorShim (new KeyFrame[] {start2, mid1, end2}, new long[] {0, 6000, 12000});
612 v1.set(0);
613 v2.set(0);
614 gci5.validate(true);
615 gci5.interpolate(TickCalculation.fromMillis(0));
616 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
617 assertEquals(0, v2.get());
618 gci5.interpolate(TickCalculation.fromMillis(300));
619 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (-9 == v1.get()));
620 assertEquals(30, v2.get());
621 gci5.interpolate(TickCalculation.fromMillis(1000));
622 assertEquals(40, v1.get());
623 assertEquals(100, v2.get());
624 gci5.interpolate(TickCalculation.fromMillis(1600));
625 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
626 assertEquals(40, v2.get());
627 gci5.interpolate(TickCalculation.fromMillis(2000));
628 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
629 assertEquals(0, v2.get());
630
631 // single value in start, duplicate value in mid, duplicate value in end
632 final GeneralClipInterpolatorShim gci6 = new GeneralClipInterpolatorShim (new KeyFrame[] {start1, mid2, end2}, new long[] {0, 6000, 12000});
633 v1.set(0);
634 v2.set(0);
635 gci6.validate(true);
636 gci6.interpolate(TickCalculation.fromMillis(0));
637 assertEquals(30, v1.get());
638 assertEquals(0, v2.get());
639 gci6.interpolate(TickCalculation.fromMillis(300));
640 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()));
641 assertEquals(30, v2.get());
642 gci6.interpolate(TickCalculation.fromMillis(1000));
643 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
644 assertEquals(100, v2.get());
645 gci6.interpolate(TickCalculation.fromMillis(1600));
646 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
647 assertEquals(40, v2.get());
648 gci6.interpolate(TickCalculation.fromMillis(2000));
649 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
650 assertEquals(0, v2.get());
651
652 // duplicate value in start, duplicate value in mid, duplicate value in end
653 final GeneralClipInterpolatorShim gci7 = new GeneralClipInterpolatorShim (new KeyFrame[] {start2, mid2, end2}, new long[] {0, 6000, 12000});
654 v1.set(0);
655 v2.set(0);
656 gci7.validate(true);
657 gci7.interpolate(TickCalculation.fromMillis(0));
658 assertTrue("v1.get(): " + v1.get(), (30 == v1.get()) || (-30 == v1.get()));
659 assertEquals(0, v2.get());
660 gci7.interpolate(TickCalculation.fromMillis(300));
661 assertTrue("v1.get(): " + v1.get(), (33 == v1.get()) || (9 == v1.get()) || (-9 == v1.get()) || (-33 == v1.get()));
662 assertEquals(30, v2.get());
663 gci7.interpolate(TickCalculation.fromMillis(1000));
664 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
665 assertEquals(100, v2.get());
666 gci7.interpolate(TickCalculation.fromMillis(1600));
667 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
668 assertEquals(40, v2.get());
669 gci7.interpolate(TickCalculation.fromMillis(2000));
670 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
671 assertEquals(0, v2.get());
672
673 // no value in start, single value in mid, duplicate value in end
674 final GeneralClipInterpolatorShim gci8 = new GeneralClipInterpolatorShim (new KeyFrame[] {mid1, end2}, new long[] {6000, 12000});
675 v1.set(0);
676 v2.set(0);
677 gci8.validate(true);
678 gci8.interpolate(TickCalculation.fromMillis(0));
679 assertEquals(0, v1.get());
680 assertEquals(0, v2.get());
681 gci8.interpolate(TickCalculation.fromMillis(400));
682 assertEquals(16, v1.get());
683 assertEquals(40, v2.get());
684 gci8.interpolate(TickCalculation.fromMillis(1000));
685 assertEquals(40, v1.get());
686 assertEquals(100, v2.get());
687 gci8.interpolate(TickCalculation.fromMillis(1600));
688 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()));
689 assertEquals(40, v2.get());
690 gci8.interpolate(TickCalculation.fromMillis(2000));
691 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
692 assertEquals(0, v2.get());
693
694 // no value in start, duplicate value in mid, single value in end
695 final GeneralClipInterpolatorShim gci9 = new GeneralClipInterpolatorShim (new KeyFrame[] {mid2, end1}, new long[] {6000, 12000});
696 v1.set(0);
697 v2.set(0);
698 gci9.validate(true);
699 gci9.interpolate(TickCalculation.fromMillis(0));
700 assertEquals(0, v1.get());
701 assertEquals(0, v2.get());
702 gci9.interpolate(TickCalculation.fromMillis(400));
703 assertTrue("v1.get(): " + v1.get(), (16 == v1.get()) || (-16 == v1.get()));
704 assertEquals(40, v2.get());
705 gci9.interpolate(TickCalculation.fromMillis(1000));
706 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
707 assertEquals(100, v2.get());
708 gci9.interpolate(TickCalculation.fromMillis(1600));
709 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (20 == v1.get()));
710 assertEquals(40, v2.get());
711 gci9.interpolate(TickCalculation.fromMillis(2000));
712 assertEquals(60, v1.get());
713 assertEquals(0, v2.get());
714
715 // no value in start, duplicate value in mid, duplicate value in end
716 final GeneralClipInterpolatorShim gci10 = new GeneralClipInterpolatorShim (new KeyFrame[] {mid2, end2}, new long[] {6000, 12000});
717 v1.set(0);
718 v2.set(0);
719 gci10.validate(true);
720 gci10.interpolate(TickCalculation.fromMillis(0));
721 assertEquals(0, v1.get());
722 assertEquals(0, v2.get());
723 gci10.interpolate(TickCalculation.fromMillis(400));
724 assertTrue("v1.get(): " + v1.get(), (16 == v1.get()) || (-16 == v1.get()));
725 assertEquals(40, v2.get());
726 gci10.interpolate(TickCalculation.fromMillis(1000));
727 assertTrue("v1.get(): " + v1.get(), (40 == v1.get()) || (-40 == v1.get()));
728 assertEquals(100, v2.get());
729 gci10.interpolate(TickCalculation.fromMillis(1600));
730 assertTrue("v1.get(): " + v1.get(), (52 == v1.get()) || (-20 == v1.get()) || (20 == v1.get()) || (-52 == v1.get()));
731 assertEquals(40, v2.get());
732 gci10.interpolate(TickCalculation.fromMillis(2000));
733 assertTrue("v1.get(): " + v1.get(), (60 == v1.get()) || (-60 == v1.get()));
734 assertEquals(0, v2.get());
735 }
736 }
|