<!doctype html>
<meta charset=utf-8>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../resources/testcommon.js"></script>
<style>
@keyframes anim { }
::before {
  content: ''
}
::after {
  content: ''
}
</style>
<body>
<div id="log"></div>
<script>
'use strict';

test(function(t) {
  var div = addDiv(t);
  div.style.animation = 'anim 100s';
  var animation = div.getAnimations()[0];
  assert_equals(animation.effect.target, div,
    'Animation.target is the animatable div');
}, 'Returned CSS animations have the correct effect target');

test(function(t) {
  addStyle(t, { '.after::after': 'animation: anim 10s, anim 100s;' });
  var div = addDiv(t, { class: 'after' });
  var anims = document.getAnimations();
  assert_equals(anims.length, 2,
                'Got animations running on ::after pseudo element');
  assert_equals(anims[0].effect.target, anims[1].effect.target,
                'Both animations return the same target object');
}, 'effect.target should return the same CSSPseudoElement object each time');

test(function(t) {
  addStyle(t, { '.after::after': 'animation: anim 10s;' });
  var div = addDiv(t, { class: 'after' });
  var pseudoTarget = document.getAnimations()[0].effect.target;
  var effect = new KeyframeEffect(pseudoTarget,
                                          { background: ["blue", "red"] },
                                          3 * MS_PER_SEC);
  var newAnim = new Animation(effect, document.timeline);
  newAnim.play();
  var anims = document.getAnimations();
  assert_equals(anims.length, 2,
                'Got animations running on ::after pseudo element');
  assert_not_equals(anims[0], newAnim,
                    'The scriped-generated animation appears last');
  assert_equals(newAnim.effect.target, pseudoTarget,
                'The effect.target of the scripted-generated animation is ' +
                'the same as the one from the argument of ' +
                'KeyframeEffect constructor');
  assert_equals(anims[0].effect.target, newAnim.effect.target,
                'Both animations return the same target object');
}, 'effect.target from the script-generated animation should return the same ' +
   'CSSPseudoElement object as that from the CSS generated animation');

</script>
</body>
