Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: Source/core/animation/KeyframeEffectModelTest.cpp

Issue 143573004: [wip] interpolable value refactor. NOT FOR LANDING. Base URL: https://chromium.googlesource.com/chromium/blink.git@interpolationWrap
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 KeyframeEffectModel::KeyframeVector keyframes(2); 55 KeyframeEffectModel::KeyframeVector keyframes(2);
56 keyframes[0] = Keyframe::create(); 56 keyframes[0] = Keyframe::create();
57 keyframes[0]->setOffset(0.0); 57 keyframes[0]->setOffset(0.0);
58 keyframes[0]->setPropertyValue(CSSPropertyLeft, zeroValue); 58 keyframes[0]->setPropertyValue(CSSPropertyLeft, zeroValue);
59 keyframes[1] = Keyframe::create(); 59 keyframes[1] = Keyframe::create();
60 keyframes[1]->setOffset(1.0); 60 keyframes[1]->setOffset(1.0);
61 keyframes[1]->setPropertyValue(CSSPropertyLeft, oneValue); 61 keyframes[1]->setPropertyValue(CSSPropertyLeft, oneValue);
62 return keyframes; 62 return keyframes;
63 } 63 }
64 64
65 void expectDoubleValue(double expectedValue, PassRefPtr<AnimatableValue> value) 65 void expectProperty(CSSPropertyID property, PassRefPtr<Interpolation> interpolat ionValue)
66 { 66 {
67 LegacyStyleInterpolation *interpolation = static_cast<LegacyStyleInterpolati on *>(interpolationValue.get());
68 ASSERT_EQ(property, interpolation->id());
69 }
70
71 void expectDoubleValue(double expectedValue, PassRefPtr<Interpolation> interpola tionValue)
72 {
73 LegacyStyleInterpolation *interpolation = static_cast<LegacyStyleInterpolati on *>(interpolationValue.get());
74 RefPtr<AnimatableValue> value = interpolation->currentValue();
75
67 ASSERT_TRUE(value->isLength() || value->isUnknown()); 76 ASSERT_TRUE(value->isLength() || value->isUnknown());
68 77
69 double actualValue; 78 double actualValue;
70 if (value->isLength()) 79 if (value->isLength())
71 actualValue = toCSSPrimitiveValue(toAnimatableLength(value.get())->toCSS Value().get())->getDoubleValue(); 80 actualValue = toCSSPrimitiveValue(toAnimatableLength(value.get())->toCSS Value().get())->getDoubleValue();
72 else 81 else
73 actualValue = toCSSPrimitiveValue(toAnimatableUnknown(value.get())->toCS SValue().get())->getDoubleValue(); 82 actualValue = toCSSPrimitiveValue(toAnimatableUnknown(value.get())->toCS SValue().get())->getDoubleValue();
74 83
75 EXPECT_FLOAT_EQ(static_cast<float>(expectedValue), actualValue); 84 EXPECT_FLOAT_EQ(static_cast<float>(expectedValue), actualValue);
76 } 85 }
77 86
78 const AnimationEffect::CompositableValue* findValue(const AnimationEffect::Compo sitableValueList& values, CSSPropertyID id) 87 Interpolation* findValue(Vector<RefPtr<Interpolation> >& values, CSSPropertyID i d)
79 { 88 {
80 for (size_t i = 0; i < values.size(); ++i) { 89 for (size_t i = 0; i < values.size(); ++i) {
81 const std::pair<CSSPropertyID, RefPtr<AnimationEffect::CompositableValue > >& value = values.at(i); 90 LegacyStyleInterpolation *value = static_cast<LegacyStyleInterpolation * >(values.at(i).get());
82 if (value.first == id) 91 if (value->id() == id)
83 return value.second.get(); 92 return value;
84 } 93 }
85 return 0; 94 return 0;
86 } 95 }
87 96
88 97
89 TEST(AnimationKeyframeEffectModel, BasicOperation) 98 TEST(AnimationKeyframeEffectModel, BasicOperation)
90 { 99 {
91 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0)); 100 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0));
92 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 101 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
93 OwnPtr<AnimationEffect::CompositableValueList> values = effect->sample(0, 0. 6); 102 OwnPtr<Vector<RefPtr<Interpolation> > > values = effect->sample(0, 0.6);
94 ASSERT_EQ(1UL, values->size()); 103 ASSERT_EQ(1UL, values->size());
95 EXPECT_EQ(CSSPropertyLeft, values->at(0).first); 104 expectProperty(CSSPropertyLeft, values->at(0));
96 expectDoubleValue(5.0, values->at(0).second->compositeOnto(unknownAnimatable Value(7.0))); 105 expectDoubleValue(5.0, values->at(0));
97 } 106 }
98 107
99 TEST(AnimationKeyframeEffectModel, CompositeReplaceNonInterpolable) 108 TEST(AnimationKeyframeEffectModel, CompositeReplaceNonInterpolable)
100 { 109 {
101 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0)); 110 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0));
102 keyframes[0]->setComposite(AnimationEffect::CompositeReplace); 111 keyframes[0]->setComposite(AnimationEffect::CompositeReplace);
103 keyframes[1]->setComposite(AnimationEffect::CompositeReplace); 112 keyframes[1]->setComposite(AnimationEffect::CompositeReplace);
104 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 113 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
105 expectDoubleValue(5.0, effect->sample(0, 0.6)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 114 expectDoubleValue(5.0, effect->sample(0, 0.6)->at(0));
106 } 115 }
107 116
108 TEST(AnimationKeyframeEffectModel, CompositeReplace) 117 TEST(AnimationKeyframeEffectModel, CompositeReplace)
109 { 118 {
110 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0)); 119 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0));
111 keyframes[0]->setComposite(AnimationEffect::CompositeReplace); 120 keyframes[0]->setComposite(AnimationEffect::CompositeReplace);
112 keyframes[1]->setComposite(AnimationEffect::CompositeReplace); 121 keyframes[1]->setComposite(AnimationEffect::CompositeReplace);
113 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 122 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
114 expectDoubleValue(3.0 * 0.4 + 5.0 * 0.6, effect->sample(0, 0.6)->at(0).secon d->compositeOnto(unknownAnimatableValue(7.0))); 123 expectDoubleValue(3.0 * 0.4 + 5.0 * 0.6, effect->sample(0, 0.6)->at(0));
115 } 124 }
116 125
117 TEST(AnimationKeyframeEffectModel, CompositeAdd) 126 TEST(AnimationKeyframeEffectModel, CompositeAdd)
118 { 127 {
119 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0)); 128 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0));
120 keyframes[0]->setComposite(AnimationEffect::CompositeAdd); 129 keyframes[0]->setComposite(AnimationEffect::CompositeAdd);
121 keyframes[1]->setComposite(AnimationEffect::CompositeAdd); 130 keyframes[1]->setComposite(AnimationEffect::CompositeAdd);
122 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 131 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
123 expectDoubleValue((7.0 + 3.0) * 0.4 + (7.0 + 5.0) * 0.6, effect->sample(0, 0 .6)->at(0).second->compositeOnto(pixelAnimatableValue(7.0))); 132 expectDoubleValue((7.0 + 3.0) * 0.4 + (7.0 + 5.0) * 0.6, effect->sample(0, 0 .6)->at(0));
124 } 133 }
125 134
126 TEST(AnimationKeyframeEffectModel, ExtrapolateReplaceNonInterpolable) 135 TEST(AnimationKeyframeEffectModel, ExtrapolateReplaceNonInterpolable)
127 { 136 {
128 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0)); 137 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(unknow nAnimatableValue(3.0), unknownAnimatableValue(5.0));
129 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 138 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
130 keyframes[0]->setComposite(AnimationEffect::CompositeReplace); 139 keyframes[0]->setComposite(AnimationEffect::CompositeReplace);
131 keyframes[1]->setComposite(AnimationEffect::CompositeReplace); 140 keyframes[1]->setComposite(AnimationEffect::CompositeReplace);
132 expectDoubleValue(5.0, effect->sample(0, 1.6)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 141 expectDoubleValue(5.0, effect->sample(0, 1.6)->at(0));
133 } 142 }
134 143
135 TEST(AnimationKeyframeEffectModel, ExtrapolateReplace) 144 TEST(AnimationKeyframeEffectModel, ExtrapolateReplace)
136 { 145 {
137 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0)); 146 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0));
138 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 147 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
139 keyframes[0]->setComposite(AnimationEffect::CompositeReplace); 148 keyframes[0]->setComposite(AnimationEffect::CompositeReplace);
140 keyframes[1]->setComposite(AnimationEffect::CompositeReplace); 149 keyframes[1]->setComposite(AnimationEffect::CompositeReplace);
141 expectDoubleValue(3.0 * -0.6 + 5.0 * 1.6, effect->sample(0, 1.6)->at(0).seco nd->compositeOnto(pixelAnimatableValue(7.0))); 150 expectDoubleValue(3.0 * -0.6 + 5.0 * 1.6, effect->sample(0, 1.6)->at(0));
142 } 151 }
143 152
144 TEST(AnimationKeyframeEffectModel, ExtrapolateAdd) 153 TEST(AnimationKeyframeEffectModel, ExtrapolateAdd)
145 { 154 {
146 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0)); 155 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0));
147 keyframes[0]->setComposite(AnimationEffect::CompositeAdd); 156 keyframes[0]->setComposite(AnimationEffect::CompositeAdd);
148 keyframes[1]->setComposite(AnimationEffect::CompositeAdd); 157 keyframes[1]->setComposite(AnimationEffect::CompositeAdd);
149 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 158 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
150 expectDoubleValue((7.0 + 3.0) * -0.6 + (7.0 + 5.0) * 1.6, effect->sample(0, 1.6)->at(0).second->compositeOnto(pixelAnimatableValue(7.0))); 159 expectDoubleValue((7.0 + 3.0) * -0.6 + (7.0 + 5.0) * 1.6, effect->sample(0, 1.6)->at(0));
151 } 160 }
152 161
153 TEST(AnimationKeyframeEffectModel, ZeroKeyframes) 162 TEST(AnimationKeyframeEffectModel, ZeroKeyframes)
154 { 163 {
155 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(KeyframeEff ectModel::KeyframeVector()); 164 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(KeyframeEff ectModel::KeyframeVector());
156 EXPECT_TRUE(effect->sample(0, 0.5)->isEmpty()); 165 EXPECT_TRUE(effect->sample(0, 0.5)->isEmpty());
157 } 166 }
158 167
159 TEST(AnimationKeyframeEffectModel, SingleKeyframeAtOffsetZero) 168 TEST(AnimationKeyframeEffectModel, SingleKeyframeAtOffsetZero)
160 { 169 {
161 KeyframeEffectModel::KeyframeVector keyframes(1); 170 KeyframeEffectModel::KeyframeVector keyframes(1);
162 keyframes[0] = Keyframe::create(); 171 keyframes[0] = Keyframe::create();
163 keyframes[0]->setOffset(0.0); 172 keyframes[0]->setOffset(0.0);
164 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 173 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
165 174
166 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 175 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
167 expectDoubleValue(3.0, effect->sample(0, 0.6)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 176 expectDoubleValue(3.0, effect->sample(0, 0.6)->at(0));
168 } 177 }
169 178
170 TEST(AnimationKeyframeEffectModel, SingleKeyframeAtOffsetOne) 179 TEST(AnimationKeyframeEffectModel, SingleKeyframeAtOffsetOne)
171 { 180 {
172 KeyframeEffectModel::KeyframeVector keyframes(1); 181 KeyframeEffectModel::KeyframeVector keyframes(1);
173 keyframes[0] = Keyframe::create(); 182 keyframes[0] = Keyframe::create();
174 keyframes[0]->setOffset(1.0); 183 keyframes[0]->setOffset(1.0);
175 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(5.0)); 184 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(5.0));
176 185
177 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 186 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
178 expectDoubleValue(7.0 * 0.4 + 5.0 * 0.6, effect->sample(0, 0.6)->at(0).secon d->compositeOnto(pixelAnimatableValue(7.0))); 187 expectDoubleValue(7.0 * 0.4 + 5.0 * 0.6, effect->sample(0, 0.6)->at(0));
179 } 188 }
180 189
181 TEST(AnimationKeyframeEffectModel, MoreThanTwoKeyframes) 190 TEST(AnimationKeyframeEffectModel, MoreThanTwoKeyframes)
182 { 191 {
183 KeyframeEffectModel::KeyframeVector keyframes(3); 192 KeyframeEffectModel::KeyframeVector keyframes(3);
184 keyframes[0] = Keyframe::create(); 193 keyframes[0] = Keyframe::create();
185 keyframes[0]->setOffset(0.0); 194 keyframes[0]->setOffset(0.0);
186 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 195 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
187 keyframes[1] = Keyframe::create(); 196 keyframes[1] = Keyframe::create();
188 keyframes[1]->setOffset(0.5); 197 keyframes[1]->setOffset(0.5);
189 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ; 198 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ;
190 keyframes[2] = Keyframe::create(); 199 keyframes[2] = Keyframe::create();
191 keyframes[2]->setOffset(1.0); 200 keyframes[2]->setOffset(1.0);
192 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ; 201 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ;
193 202
194 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 203 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
195 expectDoubleValue(4.0, effect->sample(0, 0.3)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 204 expectDoubleValue(4.0, effect->sample(0, 0.3)->at(0));
196 expectDoubleValue(5.0, effect->sample(0, 0.8)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 205 expectDoubleValue(5.0, effect->sample(0, 0.8)->at(0));
197 } 206 }
198 207
199 TEST(AnimationKeyframeEffectModel, EndKeyframeOffsetsUnspecified) 208 TEST(AnimationKeyframeEffectModel, EndKeyframeOffsetsUnspecified)
200 { 209 {
201 KeyframeEffectModel::KeyframeVector keyframes(3); 210 KeyframeEffectModel::KeyframeVector keyframes(3);
202 keyframes[0] = Keyframe::create(); 211 keyframes[0] = Keyframe::create();
203 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 212 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
204 keyframes[1] = Keyframe::create(); 213 keyframes[1] = Keyframe::create();
205 keyframes[1]->setOffset(0.5); 214 keyframes[1]->setOffset(0.5);
206 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ; 215 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ;
207 keyframes[2] = Keyframe::create(); 216 keyframes[2] = Keyframe::create();
208 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ; 217 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ;
209 218
210 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 219 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
211 expectDoubleValue(3.0, effect->sample(0, 0.1)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 220 expectDoubleValue(3.0, effect->sample(0, 0.1)->at(0));
212 expectDoubleValue(4.0, effect->sample(0, 0.6)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 221 expectDoubleValue(4.0, effect->sample(0, 0.6)->at(0));
213 expectDoubleValue(5.0, effect->sample(0, 0.9)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 222 expectDoubleValue(5.0, effect->sample(0, 0.9)->at(0));
214 } 223 }
215 224
216 TEST(AnimationKeyframeEffectModel, SampleOnKeyframe) 225 TEST(AnimationKeyframeEffectModel, SampleOnKeyframe)
217 { 226 {
218 KeyframeEffectModel::KeyframeVector keyframes(3); 227 KeyframeEffectModel::KeyframeVector keyframes(3);
219 keyframes[0] = Keyframe::create(); 228 keyframes[0] = Keyframe::create();
220 keyframes[0]->setOffset(0.0); 229 keyframes[0]->setOffset(0.0);
221 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 230 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
222 keyframes[1] = Keyframe::create(); 231 keyframes[1] = Keyframe::create();
223 keyframes[1]->setOffset(0.5); 232 keyframes[1]->setOffset(0.5);
224 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ; 233 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ;
225 keyframes[2] = Keyframe::create(); 234 keyframes[2] = Keyframe::create();
226 keyframes[2]->setOffset(1.0); 235 keyframes[2]->setOffset(1.0);
227 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ; 236 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ;
228 237
229 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 238 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
230 expectDoubleValue(3.0, effect->sample(0, 0.0)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 239 expectDoubleValue(3.0, effect->sample(0, 0.0)->at(0));
231 expectDoubleValue(4.0, effect->sample(0, 0.5)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 240 expectDoubleValue(4.0, effect->sample(0, 0.5)->at(0));
232 expectDoubleValue(5.0, effect->sample(0, 1.0)->at(0).second->compositeOnto(u nknownAnimatableValue(7.0))); 241 expectDoubleValue(5.0, effect->sample(0, 1.0)->at(0));
233 }
234
235 // Note that this tests an implementation detail, not behaviour defined by the s pec.
236 TEST(AnimationKeyframeEffectModel, SampleReturnsSameAnimatableValueInstance)
237 {
238 AnimatableValue* threePixelsValue = unknownAnimatableValue(3.0);
239 AnimatableValue* fourPixelsValue = unknownAnimatableValue(4.0);
240 AnimatableValue* fivePixelsValue = unknownAnimatableValue(5.0);
241
242 KeyframeEffectModel::KeyframeVector keyframes(3);
243 keyframes[0] = Keyframe::create();
244 keyframes[0]->setOffset(0.0);
245 keyframes[0]->setPropertyValue(CSSPropertyLeft, threePixelsValue);
246 keyframes[1] = Keyframe::create();
247 keyframes[1]->setOffset(0.5);
248 keyframes[1]->setPropertyValue(CSSPropertyLeft, fourPixelsValue);
249 keyframes[2] = Keyframe::create();
250 keyframes[2]->setOffset(1.0);
251 keyframes[2]->setPropertyValue(CSSPropertyLeft, fivePixelsValue);
252
253 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
254 EXPECT_EQ(threePixelsValue, effect->sample(0, 0.0)->at(0).second->compositeO nto(unknownAnimatableValue(7.0)));
255 EXPECT_EQ(threePixelsValue, effect->sample(0, 0.1)->at(0).second->compositeO nto(unknownAnimatableValue(7.0)));
256 EXPECT_EQ(fourPixelsValue, effect->sample(0, 0.4)->at(0).second->compositeOn to(unknownAnimatableValue(7.0)));
257 EXPECT_EQ(fourPixelsValue, effect->sample(0, 0.5)->at(0).second->compositeOn to(unknownAnimatableValue(7.0)));
258 EXPECT_EQ(fourPixelsValue, effect->sample(0, 0.6)->at(0).second->compositeOn to(unknownAnimatableValue(7.0)));
259 EXPECT_EQ(fivePixelsValue, effect->sample(0, 0.9)->at(0).second->compositeOn to(unknownAnimatableValue(7.0)));
260 EXPECT_EQ(fivePixelsValue, effect->sample(0, 1.0)->at(0).second->compositeOn to(unknownAnimatableValue(7.0)));
261 } 242 }
262 243
263 TEST(AnimationKeyframeEffectModel, MultipleKeyframesWithSameOffset) 244 TEST(AnimationKeyframeEffectModel, MultipleKeyframesWithSameOffset)
264 { 245 {
265 KeyframeEffectModel::KeyframeVector keyframes(7); 246 KeyframeEffectModel::KeyframeVector keyframes(7);
266 keyframes[0] = Keyframe::create(); 247 keyframes[0] = Keyframe::create();
267 keyframes[0]->setOffset(0.1); 248 keyframes[0]->setOffset(0.1);
268 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(1.0)) ; 249 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(1.0)) ;
269 keyframes[1] = Keyframe::create(); 250 keyframes[1] = Keyframe::create();
270 keyframes[1]->setOffset(0.1); 251 keyframes[1]->setOffset(0.1);
271 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(2.0)) ; 252 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(2.0)) ;
272 keyframes[2] = Keyframe::create(); 253 keyframes[2] = Keyframe::create();
273 keyframes[2]->setOffset(0.5); 254 keyframes[2]->setOffset(0.5);
274 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 255 keyframes[2]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
275 keyframes[3] = Keyframe::create(); 256 keyframes[3] = Keyframe::create();
276 keyframes[3]->setOffset(0.5); 257 keyframes[3]->setOffset(0.5);
277 keyframes[3]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ; 258 keyframes[3]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(4.0)) ;
278 keyframes[4] = Keyframe::create(); 259 keyframes[4] = Keyframe::create();
279 keyframes[4]->setOffset(0.5); 260 keyframes[4]->setOffset(0.5);
280 keyframes[4]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ; 261 keyframes[4]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ;
281 keyframes[5] = Keyframe::create(); 262 keyframes[5] = Keyframe::create();
282 keyframes[5]->setOffset(0.9); 263 keyframes[5]->setOffset(0.9);
283 keyframes[5]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(6.0)) ; 264 keyframes[5]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(6.0)) ;
284 keyframes[6] = Keyframe::create(); 265 keyframes[6] = Keyframe::create();
285 keyframes[6]->setOffset(0.9); 266 keyframes[6]->setOffset(0.9);
286 keyframes[6]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(7.0)) ; 267 keyframes[6]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(7.0)) ;
287 268
288 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 269 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
289 expectDoubleValue(2.0, effect->sample(0, 0.0)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 270 expectDoubleValue(2.0, effect->sample(0, 0.0)->at(0));
290 expectDoubleValue(2.0, effect->sample(0, 0.2)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 271 expectDoubleValue(2.0, effect->sample(0, 0.2)->at(0));
291 expectDoubleValue(3.0, effect->sample(0, 0.4)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 272 expectDoubleValue(3.0, effect->sample(0, 0.4)->at(0));
292 expectDoubleValue(5.0, effect->sample(0, 0.5)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 273 expectDoubleValue(5.0, effect->sample(0, 0.5)->at(0));
293 expectDoubleValue(5.0, effect->sample(0, 0.6)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 274 expectDoubleValue(5.0, effect->sample(0, 0.6)->at(0));
294 expectDoubleValue(6.0, effect->sample(0, 0.8)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 275 expectDoubleValue(6.0, effect->sample(0, 0.8)->at(0));
295 expectDoubleValue(6.0, effect->sample(0, 1.0)->at(0).second->compositeOnto(u nknownAnimatableValue(8.0))); 276 expectDoubleValue(6.0, effect->sample(0, 1.0)->at(0));
296 } 277 }
297 278
298 TEST(AnimationKeyframeEffectModel, PerKeyframeComposite) 279 TEST(AnimationKeyframeEffectModel, PerKeyframeComposite)
299 { 280 {
300 KeyframeEffectModel::KeyframeVector keyframes(2); 281 KeyframeEffectModel::KeyframeVector keyframes(2);
301 keyframes[0] = Keyframe::create(); 282 keyframes[0] = Keyframe::create();
302 keyframes[0]->setOffset(0.0); 283 keyframes[0]->setOffset(0.0);
303 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(3.0)); 284 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(3.0));
304 keyframes[1] = Keyframe::create(); 285 keyframes[1] = Keyframe::create();
305 keyframes[1]->setOffset(1.0); 286 keyframes[1]->setOffset(1.0);
306 keyframes[1]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(5.0)); 287 keyframes[1]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(5.0));
307 keyframes[1]->setComposite(AnimationEffect::CompositeAdd); 288 keyframes[1]->setComposite(AnimationEffect::CompositeAdd);
308 289
309 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 290 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
310 expectDoubleValue(3.0 * 0.4 + (7.0 + 5.0) * 0.6, effect->sample(0, 0.6)->at( 0).second->compositeOnto(pixelAnimatableValue(7.0))); 291 expectDoubleValue(3.0 * 0.4 + (7.0 + 5.0) * 0.6, effect->sample(0, 0.6)->at( 0));
311 } 292 }
312 293
313 TEST(AnimationKeyframeEffectModel, MultipleProperties) 294 TEST(AnimationKeyframeEffectModel, MultipleProperties)
314 { 295 {
315 KeyframeEffectModel::KeyframeVector keyframes(2); 296 KeyframeEffectModel::KeyframeVector keyframes(2);
316 keyframes[0] = Keyframe::create(); 297 keyframes[0] = Keyframe::create();
317 keyframes[0]->setOffset(0.0); 298 keyframes[0]->setOffset(0.0);
318 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ; 299 keyframes[0]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(3.0)) ;
319 keyframes[0]->setPropertyValue(CSSPropertyRight, unknownAnimatableValue(4.0) ); 300 keyframes[0]->setPropertyValue(CSSPropertyRight, unknownAnimatableValue(4.0) );
320 keyframes[1] = Keyframe::create(); 301 keyframes[1] = Keyframe::create();
321 keyframes[1]->setOffset(1.0); 302 keyframes[1]->setOffset(1.0);
322 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ; 303 keyframes[1]->setPropertyValue(CSSPropertyLeft, unknownAnimatableValue(5.0)) ;
323 keyframes[1]->setPropertyValue(CSSPropertyRight, unknownAnimatableValue(6.0) ); 304 keyframes[1]->setPropertyValue(CSSPropertyRight, unknownAnimatableValue(6.0) );
324 305
325 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 306 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
326 OwnPtr<AnimationEffect::CompositableValueList> values = effect->sample(0, 0. 6); 307 OwnPtr<Vector<RefPtr<Interpolation> > > values = effect->sample(0, 0.6);
327 EXPECT_EQ(2UL, values->size()); 308 EXPECT_EQ(2UL, values->size());
328 const AnimationEffect::CompositableValue* leftValue = findValue(*values.get( ), CSSPropertyLeft); 309 Interpolation* leftValue = findValue(*values.get(), CSSPropertyLeft);
329 ASSERT_TRUE(leftValue); 310 ASSERT_TRUE(leftValue);
330 expectDoubleValue(5.0, leftValue->compositeOnto(unknownAnimatableValue(7.0)) ); 311 expectDoubleValue(5.0, leftValue);
331 const AnimationEffect::CompositableValue* rightValue = findValue(*values.get (), CSSPropertyRight); 312 Interpolation* rightValue = findValue(*values.get(), CSSPropertyRight);
332 ASSERT_TRUE(rightValue); 313 ASSERT_TRUE(rightValue);
333 expectDoubleValue(6.0, rightValue->compositeOnto(unknownAnimatableValue(7.0) )); 314 expectDoubleValue(6.0, rightValue);
334 } 315 }
335 316
336 TEST(AnimationKeyframeEffectModel, RecompositeCompositableValue) 317 TEST(AnimationKeyframeEffectModel, RecompositeCompositableValue)
337 { 318 {
338 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0)); 319 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(3.0), pixelAnimatableValue(5.0));
339 keyframes[0]->setComposite(AnimationEffect::CompositeAdd); 320 keyframes[0]->setComposite(AnimationEffect::CompositeAdd);
340 keyframes[1]->setComposite(AnimationEffect::CompositeAdd); 321 keyframes[1]->setComposite(AnimationEffect::CompositeAdd);
341 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 322 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
342 OwnPtr<AnimationEffect::CompositableValueList> values = effect->sample(0, 0. 6); 323 OwnPtr<Vector<RefPtr<Interpolation> > > values = effect->sample(0, 0.6);
343 expectDoubleValue((7.0 + 3.0) * 0.4 + (7.0 + 5.0) * 0.6, values->at(0).secon d->compositeOnto(pixelAnimatableValue(7.0))); 324 expectDoubleValue((7.0 + 3.0) * 0.4 + (7.0 + 5.0) * 0.6, values->at(0));
344 expectDoubleValue((9.0 + 3.0) * 0.4 + (9.0 + 5.0) * 0.6, values->at(0).secon d->compositeOnto(pixelAnimatableValue(9.0))); 325 expectDoubleValue((9.0 + 3.0) * 0.4 + (9.0 + 5.0) * 0.6, values->at(0));
345 } 326 }
346 327
347 TEST(AnimationKeyframeEffectModel, MultipleIterations) 328 TEST(AnimationKeyframeEffectModel, MultipleIterations)
348 { 329 {
349 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(1.0), pixelAnimatableValue(3.0)); 330 KeyframeEffectModel::KeyframeVector keyframes = keyframesAtZeroAndOne(pixelA nimatableValue(1.0), pixelAnimatableValue(3.0));
350 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 331 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
351 expectDoubleValue(2.0, effect->sample(0, 0.5)->at(0).second->compositeOnto(u nknownAnimatableValue(0.0))); 332 expectDoubleValue(2.0, effect->sample(0, 0.5)->at(0));
352 expectDoubleValue(2.0, effect->sample(1, 0.5)->at(0).second->compositeOnto(u nknownAnimatableValue(0.0))); 333 expectDoubleValue(2.0, effect->sample(1, 0.5)->at(0));
353 expectDoubleValue(2.0, effect->sample(2, 0.5)->at(0).second->compositeOnto(u nknownAnimatableValue(0.0))); 334 expectDoubleValue(2.0, effect->sample(2, 0.5)->at(0));
354 } 335 }
355 336
356 TEST(AnimationKeyframeEffectModel, DependsOnUnderlyingValue) 337 TEST(AnimationKeyframeEffectModel, DependsOnUnderlyingValue)
357 { 338 {
358 KeyframeEffectModel::KeyframeVector keyframes(3); 339 KeyframeEffectModel::KeyframeVector keyframes(3);
359 keyframes[0] = Keyframe::create(); 340 keyframes[0] = Keyframe::create();
360 keyframes[0]->setOffset(0.0); 341 keyframes[0]->setOffset(0.0);
361 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0)); 342 keyframes[0]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0));
362 keyframes[0]->setComposite(AnimationEffect::CompositeAdd); 343 keyframes[0]->setComposite(AnimationEffect::CompositeAdd);
363 keyframes[1] = Keyframe::create(); 344 keyframes[1] = Keyframe::create();
364 keyframes[1]->setOffset(0.5); 345 keyframes[1]->setOffset(0.5);
365 keyframes[1]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0)); 346 keyframes[1]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0));
366 keyframes[2] = Keyframe::create(); 347 keyframes[2] = Keyframe::create();
367 keyframes[2]->setOffset(1.0); 348 keyframes[2]->setOffset(1.0);
368 keyframes[2]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0)); 349 keyframes[2]->setPropertyValue(CSSPropertyLeft, pixelAnimatableValue(1.0));
369 350
370 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 351 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
371 EXPECT_TRUE(effect->sample(0, 0)->at(0).second->dependsOnUnderlyingValue()); 352 EXPECT_TRUE(effect->sample(0, 0)->at(0));
372 EXPECT_TRUE(effect->sample(0, 0.1)->at(0).second->dependsOnUnderlyingValue() ); 353 EXPECT_TRUE(effect->sample(0, 0.1)->at(0));
373 EXPECT_TRUE(effect->sample(0, 0.25)->at(0).second->dependsOnUnderlyingValue( )); 354 EXPECT_TRUE(effect->sample(0, 0.25)->at(0));
374 EXPECT_TRUE(effect->sample(0, 0.4)->at(0).second->dependsOnUnderlyingValue() ); 355 EXPECT_TRUE(effect->sample(0, 0.4)->at(0));
375 EXPECT_FALSE(effect->sample(0, 0.5)->at(0).second->dependsOnUnderlyingValue( )); 356 EXPECT_FALSE(effect->sample(0, 0.5)->at(0));
376 EXPECT_FALSE(effect->sample(0, 0.6)->at(0).second->dependsOnUnderlyingValue( )); 357 EXPECT_FALSE(effect->sample(0, 0.6)->at(0));
377 EXPECT_FALSE(effect->sample(0, 0.75)->at(0).second->dependsOnUnderlyingValue ()); 358 EXPECT_FALSE(effect->sample(0, 0.75)->at(0));
378 EXPECT_FALSE(effect->sample(0, 0.8)->at(0).second->dependsOnUnderlyingValue( )); 359 EXPECT_FALSE(effect->sample(0, 0.8)->at(0));
379 EXPECT_FALSE(effect->sample(0, 1)->at(0).second->dependsOnUnderlyingValue()) ; 360 EXPECT_FALSE(effect->sample(0, 1)->at(0));
380 } 361 }
381 362
382 TEST(AnimationKeyframeEffectModel, ToKeyframeEffectModel) 363 TEST(AnimationKeyframeEffectModel, ToKeyframeEffectModel)
383 { 364 {
384 KeyframeEffectModel::KeyframeVector keyframes(0); 365 KeyframeEffectModel::KeyframeVector keyframes(0);
385 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes); 366 RefPtr<KeyframeEffectModel> effect = KeyframeEffectModel::create(keyframes);
386 367
387 AnimationEffect* baseEffect = effect.get(); 368 AnimationEffect* baseEffect = effect.get();
388 EXPECT_TRUE(toKeyframeEffectModel(baseEffect)); 369 EXPECT_TRUE(toKeyframeEffectModel(baseEffect));
389 } 370 }
390 371
391 } // namespace 372 } // namespace
OLDNEW
« no previous file with comments | « Source/core/animation/KeyframeEffectModel.cpp ('k') | Source/core/animation/css/CSSAnimations.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698