<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<style>
#target {
    width: 100px;
    height: 100px;
    background-color: red;
}
#target:after {
    display: block;
    position: relative;
    content: "";
    width: 50px;
    height: 50px;
    background-color: blue;    
}
#target.animated:after {
    -webkit-animation: anim 1ms forwards;
    animation: anim 1ms forwards;
}
@-webkit-keyframes anim {
    from {
        left: 0px;
        display: block;
    }
    to {
        left: 100px;
        display: none;
    }
}
@keyframes anim {
    from {
        left: 0px;
        display: block;
    }
    to {
        left: 100px;
        display: none;
    }
}
</style>

<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function go() {
    var target = document.getElementById('target');
    target.addEventListener('webkitAnimationEnd', completeTest);
    target.classList.add('animated');
}

function test(style, property, expected) {
    var pass = style[property] === expected;
    document.getElementById('log').innerHTML +=
        (pass ? 'PASS' : 'FAIL') + ': ' + property + ' was ' + (pass ? '' : 'not ') + expected + '<br>';
}

function completeTest(message) {
    var style = getComputedStyle(document.getElementById('target'), ':after');
    test(style, 'left', '100px');
    test(style, 'display', 'block');
    if (window.testRunner) {
        testRunner.notifyDone();
    }
}
</script>

<body onload="go()">
<div>
  Tests that an attempt to animate the display property of a pseudo element is
  ignored, and that the animation proceeds as expected.
</div>
<div id="target"></div>
<div id="log"></div>
</body>