<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<script src="../../../resources/js-test-pre.js"></script>

<style>
@-webkit-keyframes example {
  from {
    width: 50px;
    height: 50px;
    top: 50px;
  }
  to {
    width: 10px;
    height: 10px;
    top: 200px;
  }
}

@keyframes example {
  from {
    width: 50px;
    height: 50px;
    top: 50px;
  }
  to {
    width: 10px;
    height: 10px;
    top: 200px;
  }
}

#after:after,
#before:before {
    content: "";
    display: block;
    height: 50px;
    width: 50px;
    position: relative;
}

#after.animate:after,
#before.animate:before {
    top: 200px;
    width: 10px;
    height: 10px;
    -webkit-animation: example 2s;
    -moz-animation: example 2s;
    animation: example 2s;
}

#before,
#after {
    display: inline-block;
    border: 1px solid black;
    background: red;
}

#before.animate,
#after.animate {
    background: green;
}
</style>

<div id="before"></div>
<div id="after"></div>

<script>
description('Animations on :before and :after pseudo elements should run');

if (window.testRunner)
    testRunner.dumpAsText();

function getPseudoComputedTop(id)
{
    return Math.round(parseFloat(getComputedStyle(document.getElementById(id), ':' + id).top));
}

// FIXME: This test should be modified so subpixel doesn't cause off by one
// below and it no longer needs shouldBeCloseTo.

function testAnimation(id)
{
    var div = document.getElementById(id);
    div.className = 'animate';
    window.div = div;
    shouldBe('div.offsetWidth', '52');
    if (window.internals) {
        internals.pauseAnimationAtTimeOnPseudoElement('example', 1.0, div, id);
        shouldBeCloseTo('div.offsetWidth', 20, 1);
        computedTop = getPseudoComputedTop(id);
        shouldBeCloseTo('computedTop', 170, 1);
        internals.pauseAnimationAtTimeOnPseudoElement('example', 2.0, div, id);
        shouldBeCloseTo('div.offsetWidth', 12, 1);
        computedTop = getPseudoComputedTop(id);
        shouldBeCloseTo('computedTop', 200, 1);
    } else {
        // This will be flaky, but it's a reasonable approximation for testing
        // in a browser instead of DRT.
        setTimeout(function() {
            window.div = div;
            shouldBeCloseTo('div.offsetWidth', 20, 1);
            computedTop = getPseudoComputedTop(id);
            shouldBeCloseTo('computedTop', 170, 1);
        }, 1000);
        setTimeout(function() {
            window.div = div;
            shouldBeCloseTo('div.offsetWidth', 12, 1);
            computedTop = getPseudoComputedTop(id);
            shouldBeCloseTo('computedTop', 200, 1);
        }, 2000);
    }
}

onload = function() {
    testAnimation('before');
    testAnimation('after');
    if (window.internals)
        isSuccessfullyParsed();
    else
        setTimeout(isSuccessfullyParsed, 2000);
};
</script>
