tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SVGAnimationTestCase-testharness.js (3715B)


      1 // NOTE(edvardt):
      2 // This file is a slimmed down wrapper for the old SVGAnimationTestCase.js,
      3 // it has some convenience functions and should not be used for new tests.
      4 // New tests should not build on this API as it's just meant to keep things
      5 // working.
      6 
      7 // Helper functions
      8 const xlinkNS = "http://www.w3.org/1999/xlink"
      9 
     10 function expectFillColor(element, red, green, blue, message) {
     11    let color = window.getComputedStyle(element, null).fill;
     12    var re = new RegExp("rgba?\\(([^, ]*), ([^, ]*), ([^, ]*)(?:, )?([^, ]*)\\)");
     13    rgb = re.exec(color);
     14 
     15    assert_approx_equals(Number(rgb[1]), red, 2.0, message);
     16    assert_approx_equals(Number(rgb[2]), green, 2.0, message);
     17    assert_approx_equals(Number(rgb[3]), blue, 2.0, message);
     18 }
     19 
     20 function expectColor(element, red, green, blue, property) {
     21    if (typeof property != "string")
     22      color = getComputedStyle(element).getPropertyValue("color");
     23    else
     24      color = getComputedStyle(element).getPropertyValue(property);
     25    var re = new RegExp("rgba?\\(([^, ]*), ([^, ]*), ([^, ]*)(?:, )?([^, ]*)\\)");
     26    rgb = re.exec(color);
     27    assert_approx_equals(Number(rgb[1]), red, 2.0);
     28    assert_approx_equals(Number(rgb[2]), green, 2.0);
     29    assert_approx_equals(Number(rgb[3]), blue, 2.0);
     30 }
     31 
     32 function createSVGElement(type) {
     33  return document.createElementNS("http://www.w3.org/2000/svg", type);
     34 }
     35 
     36 // Inspired by Layoutests/animations/animation-test-helpers.js
     37 function moveAnimationTimelineAndSample(index) {
     38    var animationId = expectedResults[index][0];
     39    var time = expectedResults[index][1];
     40    var sampleCallback = expectedResults[index][2];
     41    var animation = rootSVGElement.ownerDocument.getElementById(animationId);
     42 
     43    // If we want to sample the animation end, add a small delta, to reliable point past the end of the animation.
     44    newTime = time;
     45 
     46    // The sample time is relative to the start time of the animation, take that into account.
     47    rootSVGElement.setCurrentTime(newTime);
     48 
     49    // NOTE(edvardt):
     50    // This is a dumb hack, some of the old tests sampled before the animation start, this
     51    // isn't technically part of the animation tests and is "impossible" to translate since
     52    // tests start automatically. Thus I solved it by skipping it.
     53    if (time != 0.0)
     54        sampleCallback();
     55 }
     56 
     57 var currentTest = 0;
     58 var expectedResults;
     59 
     60 function sampleAnimation(t) {
     61    if (currentTest == expectedResults.length) {
     62        t.done();
     63        return;
     64    }
     65 
     66    moveAnimationTimelineAndSample(currentTest);
     67    ++currentTest;
     68 
     69    step_timeout(t.step_func(function () { sampleAnimation(t); }), 0);
     70 }
     71 
     72 function runAnimationTest(t, expected) {
     73    if (!expected)
     74        throw("Expected results are missing!");
     75    if (currentTest > 0)
     76        throw("Not allowed to call runAnimationTest() twice");
     77 
     78    expectedResults = expected;
     79    testCount = expectedResults.length;
     80    currentTest = 0;
     81 
     82    step_timeout(t.step_func(function () { sampleAnimation(this); }), 50);
     83 }
     84 
     85 function smil_async_test(func) {
     86  async_test(t => {
     87    window.onload = t.step_func(function () {
     88      // Pause animations, we'll drive them manually.
     89      // This also ensures that the timeline is paused before
     90      // it starts. This should make the instance time of the below
     91      // 'click' (for instance) 0, and hence minimize rounding
     92      // errors for the addition in moveAnimationTimelineAndSample.
     93      rootSVGElement.pauseAnimations();
     94 
     95      // If eg. an animation is running with begin="0s", and
     96      // we want to sample the first time, before the animation
     97      // starts, then we can't delay the testing by using an
     98      // onclick event, as the animation would be past start time.
     99      func(t);
    100    });
    101  });
    102 }