| Index: third_party/WebKit/LayoutTests/animations/responsive/resources/responsive-test.js
|
| diff --git a/third_party/WebKit/LayoutTests/animations/responsive/resources/responsive-test.js b/third_party/WebKit/LayoutTests/animations/responsive/resources/responsive-test.js
|
| deleted file mode 100644
|
| index 2c47f6312c480da5183413d84e186f4a0a463b34..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/LayoutTests/animations/responsive/resources/responsive-test.js
|
| +++ /dev/null
|
| @@ -1,298 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -/*
|
| -Exported functions:
|
| -assertCSSResponsive
|
| -assertSVGResponsive
|
| -
|
| -Exported objects:
|
| -neutralKeyframe
|
| -
|
| -Options format: {
|
| - ?targetTag: <Target element tag name>,
|
| - property: <Property/Attribute name>,
|
| - ?getter(target): <Reads animated value from target>,
|
| - from: <Value>,
|
| - to: <Value>,
|
| - configurations: [{
|
| - state: {
|
| - ?underlying: <Value>,
|
| - ?inherited: <CSS Value>,
|
| - },
|
| - expect: [
|
| - { at: <Float>, is: <Value> },
|
| - ],
|
| - }],
|
| -}
|
| -
|
| -Description:
|
| -assertCSSResponsive() and assertSVGResponsive() take a property
|
| -specific interpolation and a list of style configurations with interpolation
|
| -expectations that apply to each configuration.
|
| -It starts the interpolation in every configuration, changes the
|
| -state to every other configuration (n * (n - 1) complexity) and asserts that
|
| -each destination configuration's expectations are met.
|
| -Each animation target can be assigned custom styles via the ".target" selector.
|
| -This test is designed to catch stale interpolation caches.
|
| -Set from/to to the exported neutralKeyframe object to use neutral keyframes.
|
| -*/
|
| -
|
| -(function() {
|
| -'use strict';
|
| -var pendingResponsiveTests = [];
|
| -var htmlNamespace = 'http://www.w3.org/1999/xhtml';
|
| -var svgNamespace = 'http://www.w3.org/2000/svg';
|
| -var neutralKeyframe = {};
|
| -
|
| -function assertCSSResponsive(options) {
|
| - pendingResponsiveTests.push({
|
| - options,
|
| - bindings: {
|
| - prefixProperty(property) {
|
| - return toCamelCase(property);
|
| - },
|
| - createTargetContainer(container) {
|
| - if (options.targetTag) {
|
| - var svgRoot = createElement('svg', container, 'svg-root', svgNamespace);
|
| - svgRoot.setAttribute('width', 0);
|
| - svgRoot.setAttribute('height', 0);
|
| - return svgRoot;
|
| - }
|
| -
|
| - return createElement('div', container);
|
| - },
|
| - createTarget(container) {
|
| - if (options.targetTag)
|
| - return createElement(options.targetTag, container, 'target', svgNamespace);
|
| -
|
| - return createElement('div', container, 'target');
|
| - },
|
| - setValue(target, property, value) {
|
| - test(function() {
|
| - assert_true(CSS.supports(property, value), 'CSS.supports ' + property + ' ' + value);
|
| - });
|
| - target.style[property] = value;
|
| - },
|
| - getAnimatedValue(target, property) {
|
| - return getComputedStyle(target)[property];
|
| - },
|
| - },
|
| - });
|
| -}
|
| -
|
| -function assertSVGResponsive(options) {
|
| - pendingResponsiveTests.push({
|
| - options,
|
| - bindings: {
|
| - prefixProperty(property) {
|
| - return 'svg-' + property;
|
| - },
|
| - createTargetContainer(container) {
|
| - var svgRoot = createElement('svg', container, 'svg-root', svgNamespace);
|
| - svgRoot.setAttribute('width', 0);
|
| - svgRoot.setAttribute('height', 0);
|
| - return svgRoot;
|
| - },
|
| - createTarget(targetContainer) {
|
| - console.assert(options.targetTag);
|
| - return createElement(options.targetTag, targetContainer, 'target', svgNamespace);
|
| - },
|
| - setValue(target, property, value) {
|
| - target.setAttribute(property, value);
|
| - },
|
| - getAnimatedValue(target, property) {
|
| - return options.getter ? options.getter(target) : target[property].animVal;
|
| - },
|
| - },
|
| - });
|
| -}
|
| -
|
| -function createStateTransitions(configurations) {
|
| - var stateTransitions = [];
|
| - for (var i = 0; i < configurations.length; i++) {
|
| - var beforeConfiguration = configurations[i];
|
| - for (var j = 0; j < configurations.length; j++) {
|
| - var afterConfiguration = configurations[j];
|
| - if (j != i) {
|
| - stateTransitions.push({
|
| - before: beforeConfiguration,
|
| - after: afterConfiguration,
|
| - });
|
| - }
|
| - }
|
| - }
|
| - return stateTransitions;
|
| -}
|
| -
|
| -function createElement(tag, container, className, namespace) {
|
| - var element = document.createElementNS(namespace || htmlNamespace, tag);
|
| - if (container) {
|
| - container.appendChild(element);
|
| - }
|
| - if (className) {
|
| - element.classList.add(className);
|
| - }
|
| - return element;
|
| -}
|
| -
|
| -function createTargets(bindings, n, container) {
|
| - var targets = [];
|
| - for (var i = 0; i < n; i++) {
|
| - targets.push(bindings.createTarget(container));
|
| - }
|
| - return targets;
|
| -}
|
| -
|
| -function setState(bindings, targets, property, state) {
|
| - for (var item in state) {
|
| - switch (item) {
|
| - case 'inherited':
|
| - var parent = targets[0].parentElement;
|
| - console.assert(targets.every(target => target.parentElement === parent));
|
| - bindings.setValue(parent, property, state.inherited);
|
| - break;
|
| - case 'underlying':
|
| - for (var target of targets) {
|
| - bindings.setValue(target, property, state.underlying);
|
| - }
|
| - break;
|
| - default:
|
| - for (var target of targets) {
|
| - bindings.setValue(target, item, state[item]);
|
| - }
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -function isNeutralKeyframe(keyframe) {
|
| - return keyframe === neutralKeyframe;
|
| -}
|
| -
|
| -function keyframeText(keyframe) {
|
| - return isNeutralKeyframe(keyframe) ? 'neutral' : `[${keyframe}]`;
|
| -}
|
| -
|
| -function toCamelCase(property) {
|
| - for (var i = property.length - 2; i > 0; --i) {
|
| - if (property[i] === '-') {
|
| - property = property.substring(0, i) + property[i + 1].toUpperCase() + property.substring(i + 2);
|
| - }
|
| - }
|
| - return property;
|
| -}
|
| -
|
| -function createKeyframes(prefixedProperty, from, to) {
|
| - var keyframes = [];
|
| - if (!isNeutralKeyframe(from)) {
|
| - keyframes.push({
|
| - offset: 0,
|
| - [prefixedProperty]: from,
|
| - });
|
| - }
|
| - if (!isNeutralKeyframe(to)) {
|
| - keyframes.push({
|
| - offset: 1,
|
| - [prefixedProperty]: to,
|
| - });
|
| - }
|
| - return keyframes;
|
| -}
|
| -
|
| -function createPausedAnimations(targets, keyframes, fractions) {
|
| - console.assert(targets.length == fractions.length);
|
| - return targets.map((target, i) => {
|
| - var fraction = fractions[i];
|
| - console.assert(fraction >= 0 && fraction < 1);
|
| - var animation = target.animate(keyframes, 1);
|
| - animation.pause();
|
| - animation.currentTime = fraction;
|
| - return animation;
|
| - });
|
| -}
|
| -
|
| -function runPendingResponsiveTests() {
|
| - return new Promise(resolve => {
|
| - var stateTransitionTests = [];
|
| - pendingResponsiveTests.forEach(responsiveTest => {
|
| - var options = responsiveTest.options;
|
| - var bindings = responsiveTest.bindings;
|
| - var property = options.property;
|
| - var prefixedProperty = bindings.prefixProperty(property);
|
| - assert_true('from' in options);
|
| - assert_true('to' in options);
|
| - var from = options.from;
|
| - var to = options.to;
|
| - var keyframes = createKeyframes(prefixedProperty, from, to);
|
| -
|
| - var stateTransitions = createStateTransitions(options.configurations);
|
| - stateTransitions.forEach(stateTransition => {
|
| - var before = stateTransition.before;
|
| - var after = stateTransition.after;
|
| - var container = bindings.createTargetContainer(document.body);
|
| - var targets = createTargets(bindings, after.expect.length, container);
|
| - var expectationTargets = createTargets(bindings, after.expect.length, container);
|
| -
|
| - setState(bindings, targets, property, before.state);
|
| - var animations = createPausedAnimations(targets, keyframes, after.expect.map(expectation => expectation.at));
|
| - stateTransitionTests.push({
|
| - applyStateTransition() {
|
| - setState(bindings, targets, property, after.state);
|
| - },
|
| - assert() {
|
| - for (var i = 0; i < targets.length; i++) {
|
| - var target = targets[i];
|
| - var expectation = after.expect[i];
|
| - var expectationTarget = expectationTargets[i];
|
| - bindings.setValue(expectationTarget, property, expectation.is);
|
| - var actual = bindings.getAnimatedValue(target, property);
|
| - test(() => {
|
| - assert_equals(actual, bindings.getAnimatedValue(expectationTarget, property));
|
| - }, `Animation on property <${prefixedProperty}> from ${keyframeText(from)} to ${keyframeText(to)} with ${JSON.stringify(before.state)} changed to ${JSON.stringify(after.state)} at (${expectation.at}) is [${expectation.is}]`);
|
| - }
|
| - },
|
| - });
|
| - });
|
| - });
|
| -
|
| - requestAnimationFrame(() => {
|
| - for (var stateTransitionTest of stateTransitionTests) {
|
| - stateTransitionTest.applyStateTransition();
|
| - }
|
| -
|
| - requestAnimationFrame(() => {
|
| - for (var stateTransitionTest of stateTransitionTests) {
|
| - stateTransitionTest.assert();
|
| - }
|
| - resolve();
|
| - });
|
| - });
|
| - });
|
| -}
|
| -
|
| -function loadScript(url) {
|
| - return new Promise(resolve => {
|
| - var script = document.createElement('script');
|
| - script.src = url;
|
| - script.onload = resolve;
|
| - document.head.appendChild(script);
|
| - });
|
| -}
|
| -
|
| -loadScript('../../resources/testharness.js').then(() => {
|
| - return loadScript('../../resources/testharnessreport.js');
|
| -}).then(() => {
|
| - var asyncHandle = async_test('This test uses responsive-test.js.')
|
| - runPendingResponsiveTests().then(() => {
|
| - asyncHandle.done();
|
| - });
|
| -});
|
| -
|
| -
|
| -window.assertCSSResponsive = assertCSSResponsive;
|
| -window.assertSVGResponsive = assertSVGResponsive;
|
| -window.neutralKeyframe = neutralKeyframe;
|
| -
|
| -})();
|
|
|