| Index: LayoutTests/transitions/resources/transition-test-helpers.js
|
| diff --git a/LayoutTests/transitions/resources/transition-test-helpers.js b/LayoutTests/transitions/resources/transition-test-helpers.js
|
| deleted file mode 100644
|
| index 6ad2f197cb403ec7b689a9b056bf39a5d2654462..0000000000000000000000000000000000000000
|
| --- a/LayoutTests/transitions/resources/transition-test-helpers.js
|
| +++ /dev/null
|
| @@ -1,295 +0,0 @@
|
| -/* This is the helper function to run transition tests:
|
| -
|
| -Test page requirements:
|
| -- The body must contain an empty div with id "result"
|
| -- Call this function directly from the <script> inside the test page
|
| -
|
| -Function parameters:
|
| - expected [required]: an array of arrays defining a set of CSS properties that must have given values at specific times (see below)
|
| - callback [optional]: a function to be executed just before the test starts (none by default)
|
| -
|
| - Each sub-array must contain these items in this order:
|
| - - the time in seconds at which to snapshot the CSS property
|
| - - the id of the element on which to get the CSS property value
|
| - - the name of the CSS property to get [1]
|
| - - the expected value for the CSS property
|
| - - the tolerance to use when comparing the effective CSS property value with its expected value
|
| -
|
| - [1] If the CSS property name is "-webkit-transform", expected value must be an array of 1 or more numbers corresponding to the matrix elements,
|
| - or a string which will be compared directly (useful if the expected value is "none")
|
| - If the CSS property name is "-webkit-transform.N", expected value must be a number corresponding to the Nth element of the matrix
|
| -
|
| -*/
|
| -
|
| -const usePauseAPI = true;
|
| -const dontUsePauseAPI = false;
|
| -
|
| -const shouldBeTransitioning = true;
|
| -const shouldNotBeTransitioning = false;
|
| -
|
| -function roundNumber(num, decimalPlaces)
|
| -{
|
| - return Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
|
| -}
|
| -
|
| -function isCloseEnough(actual, desired, tolerance)
|
| -{
|
| - var diff = Math.abs(actual - desired);
|
| - return diff <= tolerance;
|
| -}
|
| -
|
| -function isShadow(property)
|
| -{
|
| - return (property == '-webkit-box-shadow' || property == 'text-shadow');
|
| -}
|
| -
|
| -function getShadowXY(cssValue)
|
| -{
|
| - var text = cssValue.cssText;
|
| - // Shadow cssText looks like "rgb(0, 0, 255) 0px -3px 10px 0px"
|
| - var shadowPositionRegExp = /\)\s*(-?\d+)px\s*(-?\d+)px/;
|
| - var result = shadowPositionRegExp.exec(text);
|
| - return [parseInt(result[1]), parseInt(result[2])];
|
| -}
|
| -
|
| -function compareRGB(rgb, expected, tolerance)
|
| -{
|
| - return (isCloseEnough(parseInt(rgb[0]), expected[0], tolerance) &&
|
| - isCloseEnough(parseInt(rgb[1]), expected[1], tolerance) &&
|
| - isCloseEnough(parseInt(rgb[2]), expected[2], tolerance));
|
| -}
|
| -
|
| -function parseCrossFade(s)
|
| -{
|
| - var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
|
| -
|
| - if (!matches)
|
| - return null;
|
| -
|
| - return {"from": matches[1], "to": matches[2], "percent": parseFloat(matches[3])}
|
| -}
|
| -
|
| -function checkExpectedValue(expected, index)
|
| -{
|
| - var time = expected[index][0];
|
| - var elementId = expected[index][1];
|
| - var property = expected[index][2];
|
| - var expectedValue = expected[index][3];
|
| - var tolerance = expected[index][4];
|
| - var postCompletionCallback = expected[index][5];
|
| -
|
| - var computedValue;
|
| - var pass = false;
|
| - var transformRegExp = /^-webkit-transform(\.\d+)?$/;
|
| - if (transformRegExp.test(property)) {
|
| - computedValue = window.getComputedStyle(document.getElementById(elementId)).webkitTransform;
|
| - if (typeof expectedValue == "string")
|
| - pass = (computedValue == expectedValue);
|
| - else if (typeof expectedValue == "number") {
|
| - var m = computedValue.split("(");
|
| - var m = m[1].split(",");
|
| - pass = isCloseEnough(parseFloat(m[parseInt(property.substring(18))]), expectedValue, tolerance);
|
| - } else {
|
| - var m = computedValue.split("(");
|
| - var m = m[1].split(",");
|
| - for (i = 0; i < expectedValue.length; ++i) {
|
| - pass = isCloseEnough(parseFloat(m[i]), expectedValue[i], tolerance);
|
| - if (!pass)
|
| - break;
|
| - }
|
| - }
|
| - } else if (property == "fill" || property == "stroke") {
|
| - computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).rgbColor;
|
| - if (compareRGB([computedValue.red.cssText, computedValue.green.cssText, computedValue.blue.cssText], expectedValue, tolerance))
|
| - pass = true;
|
| - else {
|
| - // We failed. Make sure computed value is something we can read in the error message
|
| - computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
|
| - }
|
| - } else if (property == "stop-color" || property == "flood-color" || property == "lighting-color") {
|
| - computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
|
| - // The computedValue cssText is rgb(num, num, num)
|
| - var components = computedValue.cssText.split("(")[1].split(")")[0].split(",");
|
| - if (compareRGB(components, expectedValue, tolerance))
|
| - pass = true;
|
| - else {
|
| - // We failed. Make sure computed value is something we can read in the error message
|
| - computedValue = computedValue.cssText;
|
| - }
|
| - } else if (property == "lineHeight") {
|
| - computedValue = parseInt(window.getComputedStyle(document.getElementById(elementId)).lineHeight);
|
| - pass = isCloseEnough(computedValue, expectedValue, tolerance);
|
| - } else if (property == "background-image"
|
| - || property == "border-image-source"
|
| - || property == "border-image"
|
| - || property == "list-style-image"
|
| - || property == "-webkit-mask-image"
|
| - || property == "-webkit-mask-box-image") {
|
| - if (property == "border-image" || property == "-webkit-mask-image" || property == "-webkit-mask-box-image")
|
| - property += "-source";
|
| -
|
| - computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
|
| - computedCrossFade = parseCrossFade(computedValue);
|
| -
|
| - if (!computedCrossFade) {
|
| - pass = false;
|
| - } else {
|
| - pass = isCloseEnough(computedCrossFade.percent, expectedValue, tolerance);
|
| - }
|
| - } else {
|
| - var computedStyle = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
|
| - if (computedStyle.cssValueType == CSSValue.CSS_VALUE_LIST) {
|
| - var values = [];
|
| - for (var i = 0; i < computedStyle.length; ++i) {
|
| - switch (computedStyle[i].cssValueType) {
|
| - case CSSValue.CSS_PRIMITIVE_VALUE:
|
| - values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
|
| - break;
|
| - case CSSValue.CSS_CUSTOM:
|
| - // arbitrarily pick shadow-x and shadow-y
|
| - if (isShadow) {
|
| - var shadowXY = getShadowXY(computedStyle[i]);
|
| - values.push(shadowXY[0]);
|
| - values.push(shadowXY[1]);
|
| - } else
|
| - values.push(computedStyle[i].cssText);
|
| - break;
|
| - }
|
| - }
|
| - computedValue = values.join(',');
|
| - pass = true;
|
| - for (var i = 0; i < values.length; ++i)
|
| - pass &= isCloseEnough(values[i], expectedValue[i], tolerance);
|
| - } else if (computedStyle.cssValueType == CSSValue.CSS_PRIMITIVE_VALUE) {
|
| - switch (computedStyle.primitiveType) {
|
| - case CSSPrimitiveValue.CSS_STRING:
|
| - case CSSPrimitiveValue.CSS_IDENT:
|
| - computedValue = computedStyle.getStringValue();
|
| - pass = computedValue == expectedValue;
|
| - break;
|
| - case CSSPrimitiveValue.CSS_RGBCOLOR:
|
| - var rgbColor = computedStyle.getRGBColorValue();
|
| - computedValue = [rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
|
| - rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
|
| - rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)]; // alpha is not exposed to JS
|
| - pass = true;
|
| - for (var i = 0; i < 3; ++i)
|
| - pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
|
| - break;
|
| - case CSSPrimitiveValue.CSS_RECT:
|
| - computedValue = computedStyle.getRectValue();
|
| - computedValue = [computedValue.top.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
|
| - computedValue.right.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
|
| - computedValue.bottom.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
|
| - computedValue.left.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)];
|
| - pass = true;
|
| - for (var i = 0; i < 4; ++i)
|
| - pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
|
| - break;
|
| - case CSSPrimitiveValue.CSS_PERCENTAGE:
|
| - computedValue = parseFloat(computedStyle.cssText);
|
| - pass = isCloseEnough(computedValue, expectedValue, tolerance);
|
| - break;
|
| - default:
|
| - computedValue = computedStyle.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
|
| - pass = isCloseEnough(computedValue, expectedValue, tolerance);
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (pass)
|
| - result += "PASS - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s saw something close to: " + expectedValue + "<br>";
|
| - else
|
| - result += "FAIL - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s expected: " + expectedValue + " but saw: " + computedValue + "<br>";
|
| -
|
| - if (postCompletionCallback)
|
| - result += postCompletionCallback();
|
| -}
|
| -
|
| -function endTest()
|
| -{
|
| - document.getElementById('result').innerHTML = result;
|
| -
|
| - if (window.testRunner)
|
| - testRunner.notifyDone();
|
| -}
|
| -
|
| -function checkExpectedValueCallback(expected, index)
|
| -{
|
| - return function() { checkExpectedValue(expected, index); };
|
| -}
|
| -
|
| -function runTest(expected, usePauseAPI)
|
| -{
|
| - var maxTime = 0;
|
| - for (var i = 0; i < expected.length; ++i) {
|
| - var time = expected[i][0];
|
| - var elementId = expected[i][1];
|
| - var property = expected[i][2];
|
| - if (!property.indexOf("-webkit-transform."))
|
| - property = "-webkit-transform";
|
| -
|
| - var tryToPauseTransition = expected[i][6];
|
| - if (tryToPauseTransition === undefined)
|
| - tryToPauseTransition = shouldBeTransitioning;
|
| -
|
| - if (hasPauseTransitionAPI && usePauseAPI) {
|
| - if (tryToPauseTransition) {
|
| - var element = document.getElementById(elementId);
|
| - internals.pauseAnimations(time);
|
| - }
|
| - checkExpectedValue(expected, i);
|
| - } else {
|
| - if (time > maxTime)
|
| - maxTime = time;
|
| -
|
| - window.setTimeout(checkExpectedValueCallback(expected, i), time * 1000);
|
| - }
|
| - }
|
| -
|
| - if (maxTime > 0)
|
| - window.setTimeout(endTest, maxTime * 1000 + 50);
|
| - else
|
| - endTest();
|
| -}
|
| -
|
| -function waitForAnimationStart(callback, delay)
|
| -{
|
| - var delayTimeout = delay ? 1000 * delay + 10 : 0;
|
| - // Why the two setTimeouts? Well, for hardware animations we need to ensure that the hardware animation
|
| - // has started before we try to pause it, and timers fire before animations get committed in the runloop.
|
| - window.setTimeout(function() {
|
| - window.setTimeout(function() {
|
| - callback();
|
| - }, 0);
|
| - }, delayTimeout);
|
| -}
|
| -
|
| -function startTest(expected, usePauseAPI, callback)
|
| -{
|
| - if (callback)
|
| - callback();
|
| -
|
| - waitForAnimationStart(function() {
|
| - runTest(expected, usePauseAPI);
|
| - });
|
| -}
|
| -
|
| -var result = "";
|
| -var hasPauseTransitionAPI;
|
| -
|
| -function runTransitionTest(expected, callback, usePauseAPI, doPixelTest)
|
| -{
|
| - hasPauseTransitionAPI = 'internals' in window;
|
| -
|
| - if (window.testRunner) {
|
| - if (!doPixelTest)
|
| - testRunner.dumpAsText();
|
| - testRunner.waitUntilDone();
|
| - }
|
| -
|
| - if (!expected)
|
| - throw("Expected results are missing!");
|
| -
|
| - window.addEventListener("load", function() { startTest(expected, usePauseAPI, callback); }, false);
|
| -}
|
|
|