servo/tests/wpt/web-platform-tests/web-animations/interfaces/AnimationEffectTiming/duration.html

172 lines
6 KiB
HTML

<!DOCTYPE html>
<meta charset=utf-8>
<title>duration tests</title>
<link rel="help" href="http://w3c.github.io/web-animations/#dom-animationeffecttiming-duration">
<link rel="author" title="Ryo Motozawa" href="mailto:motozawa@mozilla-japan.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../testcommon.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
test(function(t) {
var anim = createDiv(t).animate(null);
assert_equals(anim.effect.timing.duration, 'auto');
}, 'Test default value');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
anim.effect.timing.duration = 123.45;
assert_times_equal(anim.effect.timing.duration, 123.45,
'set duration 123.45');
assert_times_equal(anim.effect.getComputedTiming().duration, 123.45,
'getComputedTiming() after set duration 123.45');
}, 'set duration 123.45');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
anim.effect.timing.duration = 'auto';
assert_equals(anim.effect.timing.duration, 'auto', 'set duration \'auto\'');
assert_equals(anim.effect.getComputedTiming().duration, 0,
'getComputedTiming() after set duration \'auto\'');
}, 'set duration auto');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, { duration: 'auto' });
assert_equals(anim.effect.timing.duration, 'auto', 'set duration \'auto\'');
assert_equals(anim.effect.getComputedTiming().duration, 0,
'getComputedTiming() after set duration \'auto\'');
}, 'set auto duration in animate as object');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
anim.effect.timing.duration = Infinity;
assert_equals(anim.effect.timing.duration, Infinity, 'set duration Infinity');
assert_equals(anim.effect.getComputedTiming().duration, Infinity,
'getComputedTiming() after set duration Infinity');
}, 'set duration Infinity');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, -1);
});
}, 'set negative duration in animate using a duration parameter');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, -Infinity);
});
}, 'set negative Infinity duration in animate using a duration parameter');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, NaN);
});
}, 'set NaN duration in animate using a duration parameter');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, { duration: -1 });
});
}, 'set negative duration in animate using an options object');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, { duration: -Infinity });
});
}, 'set negative Infinity duration in animate using an options object');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, { duration: NaN });
});
}, 'set NaN duration in animate using an options object');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, { duration: 'abc' });
});
}, 'set abc string duration in animate using an options object');
test(function(t) {
var div = createDiv(t);
assert_throws({ name: 'TypeError' }, function() {
div.animate({ opacity: [ 0, 1 ] }, { duration: '100' });
});
}, 'set 100 string duration in animate using an options object');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
assert_throws({ name: 'TypeError' }, function() {
anim.effect.timing.duration = -1;
});
}, 'set negative duration');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
assert_throws({ name: 'TypeError' }, function() {
anim.effect.timing.duration = -Infinity;
});
}, 'set negative Infinity duration');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
assert_throws({ name: 'TypeError' }, function() {
anim.effect.timing.duration = NaN;
});
}, 'set NaN duration');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
assert_throws({ name: 'TypeError' }, function() {
anim.effect.timing.duration = 'abc';
});
}, 'set duration abc');
test(function(t) {
var div = createDiv(t);
var anim = div.animate({ opacity: [ 0, 1 ] }, 2000);
assert_throws({ name: 'TypeError' }, function() {
anim.effect.timing.duration = '100';
});
}, 'set duration string 100');
promise_test(function(t) {
var anim = createDiv(t).animate(null, 100 * MS_PER_SEC);
return anim.ready.then(function() {
var originalStartTime = anim.startTime;
var originalCurrentTime = anim.currentTime;
assert_equals(anim.effect.getComputedTiming().duration, 100 * MS_PER_SEC,
'Initial duration should be as set on KeyframeEffect');
anim.effect.timing.duration = 200 * MS_PER_SEC;
assert_equals(anim.effect.getComputedTiming().duration, 200 * MS_PER_SEC,
'Effect duration should have been updated');
assert_times_equal(anim.startTime, originalStartTime,
'startTime should be unaffected by changing effect ' +
'duration');
assert_times_equal(anim.currentTime, originalCurrentTime,
'currentTime should be unaffected by changing effect ' +
'duration');
});
}, 'Extending an effect\'s duration does not change the start or current time');
</script>
</body>