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

Unified Diff: LayoutTests/transitions/resources/transition-test-helpers.js

Issue 15738009: Beat the transition tests with a sanity stick. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Pass presubmit. Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
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);
-}

Powered by Google App Engine
This is Rietveld 408576698