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

Side by Side Diff: third_party/WebKit/LayoutTests/animations/interpolation/resources/interpolation-test.js

Issue 2564793002: Add smooth interpolation support for <color> custom properties (Closed)
Patch Set: <color> Created 3 years, 11 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) 2015 Google Inc. All rights reserved. 2 * Copyright (C) 2015 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 target.style.animationName = 'animation' + id; 92 target.style.animationName = 'animation' + id;
93 target.style.animationDuration = '2e10s'; 93 target.style.animationDuration = '2e10s';
94 target.style.animationDelay = '-1e10s'; 94 target.style.animationDelay = '-1e10s';
95 target.style.animationTimingFunction = createEasing(at); 95 target.style.animationTimingFunction = createEasing(at);
96 }, 96 },
97 rebaseline: false, 97 rebaseline: false,
98 }; 98 };
99 99
100 var cssTransitionsInterpolation = { 100 var cssTransitionsInterpolation = {
101 name: 'CSS Transitions', 101 name: 'CSS Transitions',
102 supportsProperty: function() {return true;}, 102 supportsProperty: function() {return true;},
sashab 2017/01/25 02:55:00 These fixes are great, but maybe put in separate p
alancutter (OOO until 2018) 2017/01/25 03:55:13 Done.
103 supportsValue: function() {return true;}, 103 supportsValue: function() {return true;},
104 setup: function(property, from, target) { 104 setup: function(property, from, target) {
105 target.style[property] = isNeutralKeyframe(from) ? '' : from; 105 target.style.setProperty(property, isNeutralKeyframe(from) ? '' : from);
106 }, 106 },
107 nonInterpolationExpectations: function(from, to) { 107 nonInterpolationExpectations: function(from, to) {
108 return expectFlip(from, to, -Infinity); 108 return expectFlip(from, to, -Infinity);
109 }, 109 },
110 interpolate: function(property, from, to, at, target) { 110 interpolate: function(property, from, to, at, target) {
111 target.style.transitionDuration = '2e10s'; 111 target.style.transitionDuration = '2e10s';
112 target.style.transitionDelay = '-1e10s'; 112 target.style.transitionDelay = '-1e10s';
113 target.style.transitionTimingFunction = createEasing(at); 113 target.style.transitionTimingFunction = createEasing(at);
114 target.style.transitionProperty = property; 114 target.style.transitionProperty = property;
115 target.style[property] = isNeutralKeyframe(to) ? '' : to; 115 target.style.setProperty(property, isNeutralKeyframe(to) ? '' : to);
116 }, 116 },
117 rebaseline: false, 117 rebaseline: false,
118 }; 118 };
119 119
120 var webAnimationsInterpolation = { 120 var webAnimationsInterpolation = {
121 name: 'Web Animations', 121 name: 'Web Animations',
122 supportsProperty: function(property) {return property.indexOf('-webkit-') != = 0;}, 122 supportsProperty: function(property) {return property.indexOf('-webkit-') != = 0;},
123 supportsValue: function(value) {return value !== '';}, 123 supportsValue: function(value) {return value !== '';},
124 setup: function() {}, 124 setup: function() {},
125 nonInterpolationExpectations: function(from, to) { 125 nonInterpolationExpectations: function(from, to) {
126 return expectFlip(from, to, 0.5); 126 return expectFlip(from, to, 0.5);
127 }, 127 },
128 interpolate: function(property, from, to, at, target) { 128 interpolate: function(property, from, to, at, target) {
129 this.interpolateComposite(property, from, 'replace', to, 'replace', at, ta rget); 129 this.interpolateComposite(property, from, 'replace', to, 'replace', at, ta rget);
130 }, 130 },
131 interpolateComposite: function(property, from, fromComposite, to, toComposit e, at, target) { 131 interpolateComposite: function(property, from, fromComposite, to, toComposit e, at, target) {
132 // Convert to camelCase 132 // Convert standard properties to camelCase.
133 for (var i = property.length - 2; i > 0; --i) { 133 if (!property.startsWith('--')) {
134 if (property[i] === '-') { 134 for (var i = property.length - 2; i > 0; --i) {
135 property = property.substring(0, i) + property[i + 1].toUpperCase() + property.substring(i + 2); 135 if (property[i] === '-') {
136 property = property.substring(0, i) + property[i + 1].toUpperCase() + property.substring(i + 2);
137 }
136 } 138 }
137 } 139 }
138 var keyframes = []; 140 var keyframes = [];
139 if (!isNeutralKeyframe(from)) { 141 if (!isNeutralKeyframe(from)) {
140 keyframes.push({ 142 keyframes.push({
141 offset: 0, 143 offset: 0,
142 composite: fromComposite, 144 composite: fromComposite,
143 [property]: from, 145 [property]: from,
144 }); 146 });
145 } 147 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 var testText = `${interpolationMethod.name}: property <${property}> from ${k eyframeText(from)} to ${keyframeText(to)}`; 307 var testText = `${interpolationMethod.name}: property <${property}> from ${k eyframeText(from)} to ${keyframeText(to)}`;
306 var testContainer = createElement(interpolationMethodContainer, 'div', testT ext); 308 var testContainer = createElement(interpolationMethodContainer, 'div', testT ext);
307 createElement(testContainer, 'br'); 309 createElement(testContainer, 'br');
308 var expectations = interpolationTest.expectations; 310 var expectations = interpolationTest.expectations;
309 if (expectations === expectNoInterpolation) { 311 if (expectations === expectNoInterpolation) {
310 expectations = interpolationMethod.nonInterpolationExpectations(from, to); 312 expectations = interpolationMethod.nonInterpolationExpectations(from, to);
311 } 313 }
312 return expectations.map(function(expectation) { 314 return expectations.map(function(expectation) {
313 var actualTargetContainer = createTargetContainer(testContainer, 'actual') ; 315 var actualTargetContainer = createTargetContainer(testContainer, 'actual') ;
314 var expectedTargetContainer = createTargetContainer(testContainer, 'expect ed'); 316 var expectedTargetContainer = createTargetContainer(testContainer, 'expect ed');
315 expectedTargetContainer.target.style[property] = expectation.is; 317 expectedTargetContainer.target.style.setProperty(property, expectation.is) ;
316 var target = actualTargetContainer.target; 318 var target = actualTargetContainer.target;
317 interpolationMethod.setup(property, from, target); 319 interpolationMethod.setup(property, from, target);
318 target.interpolate = function() { 320 target.interpolate = function() {
319 interpolationMethod.interpolate(property, from, to, expectation.at, targ et); 321 interpolationMethod.interpolate(property, from, to, expectation.at, targ et);
320 }; 322 };
321 target.measure = function() { 323 target.measure = function() {
322 var actualValue = getComputedStyle(target)[property]; 324 var actualValue = getComputedStyle(target).getPropertyValue(property);
323 test(function() { 325 test(function() {
324 assert_equals( 326 assert_equals(
325 normalizeValue(actualValue), 327 normalizeValue(actualValue),
326 normalizeValue(getComputedStyle(expectedTargetContainer.target)[prop erty])); 328 normalizeValue(getComputedStyle(expectedTargetContainer.target).getP ropertyValue(property)));
327 }, `${testText} at (${expectation.at}) is [${sanitizeUrls(actualValue)}] `); 329 }, `${testText} at (${expectation.at}) is [${sanitizeUrls(actualValue)}] `);
328 if (rebaselineExpectation) { 330 if (rebaselineExpectation) {
329 rebaselineExpectation.textContent += ` {at: ${expectation.at}, is: '$ {actualValue}'},\n`; 331 rebaselineExpectation.textContent += ` {at: ${expectation.at}, is: '$ {actualValue}'},\n`;
330 } 332 }
331 }; 333 };
332 return target; 334 return target;
333 }); 335 });
334 } 336 }
335 337
336 function createCompositionTestTargets(compositionContainer, compositionTest, r ebaselineContainer) { 338 function createCompositionTestTargets(compositionContainer, compositionTest, r ebaselineContainer) {
(...skipping 25 matching lines...) Expand all
362 var rebaselineExpectation; 364 var rebaselineExpectation;
363 rebaseline.appendChild(rebaselineExpectation = document.createTextNode('') ); 365 rebaseline.appendChild(rebaselineExpectation = document.createTextNode('') );
364 rebaseline.appendChild(document.createTextNode(']);\n\n')); 366 rebaseline.appendChild(document.createTextNode(']);\n\n'));
365 } 367 }
366 var testText = `Compositing: property <${property}> underlying [${underlying }] from ${fromComposite} [${from}] to ${toComposite} [${to}]`; 368 var testText = `Compositing: property <${property}> underlying [${underlying }] from ${fromComposite} [${from}] to ${toComposite} [${to}]`;
367 var testContainer = createElement(compositionContainer, 'div', testText); 369 var testContainer = createElement(compositionContainer, 'div', testText);
368 createElement(testContainer, 'br'); 370 createElement(testContainer, 'br');
369 return compositionTest.expectations.map(function(expectation) { 371 return compositionTest.expectations.map(function(expectation) {
370 var actualTargetContainer = createTargetContainer(testContainer, 'actual') ; 372 var actualTargetContainer = createTargetContainer(testContainer, 'actual') ;
371 var expectedTargetContainer = createTargetContainer(testContainer, 'expect ed'); 373 var expectedTargetContainer = createTargetContainer(testContainer, 'expect ed');
372 expectedTargetContainer.target.style[property] = expectation.is; 374 expectedTargetContainer.target.style.setProperty(property, expectation.is) ;
373 var target = actualTargetContainer.target; 375 var target = actualTargetContainer.target;
374 target.style[property] = underlying; 376 target.style.setProperty(property, underlying);
375 target.interpolate = function() { 377 target.interpolate = function() {
376 webAnimationsInterpolation.interpolateComposite(property, from, fromComp osite, to, toComposite, expectation.at, target); 378 webAnimationsInterpolation.interpolateComposite(property, from, fromComp osite, to, toComposite, expectation.at, target);
377 }; 379 };
378 target.measure = function() { 380 target.measure = function() {
379 var actualValue = getComputedStyle(target)[property]; 381 var actualValue = getComputedStyle(target).getPropertyValue(property);
380 test(function() { 382 test(function() {
381 assert_equals( 383 assert_equals(
382 normalizeValue(actualValue), 384 normalizeValue(actualValue),
383 normalizeValue(getComputedStyle(expectedTargetContainer.target)[prop erty])); 385 normalizeValue(getComputedStyle(expectedTargetContainer.target).getP ropertyValue(property)));
384 }, `${testText} at (${expectation.at}) is [${sanitizeUrls(actualValue)}] `); 386 }, `${testText} at (${expectation.at}) is [${sanitizeUrls(actualValue)}] `);
385 if (rebaselineExpectation) { 387 if (rebaselineExpectation) {
386 rebaselineExpectation.textContent += ` {at: ${expectation.at}, is: '$ {actualValue}'},\n`; 388 rebaselineExpectation.textContent += ` {at: ${expectation.at}, is: '$ {actualValue}'},\n`;
387 } 389 }
388 }; 390 };
389 return target; 391 return target;
390 }); 392 });
391 } 393 }
392 394
393 function validateTestInputs(property, from, to, underlying) { 395 function validateTestInputs(property, from, to, underlying) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 asyncHandle.done() 466 asyncHandle.done()
465 }); 467 });
466 }); 468 });
467 469
468 window.assertInterpolation = assertInterpolation; 470 window.assertInterpolation = assertInterpolation;
469 window.assertNoInterpolation = assertNoInterpolation; 471 window.assertNoInterpolation = assertNoInterpolation;
470 window.assertComposition = assertComposition; 472 window.assertComposition = assertComposition;
471 window.afterTest = afterTest; 473 window.afterTest = afterTest;
472 window.neutralKeyframe = neutralKeyframe; 474 window.neutralKeyframe = neutralKeyframe;
473 })(); 475 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698