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

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

Issue 1459093002: Make neutral keyframes explicit in SVG attribute interpolation test API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review changes Created 5 years, 1 month 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
« no previous file with comments | « third_party/WebKit/LayoutTests/animations/svg-attribute-composition/svg-z-composition.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright 2015 The Chromium Authors. All rights reserved. 1 /* Copyright 2015 The Chromium Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be 2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. 3 * found in the LICENSE file.
4 * 4 *
5 * Exported function: 5 * Exported function:
6 * - assertAttributeInterpolation({property, [from], [to], [fromComposite], [to Composite], [underlying]}, [{at: fraction, is: value}]) 6 * - assertAttributeInterpolation({property, from, to, [fromComposite], [toComp osite], [underlying]}, [{at: fraction, is: value}])
7 * Constructs a test case for each fraction that asserts the expected val ue 7 * Constructs a test case for each fraction that asserts the expected val ue
8 * equals the value produced by interpolation between from and to composi ted 8 * equals the value produced by interpolation between from and to composi ted
9 * onto underlying by fromComposite and toComposite respectively using 9 * onto underlying by fromComposite and toComposite respectively using
10 * SMIL and Web Animations. 10 * SMIL and Web Animations.
11 * If from or to are missing then a neutral keyframe will be used and the 11 * Set from/to to the exported neutralKeyframe object to specify neutral keyframes.
12 * composite mode will be forced to be 'add'.
13 * SMIL will only be tested with equal fromComposite and toComposite valu es. 12 * SMIL will only be tested with equal fromComposite and toComposite valu es.
14 */ 13 */
15 'use strict'; 14 'use strict';
16 (() => { 15 (() => {
17 var interpolationTests = []; 16 var interpolationTests = [];
17 var neutralKeyframe = {};
18 18
19 // Set to true to output rebaselined test expectations. 19 // Set to true to output rebaselined test expectations.
20 var rebaselineTests = false; 20 var rebaselineTests = false;
21 21
22 function isNeutralKeyframe(keyframe) {
23 return keyframe === neutralKeyframe;
24 }
25
22 function createElement(tagName, container) { 26 function createElement(tagName, container) {
23 var element = document.createElement(tagName); 27 var element = document.createElement(tagName);
24 if (container) { 28 if (container) {
25 container.appendChild(element); 29 container.appendChild(element);
26 } 30 }
27 return element; 31 return element;
28 } 32 }
29 33
30 // Constructs a timing function which produces 'y' at x = 0.5 34 // Constructs a timing function which produces 'y' at x = 0.5
31 function createEasing(y) { 35 function createEasing(y) {
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 } else { 317 } else {
314 console.warn(`Unable to test SMIL from ${params.from} to ${params.to}` ); 318 console.warn(`Unable to test SMIL from ${params.from} to ${params.to}` );
315 target.container.remove(); 319 target.container.remove();
316 target.measure = function() {}; 320 target.measure = function() {};
317 } 321 }
318 break; 322 break;
319 case 'Web Animations': 323 case 'Web Animations':
320 // Replace 'transform' with 'svgTransform', etc. This avoids collisions with CSS properties or the Web Animations API (offset). 324 // Replace 'transform' with 'svgTransform', etc. This avoids collisions with CSS properties or the Web Animations API (offset).
321 var prefixedProperty = 'svg' + params.property[0].toUpperCase() + params .property.slice(1); 325 var prefixedProperty = 'svg' + params.property[0].toUpperCase() + params .property.slice(1);
322 var keyframes = []; 326 var keyframes = [];
323 if ('from' in params) { 327 if (!isNeutralKeyframe(params.from)) {
324 keyframes.push({ 328 keyframes.push({
325 offset: 0, 329 offset: 0,
326 [prefixedProperty]: params.from, 330 [prefixedProperty]: params.from,
327 composite: params.fromComposite, 331 composite: params.fromComposite,
328 }); 332 });
329 } else {
330 console.assert(params.fromComposite === 'add');
331 } 333 }
332 if ('to' in params) { 334 if (!isNeutralKeyframe(params.to)) {
333 keyframes.push({ 335 keyframes.push({
334 offset: 1, 336 offset: 1,
335 [prefixedProperty]: params.to, 337 [prefixedProperty]: params.to,
336 composite: params.toComposite, 338 composite: params.toComposite,
337 }); 339 });
338 } else {
339 console.assert(params.toComposite === 'add');
340 } 340 }
341 target.animate(keyframes, { 341 target.animate(keyframes, {
342 fill: 'forwards', 342 fill: 'forwards',
343 duration: 1, 343 duration: 1,
344 easing: createEasing(expectation.at), 344 easing: createEasing(expectation.at),
345 delay: -0.5, 345 delay: -0.5,
346 iterations: 0.5, 346 iterations: 0.5,
347 }); 347 });
348 break; 348 break;
349 default: 349 default:
(...skipping 15 matching lines...) Expand all
365 }, `${method}: ${description} at (${expectation.at}) is [${expectation.is} ]`); 365 }, `${method}: ${description} at (${expectation.at}) is [${expectation.is} ]`);
366 }; 366 };
367 367
368 return target; 368 return target;
369 } 369 }
370 370
371 function createTestTargets(interpolationTests, container, rebaselineContainer) { 371 function createTestTargets(interpolationTests, container, rebaselineContainer) {
372 var targets = []; 372 var targets = [];
373 for (var interpolationTest of interpolationTests) { 373 for (var interpolationTest of interpolationTests) {
374 var params = interpolationTest.params; 374 var params = interpolationTest.params;
375 params.fromComposite = 'from' in params ? (params.fromComposite || 'replac e') : 'add'; 375 assert_true('property' in params);
376 params.toComposite = 'to' in params ? (params.toComposite || 'replace') : 'add'; 376 assert_true('from' in params);
377 assert_true('to' in params);
378 params.fromComposite = isNeutralKeyframe(params.from) ? 'add' : (params.fr omComposite || 'replace');
379 params.toComposite = isNeutralKeyframe(params.to) ? 'add' : (params.toComp osite || 'replace');
377 var underlyingText = params.underlying ? `with underlying [${params.underl ying}] ` : ''; 380 var underlyingText = params.underlying ? `with underlying [${params.underl ying}] ` : '';
378 var fromText = 'from' in params ? `${params.fromComposite} [${params.from} ]` : 'neutral'; 381 var fromText = isNeutralKeyframe(params.from) ? 'neutral' : `${params.from Composite} [${params.from}]`;
379 var toText = 'to' in params ? `${params.toComposite} [${params.to}]` : 'ne utral'; 382 var toText = isNeutralKeyframe(params.to) ? 'neutral' : `${params.toCompos ite} [${params.to}]`;
380 var description = `Interpolate attribute <${params.property}> ${underlying Text}from ${fromText} to ${toText}`; 383 var description = `Interpolate attribute <${params.property}> ${underlying Text}from ${fromText} to ${toText}`;
381 384
382 if (rebaselineTests) { 385 if (rebaselineTests) {
383 var rebaseline = createElement('pre', rebaselineContainer); 386 var rebaseline = createElement('pre', rebaselineContainer);
384 387
385 var fromCode = 'from' in params ? ` 388 var assertionCode =
386 from: '${params.from}', 389 `assertAttributeInterpolation({\n` +
387 fromComposite: '${params.fromComposite}',` : ''; 390 ` property: '${params.property}',\n` +
391 ` underlying: '${params.underlying}',\n`;
388 392
389 var toCode = 'to' in params ? `
390 to: '${params.to}',
391 toComposite: '${params.toComposite}',` : '';
392 393
393 rebaseline.appendChild(document.createTextNode(`\ 394 if (isNeutralKeyframe(params.from)) {
394 assertAttributeInterpolation({ 395 assertionCode += ` from: neutralKeyframe,\n`;
395 property: '${params.property}', 396 } else {
396 underlying: '${params.underlying}',${fromCode}${toCode} 397 assertionCode +=
397 }, [\n`)); 398 ` from: '${params.from}',\n` +
399 ` fromComposite: '${params.fromComposite}',\n`;
400 }
401
402 if (isNeutralKeyframe(params.to)) {
403 assertionCode += ` to: neutralKeyframe,\n`;
404 } else {
405 assertionCode +=
406 ` to: '${params.to}',\n` +
407 ` fromComposite: '${params.fromComposite}',\n`;
408 }
409
410 assertionCode += `\n}, [\n`;
411
412 rebaseline.appendChild(document.createTextNode(assertionCode));
398 var rebaselineExpectation; 413 var rebaselineExpectation;
399 rebaseline.appendChild(rebaselineExpectation = document.createTextNode(' ')); 414 rebaseline.appendChild(rebaselineExpectation = document.createTextNode(' '));
400 rebaseline.appendChild(document.createTextNode(']);\n\n')); 415 rebaseline.appendChild(document.createTextNode(']);\n\n'));
401 } 416 }
402 417
403 for (var method of ['SMIL', 'Web Animations']) { 418 for (var method of ['SMIL', 'Web Animations']) {
404 if (method === 'SMIL' && params.fromComposite !== params.toComposite) { 419 if (method === 'SMIL' && params.fromComposite !== params.toComposite) {
405 continue; 420 continue;
406 } 421 }
407 createElement('pre', container).textContent = `${method}: ${description} `; 422 createElement('pre', container).textContent = `${method}: ${description} `;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 loadScript('../../resources/testharness.js').then(() => { 469 loadScript('../../resources/testharness.js').then(() => {
455 return loadScript('../../resources/testharnessreport.js'); 470 return loadScript('../../resources/testharnessreport.js');
456 }).then(() => { 471 }).then(() => {
457 var asyncHandle = async_test('This test uses interpolation-test.js.') 472 var asyncHandle = async_test('This test uses interpolation-test.js.')
458 requestAnimationFrame(() => { 473 requestAnimationFrame(() => {
459 runTests().then(() => asyncHandle.done()); 474 runTests().then(() => asyncHandle.done());
460 }); 475 });
461 }); 476 });
462 477
463 window.assertAttributeInterpolation = assertAttributeInterpolation; 478 window.assertAttributeInterpolation = assertAttributeInterpolation;
479 window.neutralKeyframe = neutralKeyframe;
464 })(); 480 })();
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/animations/svg-attribute-composition/svg-z-composition.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698