diff options
Diffstat (limited to 'tests/wpt/web-platform-tests/html/semantics')
198 files changed, 5462 insertions, 79 deletions
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html new file mode 100644 index 00000000000..e29f2b0fbcd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html @@ -0,0 +1,60 @@ +<!doctype html> +<title>HTMLMediaElement.crossOrigin</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<div id=log></div> +<script> +test(function(){ + var video = document.createElement('video'); + assert_true('crossOrigin' in video); +}); +test(function(){ + var video = document.createElement('video'); + assert_equals(video.crossOrigin, null); +}, document.title+', content attribute missing'); +test(function(){ + var video = document.createElement('video'); + video.setAttribute('crossorigin', 'foo'); + assert_equals(video.crossOrigin, 'anonymous'); +}, document.title+', content attribute invalid value'); +test(function(){ + var video = document.createElement('video'); + video.setAttribute('crossorigin', ''); + assert_equals(video.crossOrigin, 'anonymous'); +}, document.title+', content attribute empty string'); +test(function(){ + var video = document.createElement('video'); + video.setAttribute('crossorigin', 'ANONYMOUS'); + assert_equals(video.crossOrigin, 'anonymous'); +}, document.title+', content attribute uppercase ANONYMOUS'); +test(function(){ + var video = document.createElement('video'); + video.setAttribute('crossorigin', 'use-credentials'); + assert_equals(video.crossOrigin, 'use-credentials'); +}, document.title+', content attribute use-credentials'); +test(function(){ + var video = document.createElement('video'); + video.crossOrigin = ''; + assert_equals(video.getAttribute('crossorigin'), ''); +}, document.title+', setting to empty string'); +test(function(){ + var video = document.createElement('video'); + video.crossOrigin = null; + assert_false(video.hasAttribute('crossorigin')); +}, document.title+', setting to null'); +test(function(){ + var video = document.createElement('video'); + video.crossOrigin = 'foo'; + assert_equals(video.getAttribute('crossorigin'), 'foo'); +}, document.title+', setting to invalid value'); +test(function(){ + var video = document.createElement('video'); + video.crossOrigin = 'ANONYMOUS'; + assert_equals(video.getAttribute('crossorigin'), 'ANONYMOUS'); +}, document.title+', setting to uppercase ANONYMOUS'); +test(function(){ + var video = document.createElement('video'); + video.crossOrigin = 'use-credentials'; + assert_equals(video.getAttribute('crossorigin'), 'use-credentials'); +}, document.title+', setting to use-credentials'); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState.html index e18f21934de..cde21e694e5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState.html @@ -8,4 +8,11 @@ test(function(){ var track = document.createElement('track'); assert_equals(track.readyState, 0); }, document.title + ' default value'); + +test(function(){ + assert_equals(HTMLTrackElement.NONE, 0); + assert_equals(HTMLTrackElement.LOADING, 1); + assert_equals(HTMLTrackElement.LOADED, 2); + assert_equals(HTMLTrackElement.ERROR, 3); +}, document.title + ' values'); </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html new file mode 100644 index 00000000000..c066f60399b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> + <head> + <title>TextTrackCue constructor</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + test(function() + { + assert_not_equals(TextTrackCue, VTTCue); + }, "TextTrackCue and VTTCue are separate interfaces"); + test(function() + { + assert_throws(new TypeError(), function() + { + new TextTrackCue(0, 0, ""); + }); + }, "TextTrackCue constructor should not be supported"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt new file mode 100644 index 00000000000..ff4c3fb5cd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt @@ -0,0 +1,20 @@ +WEBVTT +Either one or both of positioning and alignment values are invalid. + +1 +00:00:00.000 --> 00:00:30.500 position:10% align: start +Bear is Coming!!!!! +Positioning on the left bottom, middle aligned, +because the alignment is mistyped. + +2 +00:00:31.000 --> 00:00:45.500 position:200% align:middle +I said Bear is coming!!!! +Positioning on the bottom middle, middle aligned, +because the positioning is off. + +3 +00:01:01.000 --> 00:02:00.500 position:-80% align:ends +I said Bear is coming now!!!! +Positioning on the bottom middle, middle aligned, +because both the alignment and positioning don't apply. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt new file mode 100644 index 00000000000..a6e6af2ef96 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt @@ -0,0 +1,20 @@ +WEBVTT +Cues should position at different horizontal positions with different alignments. + +1 +00:00:00.000 --> 00:00:30.500 position:10% align:start +Bear is Coming!!!!! +Positioning on the left bottom, start aligned, and +first character rendering position is at 10% of width. + +2 +00:00:31.000 --> 00:00:45.500 position:20% align:middle +I said Bear is coming!!!! +Positioning on the bottom left, middle aligned, and +middle character rendering position of each line is at 20% of width. + +3 +00:01:01.000 --> 00:02:00.500 align:end position:80% +I said Bear is coming now!!!! +Positioning on the bottom right, end aligned, and +last character rendering position of each line is at 80% of width. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt new file mode 100644 index 00000000000..b196f13a207 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt @@ -0,0 +1,21 @@ +WEBVTT +One or more of line/text positioning and alignment values are invalid (settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 position: 0% align: start line: 0% +Bear is Coming!!!!! +None of the cue settings will be applied, just the default. + +2 +00:00:31.000 --> 00:00:01.500 position:0% align:end line:-30% +I said Bear is coming!!!! +The line position setting is ignored. +No text is visible though because it's off-screen at position +0 and the last character is at position 0%. + +3 +00:01:01.000 --> 00:01:30.000 line:-3 align:middler position:60% +I said Bear is coming now!!!! +Positioning on line 3 from the viewport bottom, middle aligned, +with middle character of cue at 60% width. +The alignment is ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt new file mode 100644 index 00000000000..dd3a6debb89 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt @@ -0,0 +1,28 @@ +WEBVTT +Cues with valid alignment, line and text position settings. + +1 +00:00:00.000 --> 00:00:15.000 position:10% align:start line:0% +Bear is Coming!!!!! +Positioning on the top of the viewport at 10% horizontally, +start aligned. + +00:00:15.500 --> 00:00:30.500 line:0 align:start +Bear is Coming!!!!! +This is line 0, middle aligned, first character at 50% width. + +2 +00:00:31.000 --> 00:00:45.500 position:80% line:80% +I said Bear is coming!!!! +Middle aligned, middle of cue's character is at 80% width and 80% height. + +00:00:46.000 --> 00:01:00.500 line:5 align:end position:30% +I said Bear is coming!!!! +This is line 6 from the top of the video viewport, +end aligned with last character at 30% of viewport width. + +3 +00:01:01.000 --> 00:01:30.000 line:-3 align:middle position:60% +I said Bear is coming now!!!! +Positioning on line 3 from the viewport bottom, middle aligned, +with middle character of cue at 60% width. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt new file mode 100644 index 00000000000..5beb376f450 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may only be start, middle, or end. These are all misspelled and so will default to middle. + +1 +00:00:00.000 --> 00:00:30.500 align:starta +Bear is Coming!!!!! +Erroneous alignment value -> middle. + +2 +00:00:31.000 --> 00:01:00.500 align:-start +I said Bear is coming!!!! +Erroneous alignment value --> middle. + +3 +00:01:01.000 --> 00:02:00.500 align: end +I said Bear is coming now!!!! +Erroneous alignment value with surplus whitespace --> middle. + +4 +00:02:01.000 --> 100:20:00.500 align:piugjk +I said Bear is coming now!!!! +Erroneous alignment value -> middle. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt new file mode 100644 index 00000000000..673b29ac851 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may be start, middle, or end (default is middle). + +1 +00:00:00.000 --> 00:00:30.500 align:start +الدب قادم!!!!! +بدء محاذاته. + +2 +00:00:31.000 --> 00:01:00.500 align:middle +قلت الدب قادم!! +محاذاة الوسط. + +3 +00:01:01.000 --> 00:02:00.500 align:end +قلت الدب قادم الآن!! +محاذاة الغاية. + +4 +00:02:01.000 --> 100:20:00.500 +قلت الدب قادم الآن!! +الافتراضية هي محاذاة الوسط.
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt new file mode 100644 index 00000000000..ad7792f7724 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may be start, middle, or end (default is middle). + +1 +00:00:00.000 --> 00:00:30.500 align:start +Bear is Coming!!!!! +Start align. + +2 +00:00:31.000 --> 00:01:00.500 align:middle +I said Bear is coming!!!! +Middle align. + +3 +00:01:01.000 --> 00:02:00.500 align:end +I said Bear is coming now!!!! +End align. + +4 +00:02:01.000 --> 100:20:00.500 +I said Bear is coming now!!!! +Default is middle alignment.
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt new file mode 100644 index 00000000000..0c8de32bcb7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt @@ -0,0 +1,10 @@ +WEBVTT FILE +A BOM character at the start of a file should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt new file mode 100644 index 00000000000..cd138fd32af --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt @@ -0,0 +1,13 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:00.300 +Lorem + +2 +00:00:00.300 --> 00:00:00.700 +ipsum + +3 +00:00:01.200 --> 00:00:01.500 +dolor diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt new file mode 100644 index 00000000000..44c74665c25 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:01.000 --> 00:00:02.000 +Lorem ipsum dolor sit amet, + +2 +00:00:03.000 --> 00:00:04.000 +consectetuer adipiscing elit, + +3 +00:00:05.000 --> 00:00:06.000 +sed diam nonummy nibh euismod tincidunt + +4 +00:00:07.000 --> 00:00:08.000 +ut laoreet dolore magna aliquam erat volutpat. + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt new file mode 100644 index 00000000000..0730f8bc40b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:01.000 +Lorem <b>ipsum</b> <u>dolor</u> <i.sit>sit</i> amet, + +2 +00:00:03.000 --> 00:00:04.000 +consectetuer adipiscing elit, + +3 +00:00:05.000 --> 00:00:06.000 +sed diam nonummy nibh euismod tincidunt + +4 +00:00:07.000 --> 00:00:08.000 +ut laoreet dolore magna aliquam erat volutpat. + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt new file mode 100644 index 00000000000..787c4308687 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:01.000 +Lorem + +2 +00:00:01.000 --> 00:00:02.000 +ipsum + +3 +00:00:02.000 --> 00:00:03.000 +dolor + +4 +00:00:03.000 --> 00:00:04.000 +sit + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt new file mode 100644 index 00000000000..650ea2c4960 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <c> class markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<c .black>Bear is Coming!!!!!</c> +The space signified an annotation start. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<c.red&large>I said Bear is coming!!!!</c> +Probably should only allow characters that CSS allows in class names. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <c.9red.upper+case>Bear is coming now</c>!!!! +Probably should only allow characters that CSS allows in class names. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt new file mode 100644 index 00000000000..ea3ef623f59 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue text fragment with <c> class markup is mapped to HTML <span> element with CSS classes. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<c.black>Bear is Coming!!!!!</c> + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<c.green>I said Bear is coming!!!!</c> + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <c.red.uppercase>Bear is coming now</c>!!!! diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt new file mode 100644 index 00000000000..2b5db0c1da4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue identifiers cannot contain the string "-->". + +-->random_id +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +another random identifier--> +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +identifier-->too +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt new file mode 100644 index 00000000000..39021186208 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt @@ -0,0 +1,18 @@ +WEBVTT +Random text is accepted for cue identifiers. + +random_id +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +another random identifier +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +identifier--too +00:01:01.000 --> 00:02:00.500 +I said Bear is coming now!!!! + +identifier--too +00:02:01.000 --> 00:03:00.500 +Duplicate identifier
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt new file mode 100644 index 00000000000..111bae6344b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue identifiers cannot contain "-->". Whole cue is ignored. + +--> +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +--> +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +--> +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt new file mode 100644 index 00000000000..0d52a70ee4b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt @@ -0,0 +1,11 @@ +WEBVTT +Cues don't have to have identifiers. + +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt new file mode 100644 index 00000000000..88f56cceca8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt @@ -0,0 +1,6 @@ +WEBVTT + +00:00.000 --> 00:01.000 +Valid cue 1 +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt new file mode 100644 index 00000000000..205955e3e49 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt @@ -0,0 +1,6 @@ +WEBVTT +00:00.000 --> 00:01.000 +Valid cue 1 + +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt new file mode 100644 index 00000000000..56defcc48b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt @@ -0,0 +1,9 @@ +WEBVTT + +00:00.000 --> 00:01.000 +Valid cue 1 + +NOTE about something +NOTE or something else - maybe an identifier +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt new file mode 100644 index 00000000000..5e4a61a5e40 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt @@ -0,0 +1,18 @@ +WEBVTT +Either size or alignment are invalid. + +1 +00:00:00.000 --> 00:00:30.500 size:100% align:@start +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width, alignment is ignored. + +2 +00:00:31.000 --> 00:01:00.500 size:-10% align:end +I said Bear is coming!!!! +Box for the cue is as big as the text, no line wrapping, +(except if viewport is too small) and end aligned. + +3 +00:01:01.000 --> 00:02:00.500 size:110% align:@end +I said Bear is coming now!!!! +Both cue size and alignment are ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt new file mode 100644 index 00000000000..6d365365396 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt @@ -0,0 +1,19 @@ +WEBVTT +Valid cue size with alignment settings. + +1 +00:00:00.000 --> 00:00:30.500 size:100% align:start +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width +and because of the start align, all text is left aligned on the video viewport. + +2 +00:00:31.000 --> 00:01:00.500 size:10% align:end +I said Bear is coming!!!! +Box for the cue is 10% of the video viewport width, which will mean that automatic line wrapping will happen +and the text is aligned to the end. + +3 +00:01:01.000 --> 00:02:00.500 size:0% align:middle +I said Bear is coming now!!!! +Cue text box size of 0 is acceptable, even if not visible. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt new file mode 100644 index 00000000000..700600d7a79 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid cue sizes (all settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 size: 50% +Bear is Coming!!!!! +Cue size setting doesn't parse and is ignored. + +2 +00:00:31.000 --> 00:01:00.500 size:-10% +I said Bear is coming!!!! +Negative cue size setting is not acceptable and is ignored. + +3 +00:01:01.000 --> 00:02:00.500 size:4000% +I said Bear is coming now!!!! +Cue size beyond 100% is not acceptable and is ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt new file mode 100644 index 00000000000..017d59a18bc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt @@ -0,0 +1,19 @@ +WEBVTT +Valid cue size values. + +1 +00:00:00.000 --> 00:00:30.500 size:100% +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width, +exemplified through background color, +even if the text needs less. + +2 +00:00:31.000 --> 00:01:00.500 size:10% +I said Bear is coming!!!! +Box for the cue is 10% of the video viewport width, which will mean that automatic line wrapping will happen. + +3 +00:01:01.000 --> 00:02:00.500 size:0% +I said Bear is coming now!!!! +Cue text box size of 0 is acceptable, even if not visible. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt new file mode 100644 index 00000000000..9062c67edee --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt @@ -0,0 +1,11 @@ +WEBVTT +Cues must be separated by at least one blank line, otherwise treated like one big cue. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt new file mode 100644 index 00000000000..3f035d331f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cues that have overlapping time ranges. + +1 +00:00:01.000 --> 00:00:06.000 +Bear is Coming!!!!! + +2 +00:00:01.500 --> 00:00:05.000 +I said Bear is coming!!!! + +3 +00:00:02.000 --> 00:00:05.000 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt new file mode 100644 index 00000000000..125ed667855 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt @@ -0,0 +1,17 @@ +WEBVTT +Cues may be separated by one or more blank lines. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + + +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + + + +3 +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt new file mode 100644 index 00000000000..d890ca3f71a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt @@ -0,0 +1,19 @@ +WEBVTT + +COMMENT--> +this is a comment, that will parse as part of the header; +the STYLE and DEFAULTS below are parsed as invalid cues + +STYLE--> +::cue(.narration) { color: blue; } + +DEFAULTS --> +line:-1 align:middle size:50% + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt new file mode 100644 index 00000000000..c04390420f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt @@ -0,0 +1,5 @@ +WEBVTT + +00:00.000 --> 00:01.000 +00:02.000 --> 00:03.000 +00:04.000 --> 00:05.000 diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt new file mode 100644 index 00000000000..dbfde34b697 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt @@ -0,0 +1,11 @@ +WEBVTT +Empty cues should not be discarded. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt new file mode 100644 index 00000000000..f45fee4793f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt @@ -0,0 +1,15 @@ +WEBVTT +Invalid use of < and > characters. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +This cue has a less than < character. +It turns everything from there on into an annotation +for an empty tag and ends only at the next > or & character. + + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +This cue has a greater than > character. +Since it's not related to a < character, +it's just interpreted as text. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt new file mode 100644 index 00000000000..a8817954a60 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt @@ -0,0 +1,30 @@ +WEBVTT +Cue content with escape characters for &, <, >, LRM, RLM and non-breaking space. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This cue has an ampersand & character. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +This cue has a less than < character. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +This cue has a greater than > character. + +4 +00:02:01.000 --> 00:02:30.500 align:start position:20% +This cue has a Left-to-Right Mark ‎. + +5 +00:02:31.000 --> 00:03:00.500 align:start position:20% +This cue has a Right-to-Left Mark ‏. + +6 +00:03:01.000 --> 00:03:30.500 align:start position:20% +This cue has a non-breaking space . + +7 +00:03:31.000 --> 00:04:00.500 +This & is parsed to the same as &. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt new file mode 100644 index 00000000000..c825ab32e2e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt @@ -0,0 +1,9 @@ +WEBVTT + +00:00.000 --> 00:01.000 +First + +Stray Id or other non-cue content + +00:02.000 --> 00:03.000 +Second diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt new file mode 100644 index 00000000000..10a16243864 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt @@ -0,0 +1,10 @@ +WEBVTT FILE +Different encodings (iconv) should not be recognized as WebVTT a file. + +1 +00:00:00.000 --> 00:00:30.500 +$B7J5$H=CG(B + +2 +00:00:31.000 --> 00:20:00.500 +$BEENOITB-(B diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt new file mode 100644 index 00000000000..e6c18ce3bd6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt @@ -0,0 +1,5 @@ +WEBVTT + +1 +1234567:00:00.000 --> 1234567890:00:00.000 +A very long cue. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt new file mode 100644 index 00000000000..3d52175729d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt @@ -0,0 +1,30 @@ +WEBVTT +Invalid positioning values (all settings are ignored). + +1 +00:00:00.000 --> 00:00:15.000 line:-0% +Bear is Coming!!!!! +Negative percentages are not allowed. +Line position is ignored. + +2 +00:00:31.000 --> 00:00:45.500 line:+50% +I said Bear is coming!!!! +Non-numbers are not allowed. +Line position is ignored. + +00:00:46.000 --> 00:01:00.500 line:+5 +I said Bear is coming!!!! +Plus sign is not allowed. +Line position is ignored. + +3 +00:01:01.000 --> 00:01:30.000 line:10%0% +I said Bear is coming now!!!! +Doesn't parse into a percentage. +Line position is ignored. + +00:01:31.000 --> 00:02:00.500 line:-10l +I said Bear is coming now!!!! +Doesn't parse into a number. +Line position is ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt new file mode 100644 index 00000000000..82f7e2a5234 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt @@ -0,0 +1,37 @@ +WEBVTT +Cues with valid vertical line positioning values. + +1 +00:00:00.000 --> 00:00:15.000 line:0% +Bear is Coming!!!!! +Positioning on the top of the viewport, in the middle. + +00:00:15.500 --> 00:00:30.500 line:0 +Bear is Coming!!!!! +This is line 0. +Positioning on the top of the viewport, in the middle. + +2 +00:00:31.000 --> 00:00:45.500 line:50% +I said Bear is coming!!!! +Positioning on the center of the video. + + +00:00:46.000 --> 00:01:00.500 line:5 +I said Bear is coming!!!! +This is line 6 from the top of the video viewport. + +3 +00:01:01.000 --> 00:01:30.000 line:100% +I said Bear is coming now!!!! +Positioning on the bottom middle. + +00:01:31.000 --> 00:02:00.500 line:-1 +I said Bear is coming now!!!! +This is the first line at the bottom of the video viewport. +Positioning on the bottom middle. Only 1 line shows. + +00:02:01.000 --> 00:02:30.000 line:500 +I said Bear is coming now!!!! +This is legal, +even though the line will likely not be within the video viewport. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt new file mode 100644 index 00000000000..4ff7add2d72 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue text has invalid markup of <b>, <i>, <u>, <rt> and <ruby>. Has a bad effect on the remainder of the cue. + +1 +00:00:00.000 --> 00:00:15.000 align:start position:20% +The following bear starts bold but end is broken: +<b>Bear</ b> is Coming!!!!! + +00:00:15.500 --> 00:00:30.500 align:start position:20% +The following bear is not in italics but the markup is removed: +< i>Bear</i> is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +The following bear is not underlined and markup is removed: +I said < u >Bear</u> is coming!!!! + +3 +00:01:01.000 --> 00:01:30.000 align:start position:20% +The following bear is not ruby annotated and markup is removed: +I said <ru by>Bear<rt>bear with me</rt></ruby> is coming!!!! + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt new file mode 100644 index 00000000000..252a599b5fd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cues with <b>, <i>, <u>, <rt> and <ruby> tags (all valid). + +1 +00:00:00.000 --> 00:00:15.000 align:start position:20% +The following bear is bold: +<b>Bear</b> is Coming!!!!! + +00:00:15.500 --> 00:00:30.500 align:start position:20% +The following bear is in italics and has a class of "larger": +<i.larger>Bear</i> is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +The following bear is underlined even though the element has a blank: +I said <u >Bear</u> is coming!!!! + +3 +00:01:01.000 --> 00:01:30.000 align:start position:20% +The following bear is ruby annotated: +I said <ruby>Bear<rt>bear with me</rt></ruby> is coming!!!! + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt new file mode 100644 index 00000000000..255298aeb01 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt @@ -0,0 +1,14 @@ +WEBVTT +This is where metadata would go and these lines should be skipped. +author = silviapf@google.com +COMMENT--> +this is a comment, that will parse as part of the header; +the STYLE and DEFAULTS below are parsed as invalid cues + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt new file mode 100644 index 00000000000..03d8cf4a1c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt @@ -0,0 +1,38 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +Lorem ipsum dolor sit amet, + +00:00:02.000 --> 00:00:03.000 +consectetuer adipiscing elit, + +00:00:04.000 --> 00:00:05.000 +sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. + +00:00:06.000 --> 00:00:07.000 +Ut wisi enim ad minim veniam, + +00:00:08.000 --> 00:00:09.000 +quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. + +00:00:10.000 --> 00:00:11.000 +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, + +00:00:12.000 --> 00:00:13.000 +vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio + +00:00:14.000 --> 00:00:15.000 +dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. + +00:00:16.000 --> 00:00:17.000 +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id + +00:00:18.000 --> 00:00:19.000 +quod mazim placerat facer possim assum. + +00:00:20.000 --> 00:00:21.000 +Typi non habent claritatem insitam; + +00:00:22.000 --> 00:00:23.000 +est usus legentis in iis qui facit eorum claritatem. + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt new file mode 100644 index 00000000000..36e8366e908 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt @@ -0,0 +1,31 @@ +WEBVTT +Events should be triggered for missed (skipped) cues during normal playback. + +1 +00:00:00.000 --> 00:00:01.500 align:start position:20% +Bear is Coming!!!!! +And what kind of a bear it is - just have look. + +2 +00:00:02.000 --> 00:00:02.500 align:start position:20% +I said Bear is coming!!!! + +3 +00:00:05.500 --> 00:00:05.501 align:start position:20% +I said Bear is coming now!!!! + +4 +00:00:05.700 --> 00:00:05.701 align:start position:20% +This is the second missed cue in the test. + +5 +00:00:05.800 --> 00:00:05.800 align:start position:20% +Third missed cue - zero-length cue. + +6 +00:00:05.850 --> 00:00:05.851 align:start position:20% +Fourth missed cue. + +7 +00:00:05.950 --> 00:00:01.100 +Negative length cue. Should be treated correctly. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt new file mode 100644 index 00000000000..49e4e9051a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt @@ -0,0 +1,6 @@ +WEBVTT +A file with no line terminator at the end should be fine (last cue should be recognized). + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt new file mode 100644 index 00000000000..4cb85b6df27 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt @@ -0,0 +1,13 @@ +WEBVTT +Cues without timings are ignored. + +1 +00:00:00.000 +Bear is Coming!!!!! + +2 +00h:00m:31s.000ms +I said Bear is coming!!!! + +3 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt new file mode 100644 index 00000000000..12053b2703c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt @@ -0,0 +1,10 @@ +AWEBVTT FILE +A file with wrong file header should not be recognized as a webvtt file. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt new file mode 100644 index 00000000000..58ca6792be7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt @@ -0,0 +1,39 @@ +WEBVTT +Invalid horizontal positioning values (all settings are ignored). + +1 +00:00:00.000 --> 00:00:15.500 position:-5% +Bear is Coming!!!!! +This would be off screen -> ignored. + +00:00:16.000 --> 00:00:30.500 position:150% +Bear is Coming!!!!! +This would be off screen -> ignored. + +2 +00:00:31.000 --> 00:00:45.500 position:50 +I said Bear is coming!!!! +Missing percent sign -> ignored. + +2 +00:00:46.000 --> 00:01:00.500 position:50a% +I said Bear is coming!!!! +Surplus character between number and percent sign -> ignored. + +3 +00:01:01.000 --> 00:01:30.500 position:100%-fj +I said Bear is coming now!!!! +Surplus characters after percent sign -> ignored. + + +00:01:31.000 --> 00:02:00.500 position:100asdf +I said Bear is coming now!!!! +Surplus characters and no percent sign -> ignored. + +00:02:01.000 --> 00:02:02.000 position:e50% +I said Bear is coming now!!!! +Surplus characters at beginning of size string -> ignored. + +00:02:02.100 --> 00:02:02.500 position:5g0% +I said Bear is coming now!!!! +Surplus characters in middle of size string -> ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt new file mode 100644 index 00000000000..b23a7446b7f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt @@ -0,0 +1,21 @@ +WEBVTT +Valid horizontal positioning values. + +1 +00:00:00.000 --> 00:00:30.500 position:0% +الدب قادم!!!!! +تحديد المواقع في أسفل اليمين. + +2 +00:00:31.000 --> 00:00:45.500 position:50% +قلت الدب قادم!! +تحديد المواقع في منتصف القاع. + +00:00:46.000 --> 00:01:00.500 +قلت الدب قادم!! +المواقع الافتراضية على منتصف أسفل تزال قائمة. + +3 +00:01:01.000 --> 00:02:00.500 position:100% +قلت الدب قادم الآن!! +غادر لتحديد المواقع في القاع. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt new file mode 100644 index 00000000000..ccf6024da06 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt @@ -0,0 +1,21 @@ +WEBVTT +Valid horizontal positioning values. + +1 +00:00:00.000 --> 00:00:30.500 position:0% +Bear is Coming!!!!! +Positioning on the left bottom. + +2 +00:00:31.000 --> 00:00:45.500 position:50% +I said Bear is coming!!!! +Positioning on the bottom middle. + +00:00:46.000 --> 00:01:00.500 +I said Bear is coming!!!! +Default positioning on the bottom middle still. + +3 +00:01:01.000 --> 00:02:00.500 position:100% +I said Bear is coming now!!!! +Positioning on the bottom right. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt new file mode 100644 index 00000000000..cbfe6ea6e92 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt @@ -0,0 +1,20 @@ +WEBVTT +Cues settings may only be separated by spaces or tabs, but illegal characters +between settings are ignored. + +1 +00:00:00.000 --> 00:00:30.500 - line:43% position:10% - +Bear is Coming!!!!! Bad separator ignored. + +2 +00:00:31.000 --> 00:01:00.500 --> position:50% Vertical:lr align:end +I said Bear is coming!!!! Bad separator and setting ignored. + +3 +00:01:01.000 --> 00:02:00.500 <align:end> <position:90%> +I said Bear is coming now!!!! Bad setting markup. Not ignored because the settings are +not delimited by spaces or tabs. + +4 +00:02:01.000 --> 100:20:00.500 / vertical:lr | position:90% +I said Bear is coming now!!!! Bad separator ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt new file mode 100644 index 00000000000..dd6b02296af --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt @@ -0,0 +1,18 @@ +WEBVTT +Cue settings may be separated by spaces or tabs. + +1 +00:00:00.000 --> 00:00:30.500 line:100% align:start +Bear is Coming!!!!! One blank. + +2 +00:00:31.000 --> 00:01:00.500 position:40% vertical:rl line:15% +I said Bear is coming!!!! Several blanks. + +3 +00:01:01.000 --> 00:02:00.500 align:middle position:10% +I said Bear is coming now!!!! Tab separator. + +4 +00:02:01.000 --> 100:20:00.500 line:95% vertical:lr align:end +I said Bear is coming now!!!! Tab separators.
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt new file mode 100644 index 00000000000..9815b111da5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt @@ -0,0 +1,17 @@ +WEBVTT + +0 +00:00:04.000 --> 00:00:04.500 +First cue + +1 +00:00:04.500 --> 00:00:05.000 +Lorem + +2 +00:00:05.000 --> 00:00:05.500 +ipsum + +3 +00:00:05.500 --> 00:00:05.501 +Missed cue with pause-on-exit diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt new file mode 100644 index 00000000000..438ea6abf99 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt @@ -0,0 +1,34 @@ +WEBVTT +Enter and exit events should be dispatched in a sorted order according to their times. + +0 +00:00:04.000 --> 00:00:04.500 +Missed cue that should not be considered because of seeking. + +1 +00:00:05.100 --> 00:00:05.800 align:start position:20% +Bear is Coming!!!!! + +2 +00:00:05.100 --> 00:00:05.101 +Missed cue 1 + +3 +00:00:05.100 --> 00:00:05.301 +And what kind of a bear it is - just have look. + +4 +00:00:05.100 --> 00:00:05.101 +Missed Cue 2 + +5 +00:00:05.300 --> 00:00:05.800 align:start position:20% +I said Bear is coming!!!! + +6 +00:00:05.990 --> 00:00:05.993 align:start position:20% +I said Bear is coming now!!!! + +7 +00:00:05.994 --> 00:00:05.998 align:start position:20% +Bear is already here diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt new file mode 100644 index 00000000000..4479cdb722f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <timestamp> markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This <00:00:05.000>cue <00:00:10.000>is <00:00:12.000>painted <00:00:08.000>on. +But since the last two timestamps are out of order, they are ignored. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +I <00:00:20.000>said <00:00:22.000>Bear <00:00:24.000>is <00:00:26.000>coming!!!! +All of these timestamps are before the start of the cue, so get ignored. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I <00:02:05.000>said <00:02:10.000>Bear <00:02:15.000>is <00:02:20.000>coming <00:02:25.000>now!!!! +All of these timestamps are after the end of the cue, so get ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt new file mode 100644 index 00000000000..17d464bfedf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt @@ -0,0 +1,14 @@ +WEBVTT +Paint-on text in cues with <timestamp> markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This <00:00:05.000>cue <00:00:10.000>is <00:00:15.000>painted <00:00:20.000>on. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +I <00:00:35.000>said <00:00:40.000>Bear <00:00:45.000>is <00:00:50.000>coming!!!! + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I <00:01:05.000>said <00:01:10.000>Bear <00:01:15.000>is <00:01:20.000>coming <00:01:25.000>now!!!! diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt new file mode 100644 index 00000000000..c33f8a96c3f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt @@ -0,0 +1,22 @@ +WEBVTT +These timings all have errors and all cues should be ignored. + +1 +00:00.00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00:500 +I said Bear is coming!!!! + +3 +00:01:01.000 --> 00:120:00.500 +I said Bear is coming now!!!! + +4 +00:02:01.000 - 00:03:00.500 +I said Bear is coming now!!!! + +5 +00h:03m:01s.000ms --> 00h:03m:00s.500ms +I said Bear is coming now!!!! diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt new file mode 100644 index 00000000000..b708b83338a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt @@ -0,0 +1,14 @@ +WEBVTT +Timings can optionally contain an hour. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +3 +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt new file mode 100644 index 00000000000..e4bf27d4e6c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt @@ -0,0 +1,22 @@ +WEBVTT +These timings all have errors and all cues should be ignored. + +1 +00.00.000 --> 00:30.500 +Bear is Coming!!!!! + +2 +00:31.000 --> 01:00:500 +I said Bear is coming!!!! + +3 +01:01.000 --> 120:00.500 +I said Bear is coming now!!!! + +4 +01:01.000 - 02:00.500 +I said Bear is coming now!!!! + +5 +02:01.000 --> 03m:00.500 +I said Bear is coming now!!!! diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt new file mode 100644 index 00000000000..745c34ff9fd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt @@ -0,0 +1,18 @@ +WEBVTT +The hour of a timestamp is optional. + +1 +00:00.000 --> 00:30.500 +Bear is Coming!!!!! + +2 +00:31.000 --> 01:00.500 +I said Bear is coming!!!! + +3 +01:01.000 --> 02:00.500 +I said Bear is coming now!!!! + +4 +02:01.000 --> 03:00.500 +tab separators
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt new file mode 100644 index 00000000000..9d9ac9a38a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt @@ -0,0 +1,51 @@ +WEBVTT +Whitespace (U+0020, U+0009, U+000C) surrounding cue-timings separator ("-->") is optional + +1 +00:00:00.100 -->00:00:01.500 +Single U+0020 SPACE left of cue-timings separator + +2 +00:00:00.100--> 00:00:01.500 +Single U+0020 SPACE right of cue-timings separator + +3 +00:00:00.100 -->00:00:01.500 +Single U+0009 TAB left of cue-timings separator + +4 +00:00:00.100--> 00:00:01.500 +Single U+0009 TAB right of cue-timings separator + +5 +00:00:00.100-->00:00:01.500 +Single U+000C FORM FEED left of cue-timings separator + +6 +00:00:00.100-->00:00:01.500 +Single U+000C FORM FEED right of cue-timings separator + +7 +00:00:00.100 -->00:00:01.500 +Several U+0020 SPACE left of cue-timings separator + +8 +00:00:00.100--> 00:00:01.500 +Several U+0020 SPACE right of cue-timings separator + +9 +00:00:00.100 -->00:00:01.500 +Several U+0009 TAB left of cue-timings separator + +10 +00:00:00.100--> 00:00:01.500 +Several U+0009 TAB right of cue-timings separator + +11 +00:00:00.100-->00:00:01.500 +Several U+000C FORM FEED left of cue-timings separator + +12 +00:00:00.100-->00:00:01.500 +Several U+000C FORM FEED right of cue-timings separator + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt new file mode 100644 index 00000000000..b4ea7ea09b5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt @@ -0,0 +1,23 @@ +WEBVTT +Any HTML markup that is not supported should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<h1>Bear is Coming!!!!!</h1> +<p>And what kind of a bear it is - just have <a href="webpage.html">look</a>.</p> + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<ul> + <li>I said Bear is coming!!!!</li> + <li>I said Bear is still coming!!!!</li> +</ul> + + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +<ol> + <li>I said Bear is coming now!!!!</li> + <li><img src="bear.png" alt="mighty bear"></li> + <li><video src="bear_ad.webm" controls></video></li> +</ol>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt new file mode 100644 index 00000000000..8dd8f279488 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt @@ -0,0 +1,10 @@ +WEBVTT +UTF-8 encoded characters should be recognized. + +1 +00:00:00.000 --> 00:00:30.500 +景気判断 + +2 +00:00:31.000 --> 00:20:00.500 +電力不足
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt new file mode 100644 index 00000000000..8e7b3b738dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid vertical direction settings (all settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 vertical:#vertical +Bear is Coming!!!!! +Normal rendering - direction setting is ignored. + +2 +00:00:31.000 --> 00:01:00.500 vertical:verticallr +I said Bear is coming!!!! +Normal rendering - direction setting is ignored. + +3 +00:01:01.000 --> 00:02:00.500 vertical:vertical-rl +I said Bear is coming now!!!! +Normal rendering - direction setting is ignored. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt new file mode 100644 index 00000000000..74838369d23 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt @@ -0,0 +1,20 @@ +WEBVTT +Valid vertical direction settings. + +1 +00:00:00.000 --> 00:00:30.500 vertical:rl +الدب قادم!!!!! +يجعل على الجانب الأيمن من المعاينة الفيديو والمتوسطة الانحياز ، +أسفل إلى أعلى، وتزايد اليسار. + +2 +00:00:31.000 --> 00:01:00.500 vertical:lr +قلت الدب قادم!! +يجعل على الجانب الأيسر من المعاينة الفيديو والمتوسطة الانحياز ، +أسفل إلى أعلى، وتنامي اليمين. + +3 +00:01:01.000 --> 00:02:00.500 vertical:rl align:start position:0% +قلت الدب قادم الآن!! +يجعل على الجانب الأيمن من المعاينة الفيديو ، على حد سواء أسفل محاذاة +لمربع جديلة والنص داخل النص ، من أسفل إلى أعلى، وتزايد اليسار. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt new file mode 100644 index 00000000000..f757a365e36 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt @@ -0,0 +1,20 @@ +WEBVTT +Valid vertical direction settings. + +1 +00:00:00.000 --> 00:00:30.500 vertical:rl +Bear is Coming!!!!! +Renders on the right side of the video viewport, middle aligned, +top to bottom, growing left. + +2 +00:00:31.000 --> 00:01:00.500 vertical:lr +I said Bear is coming!!!! +Renders on the left side of the video viewport, middle aligned, +top to bottom, growing right. + +3 +00:01:01.000 --> 00:02:00.500 vertical:rl align:start position:0% +I said Bear is coming now!!!! +Renders on the right side of the video viewport, top aligned both +for the cue box and the text within, text from top to bottom, growing left. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt new file mode 100644 index 00000000000..12ffdeb82ef --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <v> voice markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +< v Speaker>Bear is Coming!!!!!</v> +This is two annotations for an empty tag. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<v&Doe Hunter>I said Bear is coming!!!!</v> +This does not parse as a voice tag. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <v-Speaker>Bear is coming now</v>!!!! +This does not parse as a voice tag. diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt new file mode 100644 index 00000000000..d6cfc6887ff --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt @@ -0,0 +1,15 @@ +WEBVTT +Cue text fragment with <v> voice markup mapped to HTML <q> element with @title for annotation. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<v.blue Speaker>Bear is Coming!!!!!</v> +Text span with a class and an annotation. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<v Doe Hunter>I said Bear is coming!!!!</v> + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <v.blue Speaker>Bear is coming now</v>!!!! diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm Binary files differnew file mode 100644 index 00000000000..c626f86e336 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt new file mode 100644 index 00000000000..0c1a5fb158c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt @@ -0,0 +1,9 @@ +WEBVTT FILE + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt new file mode 100644 index 00000000000..dacc215409c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt @@ -0,0 +1,10 @@ +WEBVTT asdfasdfauhio +Rubbish after the WEBVTT header should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html new file mode 100644 index 00000000000..67ab3bdb138 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<title>Ensure that no text track cues are active after the video is unloaded</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var eventCount = 0; + + function eventCallback() { + eventCount++; + if (eventCount == 3) { + assert_equals(trackElement.track.activeCues.length, 1); + video.src = ''; + } + } + + var video = document.createElement('video'); + video.src = getVideoURI('/media/movie_5'); + var trackElement = document.createElement('track'); + + trackElement.onload = t.step_func(eventCallback); + trackElement.oncuechange = t.step_func(eventCallback); + video.oncanplaythrough = t.step_func(eventCallback); + + video.onerror = t.step_func_done(function() { + assert_equals(event.target, video); + assert_not_equals(video.error, null); + assert_equals(video.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); + assert_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE); + assert_equals(trackElement.track.activeCues.length, 0); + }); + + trackElement.src = 'resources/captions-fast.vtt'; + trackElement.kind = 'captions'; + trackElement.default = true; + video.appendChild(trackElement); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html new file mode 100644 index 00000000000..1e6c557fb60 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html @@ -0,0 +1,92 @@ +<!DOCTYPE html> +<title>TextTrack's addCue and removeCue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement("video"); + var trackElement = document.createElement("track"); + + trackElement.onload = t.step_func_done(function() { + var cues = trackElement.track.cues; + // Test cues loaded from the file. + assert_equals(cues.length, 4); + assert_equals(cues.getCueById("1").startTime, 0); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 61); + assert_equals(cues.getCueById("4").startTime, 121); + assert_object_equals(cues.getCueById("junk"), undefined); + + // Create a new cue, check values. + var textCue = new VTTCue(33, 3.4, "Sausage?"); + assert_equals(textCue.track, null); + assert_equals(textCue.id, ""); + assert_equals(textCue.startTime, 33); + assert_equals(textCue.endTime, 3.4); + assert_equals(textCue.pauseOnExit, false); + assert_equals(textCue.vertical, ""); + assert_equals(textCue.snapToLines, true); + assert_equals(textCue.line, "auto"); + assert_equals(textCue.position, "auto"); + assert_equals(textCue.size, 100); + assert_equals(textCue.align, "center"); + + // Remove the unadded track, make sure it throws correctly. + assert_throws("NotFoundError", function() { trackElement.track.removeCue(textCue); }); + + // Add the new cue to a track, make sure it is inserted correctly. + trackElement.track.addCue(textCue); + assert_equals(textCue.track, trackElement.track); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 33); + assert_equals(cues[3].startTime, 61); + + // create a new cue and add it to a track created with + // video.addTextTrack, make sure it is inserted correctly. + var newTrack = video.addTextTrack("subtitles", "French subtitles", "fr"); + newTrack.mode = "showing"; + var newCue = new VTTCue(0, 1, "Test!"); + newTrack.addCue(newCue); + assert_equals(newCue, newTrack.cues[0]) + assert_equals(newCue.track, newTrack); + assert_equals(newCue.id, ""); + assert_equals(newCue.startTime, 0); + assert_equals(newCue.endTime, 1); + assert_equals(newCue.pauseOnExit, false); + assert_equals(newCue.vertical, ""); + assert_equals(newCue.snapToLines, true); + assert_equals(newCue.line, "auto"); + assert_equals(newCue.position, "auto"); + assert_equals(newCue.size, 100); + assert_equals(newCue.align, "center"); + + trackElement.track.removeCue(textCue); + assert_equals(textCue.track, null); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 61); + + // Remove a cue added from the WebVTT file. + textCue = cues[2]; + trackElement.track.removeCue(textCue); + assert_equals(textCue.track, null); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 121); + + // Try to remove the cue again. + assert_throws("NotFoundError", function() { trackElement.track.removeCue(textCue); }); + + // Add a cue before all the existing cues. + trackElement.track.addCue(new VTTCue(0, 31, "I am first")); + assert_equals(cues[0].startTime, 0); + assert_equals(cues[0].endTime, 31); + assert_equals(cues[1].startTime, 0); + assert_equals(cues[1].endTime, 30.5); + assert_equals(cues[2].startTime, 31); + }); + + trackElement.src = "resources/settings.vtt"; + trackElement.kind = "captions"; + trackElement.default = true; + video.appendChild(trackElement); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html new file mode 100644 index 00000000000..7f8ee2fdd47 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>'addtrack' event is fired when a TextTrack is created</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement('video'); + + var trackElement = document.createElement('track'); + video.appendChild(trackElement); + var tracks = []; + tracks.push(trackElement.track); + + // Register the 'addtrack' listener after creating the element + // to make sure the event is dispatched asynchronously. + video.textTracks.onaddtrack = t.step_func(function() { + assert_equals(event.target, video.textTracks); + assert_true(event instanceof TrackEvent, 'instanceof'); + assert_equals(event.track, tracks[video.textTracks.length - 1]); + + if (video.textTracks.length == 1) { + tracks.push(video.addTextTrack('captions', 'Caption Track', 'en')); + assert_equals(video.textTracks.length, 2); + } else { + t.done(); + } + }); + + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + assert_equals(video.textTracks.length, 1); + assert_equals(trackElement.readyState, HTMLTrackElement.NONE); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html new file mode 100644 index 00000000000..4503a06bb2c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>addTextTrack() only accepts known "kind" values</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var trackCount = 0; + + function addTrack(type) { + video.addTextTrack(type); + assert_equals(video.textTracks.length, ++trackCount); + } + + var video = document.createElement("video"); + assert_equals(video.textTracks.length, 0); + assert_throws(new TypeError(), function() { video.addTextTrack("kaptions"); }); + assert_equals(video.textTracks.length, 0); + + addTrack("subtitles"); + addTrack("captions"); + addTrack("descriptions"); + addTrack("chapters"); + addTrack("metadata"); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html new file mode 100644 index 00000000000..59f8fc6c7b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Invoke getCueAsHTML() on an empty cue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var emptyCue = new VTTCue(0, 0, ""); + var fragment = emptyCue.getCueAsHTML(); + + // The getCueAsHTML() method should return a document fragment. + assert_true(fragment instanceof DocumentFragment); + + // The document fragment should have one child, an empty Text node. + assert_equals(fragment.childNodes.length, 1); + assert_equals(fragment.childNodes[0].constructor.name, Text.name); + assert_equals(fragment.childNodes[0].length, 0); + assert_equals(fragment.childNodes[0].data, ""); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html new file mode 100644 index 00000000000..3b4c3542a92 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Add a track and change its mode through JS</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <source src="/media/test.mp4" type="video/mp4"> + <source src="/media/test.ogv" type="video/ogg"> +</video> +<script> +test(function() { + var video = document.querySelector('video'); + var track = video.addTextTrack('captions', 'English', 'en'); + track.addCue(new VTTCue(0.0, 10.0, 'wow wow')); + track.mode = 'showing'; +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html new file mode 100644 index 00000000000..713e7819962 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<title>Cue fragment is mutable</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +p, div { display: none; } +</style> +<video> + <track src="resources/captions-html.vtt" kind="captions" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.oncanplaythrough = t.step_func(testMutability); + testTrack.onload = t.step_func(testMutability); + + var fragment; + var eventCount = 0; + function testMutability() { + eventCount++; + if (eventCount != 2) + return; + + var testCue = testTrack.track.cues[0]; + + // Test initial cue contents. + assert_equals(testCue.text, "Lorem <b>ipsum</b> <u>dolor</u> <i.sit>sit</i> amet,"); + + // Cue getCueAsHTML() should return a correct fragment. + createExpectedFragment(document.createDocumentFragment()); + assert_true(fragment.isEqualNode(testCue.getCueAsHTML())); + + // Appending getCuesAsHTML() twice to the DOM should be succesful. + document.getElementsByTagName("div")[0].appendChild(testCue.getCueAsHTML()); + document.getElementsByTagName("div")[1].appendChild(testCue.getCueAsHTML()); + + createExpectedFragment(document.createElement("div")); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[0])); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[1])); + + // The fragment returned by getCuesAsHTML() should be independently mutable. + document.getElementsByTagName("div")[0].firstChild.textContent = "Different text "; + assert_false(fragment.isEqualNode(document.getElementsByTagName("div")[0])); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[1])); + + // Calling twice getCueAsHTML() should not return the same fragment. + assert_not_equals(testCue.getCueAsHTML(), testCue.getCueAsHTML()); + + t.done(); + } + + function createExpectedFragment(rootNode) { + fragment = rootNode; + fragment.appendChild(document.createTextNode("Lorem ")); + + var bold = document.createElement("b"); + bold.appendChild(document.createTextNode("ipsum")); + fragment.appendChild(bold); + + fragment.appendChild(document.createTextNode(" ")); + + var underline = document.createElement("u"); + underline.appendChild(document.createTextNode("dolor")); + fragment.appendChild(underline); + + fragment.appendChild(document.createTextNode(" ")); + + var italics = document.createElement("i"); + italics.className = "sit"; + italics.appendChild(document.createTextNode("sit")); + fragment.appendChild(italics); + + fragment.appendChild(document.createTextNode(" amet,")); + } + + video.src = getVideoURI("/media/counting"); + }); + </script> +</video> +<p>Fragment 1</p> +<div></div> +<p>Fragment 2</p> +<div></div>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html new file mode 100644 index 00000000000..63c3018aa99 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html @@ -0,0 +1,99 @@ +<!DOCTYPE html> +<title>Modifying attributes of a VTTCue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track id="captions" src="resources/captions.vtt" kind="captions" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var cues = track.track.cues; + + // Test initial values. + textCue = cues.getCueById("1"); + + assert_equals(textCue.startTime, 0); + assert_equals(textCue.endTime, 1.0); + assert_equals(textCue.pauseOnExit, false); + assert_equals(textCue.vertical, ""); + assert_equals(textCue.snapToLines, true); + assert_equals(textCue.line, "auto"); + assert_equals(textCue.position, "auto"); + assert_equals(textCue.size, 100); + assert_equals(textCue.align, "center"); + + // Modify cue values. + textCue.startTime = 1.1; + assert_equals(textCue.startTime, 1.1); + + textCue.endTime = 3.9; + assert_equals(textCue.endTime, 3.9); + + textCue.pauseOnExit = true; + assert_equals(textCue.pauseOnExit, true); + + // http://dev.w3.org/html5/webvtt/#dfn-dom-vttcue-vertical + // On setting, the text track cue writing direction must be + // set to the value given in the first cell of the row in + // the table above whose second cell is a case-sensitive + // match for the new value. + textCue.vertical = "RL"; + assert_equals(textCue.vertical, ""); + textCue.vertical = "rl"; + assert_equals(textCue.vertical, "rl"); + + textCue.snapToLines = false; + assert_equals(textCue.snapToLines, false); + + // http://dev.w3.org/html5/webvtt/#dfn-vttcue-line + // On setting, the text track cue line position must be set + // to the new value; if the new value is the string "auto", + // then it must be interpreted as the special value auto. + assert_equals(textCue.line, "auto"); + assert_throws(new TypeError, function() { textCue.line = "gazonk"; }); + assert_equals(textCue.line, "auto"); + textCue.line = 42; + assert_equals(textCue.line, 42); + textCue.line = -2; + assert_equals(textCue.line, -2); + textCue.line = 102; + assert_equals(textCue.line, 102); + textCue.snapToLines = true; + textCue.line = -2; + assert_equals(textCue.line, -2); + textCue.line = 102; + assert_equals(textCue.line, 102); + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-line + // On setting, if the new value is negative or greater than 100, + // then throw an IndexSizeError exception. + // Otherwise, set the text track cue text position to the new value. + assert_throws("IndexSizeError", function() { textCue.position = -200; }); + assert_throws("IndexSizeError", function() { textCue.position = 110; }); + textCue.position = 11; + assert_equals(textCue.position, 11); + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-size + // On setting, if the new value is negative or greater than 100, + // then throw an IndexSizeError exception. + // Otherwise, set the text track cue size to the new value. + assert_throws("IndexSizeError", function() { textCue.size = -200 }); + assert_throws("IndexSizeError", function() { textCue.size = 110 }); + textCue.size = 57; + assert_equals(textCue.size, 57); + + // http://dev.w3.org/html5/webvtt/#dfn-dom-vttcue-align + // On setting, the text track cue text alignment must be + // set to the value given in the first cell of the row + // in the table above whose second cell is a case-sensitive + // match for the new value. + textCue.align = "End"; + assert_equals(textCue.align, "center"); + textCue.align = "end"; + assert_equals(textCue.align, "end"); + }); + }); + </script> +</video> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html new file mode 100644 index 00000000000..043c941b123 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<title>Events are triggered for missed (skipped) cues during normal playback</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/missed-cues.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/test"); + + video.onended = t.step_func_done(); + + video.oncanplaythrough = t.step_func(function() { + video.oncanplaythrough = null; + video.currentTime = 5.00; + runTests(); + }); + + testTrack.onload = t.step_func(runTests); + + var cueCount; + var eventCount = 0; + function runTests() { + eventCount++; + + if(eventCount != 2) + return; + + assert_equals(testTrack.track.cues.length, 7); + + for (cueCount = 2; cueCount < testTrack.track.cues.length; cueCount++) { + var cue = testTrack.track.cues[cueCount]; + + cue.onenter = t.step_func(cueEnteredOrExited); + cue.onexit = t.step_func(cueEnteredOrExited); + } + + // Test events for missed cues, which are cues with ids + // from 3 to 7 in the file resources/missed-cues.vtt. + cueCount = 3; + video.play(); + } + + function cueEnteredOrExited() { + var currentCue = event.target; + assert_equals(testTrack.track.cues.getCueById(cueCount).text, currentCue.text); + assert_equals(currentCue.id, cueCount.toString()); + + if (event.type == "exit") + cueCount++; + } + + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html new file mode 100644 index 00000000000..eaf7e2a1d4f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Video is paused after cues having pause-on-exit flag are processed</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/simple-captions.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + track.onload = t.step_func(function() { + assert_equals(track.track.cues.length, 4); + for (var i = 0; i < track.track.cues.length; ++i) { + var cue = track.track.cues[i]; + if (i % 2 == 0) { + cue.pauseOnExit = true; + cue.onexit = t.step_func(function(event) { + assert_true(video.paused); + + video.play(); + + if (event.target.id == 2) + t.done(); + }); + } + } + video.src = getVideoURI("/media/test"); + video.currentTime = 4.00; + video.play(); + assert_false(video.paused); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html new file mode 100644 index 00000000000..99cd2d550e8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>TextTrack's activeCues are indexed and updated during video playback</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/cues-overlapping.vtt" kind="subtitles" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + track.onload = t.step_func(function() { + assert_equals(track.track.cues.length, 3); + video.src = getVideoURI("/media/test"); + video.currentTime = 0.5; + }); + + var seekedCount = 0; + video.onseeked = t.step_func(function() { + ++seekedCount; + + assert_equals(video.currentTime, seekedCount * 0.5); + assert_equals(track.track.activeCues.length, seekedCount - 1); + video.currentTime = (seekedCount + 1) * 0.5; + + if (seekedCount == 4) + t.done(); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html new file mode 100644 index 00000000000..edc202f4358 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<title>All events are triggered in chronological order</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/sorted-dispatch.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + video.src = getVideoURI("/media/test"); + var track = document.querySelector("track"); + + track.onload = t.step_func(function() { + var cues = track.track.cues; + assert_equals(cues.length, 8); + + for (var i = 0; i < cues.length; ++i) { + cues[i].onenter = t.step_func(cueEnteredOrExited); + cues[i].onexit = t.step_func(cueEnteredOrExited); + } + + video.play(); + }); + + var cueTimings = []; + function cueEnteredOrExited(event) { + var currentCue = event.target; + + if (event.type == "exit") + cueTimings.push(currentCue.endTime); + else + cueTimings.push(currentCue.startTime); + } + + video.onended = t.step_func_done(function() { + assert_equals(cueTimings.length, 14); + var time = 0; + for (var i = 0; i < cueTimings.length; ++i) { + assert_less_than_equal(time, cueTimings[i], "cueTimings[" + i + "]"); + time = cueTimings[i]; + } + }); + + video.currentTime = 5; + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html new file mode 100644 index 00000000000..038e6f6ba71 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Adding cues to a disabled text track</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var cueDuration = 0.1; + var video = document.createElement("video"); + var track = video.addTextTrack("subtitles"); + track.mode = "disabled"; + + for (var i = 0; i < 10; ++i) { + var start = i * cueDuration; + var end = start + cueDuration; + track.addCue(new VTTCue(start, end, "Test Cue " + i)); + } + + // Waiting for 2 cue durations to elapse. + video.ontimeupdate = t.step_func(function(event) { + if (event.target.currentTime < (2 * cueDuration)) + return; + + // End test after at least 2 cueDurations to make sure the test + // would have gone through the period where the first 2 cues would + // have been rendered if the track was not disabled. + t.done(); + }); + + video.src = getVideoURI("/media/test"); + video.play(); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html new file mode 100644 index 00000000000..d517b9d12c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>Disabling a track</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="subtitles" src="resources/captions.vtt"/> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + video.textTracks[0].mode = "disabled"; + + // Waiting for the duration of the first cue to elapse. + video.ontimeupdate = t.step_func(function (event) { + if (event.target.currentTime < 1) + return; + + // End test after the duration of the first cue to make sure + // the test would have gone through the period where this cue + // would have been rendered if the track was not disabled. + t.done(); + }); + + video.src = getVideoURI("/media/test"); + video.play(); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html new file mode 100644 index 00000000000..ff447f33f2e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Simple DOM mutations with track element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var video = document.createElement("video"); + var testTrack = document.createElement("track"); + + // Append the track element to the video element. + video.appendChild(testTrack); + + // Set the mode of the text track to "showing". + testTrack.track.mode = "showing"; +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html new file mode 100644 index 00000000000..ffc8ec0682d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html @@ -0,0 +1,92 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute mutations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" default> + <script> + async_test(function(t) { + var cues = null; + var testTrack = document.querySelector("track"); + var stage = 0; + var timer = null; + function step_onLoad() { + switch (stage) { + case 0: + cues = testTrack.track.cues; + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after first loading of the track"); + assert_equals(cues.length, 4, "Number of cues after first loading of the track"); + ++stage; + testTrack.src = "resources/non-existing-file.vtt"; // this should fail + break; + case 1: + case 3: + case 5: + assert_unreached("'error' event did not fire, stage = " + stage); + break; + case 2: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after loading of the second track"); + assert_equals(cues.length, 4, "Number of cues after loading of the second track"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + ++stage; + testTrack.src = ""; // this should fail + // CuesList will be cleared in the next tick. Spec claims that this should happen immediately, + // but all implementations are doing this asynchronously. + assert_equals(cues.length, 4, "Number of cues immediately after 'src' mutation with the empty URL"); + // This should raise onError event. If no, we'll know about this after some time. + timer = t.step_timeout(t.unreached_func("'error' event is not fired when an empty URL is set"), 100); + break; + case 4: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after loading of the second track"); + assert_equals(cues.length, 4, "Number of cues after loading of the second track"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + ++stage; + testTrack.removeAttribute('src'); + // This should raise onError event, so we'll wait for it for some time + timer = t.step_timeout(t.unreached_func("'error' event is not fired when an empty URL is set"), 100); + break; + default: + assert_unreached("unexpected stage number = " + stage); + break; + } + } + + function step_onError() { + switch (stage) { + case 0: + case 2: + case 4: + assert_unreached("'error' event fired, stage = " + stage); + break; + case 1: + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 0, "Number of cues after trying to load non-existing url"); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after trying to load non-existing url"); + ++stage; + testTrack.src = "resources/settings.vtt"; + break; + case 3: + clearTimeout(timer); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after setting an empty URL"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 0, "Number of cues with an empty URL set"); + ++stage; + testTrack.src = "resources/settings.vtt"; + break; + case 5: + clearTimeout(timer); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after removing 'src' attr"); + assert_equals(cues.length, 0, "Number of cues after removing 'src' attr"); + t.done(); + break; + default: + assert_unreached("unexpected stage number = " + stage); + break; + } + } + + testTrack.onload = t.step_func(step_onLoad); + testTrack.onerror = t.step_func(step_onError); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html new file mode 100644 index 00000000000..34a53d15319 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute mutations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" default> + <script> + async_test(function(t) { + var cues = null; + var testTrack = document.querySelector("track"); + var stage = 0; + function step_onLoad() { + switch (stage) { + case 0: + cues = testTrack.track.cues; + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after first loading of the track"); + assert_equals(cues.length, 4, "Number of cues after first loading of the track"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + ++stage; + testTrack.src = "resources/entities.vtt"; + // CuesList will be cleared in a microtask. Spec claims that this should happen immediately, + // but all known implementations are doing this asynchronously. + assert_equals(cues.length, 4, "Number of cues immediately after 'src' mutation with the new URL"); + break; + case 1: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED), "readyState after loading of the second track"; + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 7, "Number of cues after loading of the second track"); + assert_equals(cues[cues.length-1].text, 'This & is parsed to the same as &.', "Last cue content check"); + ++stage; + testTrack.src = "resources/settings.vtt"; + break; + case 2: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after after loading of the first track again"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 4, "Number of cues after loading of the first track"); + ++stage; + testTrack.src = "resources/settings.vtt"; + // This should not raise onLoad or onError event, so we'll wait for it for some time + t.step_timeout(t.step_func_done(function() { + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after changing 'src' to the same value"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 4, "Number of cues after changing 'src' to the same value"); + }, 100)); + break; + case 3: + assert_unreached("'load' event should not fire, stage = " + stage); + break; + } + } + + testTrack.onload = t.step_func(step_onLoad); + testTrack.onerror = t.unreached_func("'error' event should not fire"); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js new file mode 100644 index 00000000000..09c85dd7bc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js @@ -0,0 +1,83 @@ +function enableAllTextTracks(textTracks) { + for (var i = 0; i < textTracks.length; i++) { + var track = textTracks[i]; + if (track.mode == "disabled") + track.mode = "hidden"; + } +} + +function assert_cues_equal(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + assert_equals(cues[i].id, expected[i].id); + assert_equals(cues[i].startTime, expected[i].startTime); + assert_equals(cues[i].endTime, expected[i].endTime); + assert_equals(cues[i].text, expected[i].text); + } +} + +function assert_cues_match(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + var cue = cues[i]; + var expectedItem = expected[i]; + for (var property of Object.getOwnPropertyNames(expectedItem)) + assert_equals(cue[property], expectedItem[property]); + } +} + +function assert_cues_html_content(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + var expectedItem = expected[i]; + var property = Object.getOwnPropertyNames(expectedItem)[0]; + var propertyValue = expectedItem[property]; + assert_equals(propertyValue(cues[i]), expectedItem.expected); + } +} + +function check_cues_from_track(src, func) { + async_test(function(t) { + var video = document.createElement("video"); + var trackElement = document.createElement("track"); + trackElement.src = src; + trackElement.default = true; + video.appendChild(trackElement); + + trackElement.onload = t.step_func_done(function() { + func(trackElement.track); + }); + }, "Check cues from " + src); +} + +function assert_cue_fragment(cue, children) { + var fragment = createFragment(children); + assert_true(fragment.isEqualNode(cue.getCueAsHTML())); +} + +function assert_cue_fragment_as_textcontent(cue, children) { + var fragment = createFragment(children); + assert_equals(cue.getCueAsHTML().textContent, fragment.textContent); +} + +function createFragment(children) { + var fragment = document.createDocumentFragment(); + cloneChildrenToFragment(fragment, children); + return fragment; +} + +function cloneChildrenToFragment(root, children) { + for (var child of children) { + var childElement; + if (child.type == "text") { + childElement = document.createTextNode(child.value); + } else { + childElement = document.createElement(child.type); + var styles = child.style || {}; + for (var attr of Object.getOwnPropertyNames(styles)) + childElement[attr] = styles[attr]; + cloneChildrenToFragment(childElement, child.value); + } + root.appendChild(childElement); + } +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html new file mode 100644 index 00000000000..bae1852cf83 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Very large timestamp is parsed correctly</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/large-timestamp.vtt" default> + <script> + async_test(function(t) { + var testTrack = document.querySelector("track"); + testTrack.onload = t.step_func_done(function() { + assert_equals(testTrack.track.cues.length, 1); + var cue = testTrack.track.cues[0]; + assert_equals(parseInt(cue.id), 1); + assert_equals(cue.startTime / 3600, 1234567); + assert_equals(cue.endTime / 3600, 1234567890); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html new file mode 100644 index 00000000000..8e232bff537 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Error event on HTMLTrackElement and ERROR readyState on TextTrack</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="junk" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + track.onerror = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.ERROR); + }); + }); + </script> +</video> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html new file mode 100644 index 00000000000..62a68f65439 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set on the element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/webvtt-file.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + track.onload = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + }); + }); + </script> +</video> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html new file mode 100644 index 00000000000..e569eeb96fd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<title>Load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set from JavaScript</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track> +</video> +<script> +async_test(function(t) { + var track = document.querySelector("track"); + assert_equals(track.readyState, HTMLTrackElement.NONE); + + track.onload = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + }); + + track.src = "resources/webvtt-file.vtt"; + track.track.mode = "hidden"; +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html new file mode 100644 index 00000000000..6b46bf4e344 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Cues are properly removed from the active cue list when their track changes mode to disabled</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/captions-gaps.vtt" kind="captions" default > + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/counting"); + video.oncanplaythrough = t.step_func(startTest); + video.onseeked = t.step_func_done(seeked); + + function startTest() { + // Set the mode of the text track to "showing". + testTrack.track.mode = "showing"; + // Seek to a time with a caption. + video.currentTime = 1.5; + } + + function seeked() { + // Set the mode of the text track to "hidden", then to "showing" again. + testTrack.track.mode = "hidden"; + testTrack.track.mode = "showing"; + + // Set the mode of the text track to "disabled". + testTrack.track.mode = "disabled"; + } + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html new file mode 100644 index 00000000000..2902ba90bc9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<title>A track appended after the initial track configuration does not change other tracks</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="metadata" src="resources/metadata.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector('video'); + + var track1 = document.querySelectorAll('track')[0]; + assert_equals(track1.readyState, HTMLTrackElement.NONE); + assert_equals(track1.track.mode, 'disabled'); + + video.src = getVideoURI('/media/test'); + video.oncanplaythrough = t.step_func(canplaythrough); + track1.onload = t.step_func(metadataTrackLoaded); + + function canplaythrough() { + // check initial metadata track state. + assert_equals(track1.readyState, HTMLTrackElement.NONE); + assert_equals(track1.track.mode, 'disabled'); + assert_equals(track1.track.cues, null); + track1.track.mode = 'hidden'; + } + + function metadataTrackLoaded() { + // check metadata track state. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + assert_equals(track1.track.cues.length, 12); + assert_equals(track1.track.cues[11].startTime, 22); + + // Add a caption track, configured to load automatically. + track2 = document.createElement('track'); + track2.setAttribute('kind', 'captions'); + track2.setAttribute('default', 'default'); + track2.setAttribute('src', 'resources/webvtt-file.vtt'); + track2.onload = t.step_func(captionsTrackLoaded); + video.appendChild(track2); + } + + function captionsTrackLoaded() { + // Check that metadata track state has not changed. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + // and that the caption track state is correct. + assert_equals(track2.readyState, HTMLTrackElement.LOADED); + assert_equals(track2.track.mode, 'showing'); + + video.textTracks.onaddtrack = t.step_func_done(trackAdded); + // add a subtitle track with video.addTextTrack(). + track3 = video.addTextTrack('subtitles', 'Subtitle Track', 'en'); + track3.mode = 'showing'; + } + + function trackAdded() { + // Check that metadata track state has not changed. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + // and that the caption track state has not changed. + assert_equals(track2.readyState, HTMLTrackElement.LOADED); + assert_equals(track2.track.mode, 'showing'); + // and that the subtitle track state is correct. + assert_equals(event.target, video.textTracks); + assert_true(event instanceof window.TrackEvent); + assert_equals(event.track, video.textTracks[video.textTracks.length - 1]); + assert_equals(track3.mode, 'showing'); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html new file mode 100644 index 00000000000..2e29d704690 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>A "metadata" track does not load automatically, but it does load when the mode is changed</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="metadata" src="resources/metadata.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + // Check initial metadata track state. + var track = document.querySelectorAll("track")[0]; + assert_equals(track.readyState, HTMLTrackElement.NONE); + assert_equals(video.textTracks[0].mode, "disabled"); + + video.src = getVideoURI("/media/test"); + video.oncanplaythrough = t.step_func(canplaythrough); + track.onload = t.step_func_done(trackLoaded); + + function trackLoaded() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + assert_equals(track.track.mode, "hidden"); + assert_equals(video.textTracks[0].cues.length, 12); + assert_equals(video.textTracks[0].cues[11].startTime, 22); + } + + function canplaythrough() { + assert_equals(track.readyState, HTMLTrackElement.NONE); + assert_equals(video.textTracks[0].mode, "disabled"); + assert_equals(video.textTracks[0].cues, null); + // Change metadata track mode so it loads. + video.textTracks[0].mode = "hidden"; + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html new file mode 100644 index 00000000000..29208a33c21 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<title>TextTrack mode attribute</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/captions-fast.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + track.onload = t.step_func(trackLoaded); + + var cueCount = 0; + var textTrack; + function trackLoaded() { + textTrack = track.track; + // Test default attribute value. + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + // Set to bogus value, should return default. + var value = "bogus"; + textTrack.mode = value; + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + + // Set to numeric value (no longer supported), should return default. + textTrack.mode = 2; + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + + // Set to known values. + setModeAndCheck("disabled"); + + video.src = getVideoURI("/media/test"); + video.play(); + // Wait for end of first cue (no events should fire while track is disabled). + t.step_timeout(testHiddenAndShowing, 400); + } + + track.oncuechange = t.step_func(function(event) { + cueCount++; + if (cueCount == textTrack.cues.length) + t.done(); + }); + + function setModeAndCheck(value) { + textTrack.mode = value; + assert_equals(textTrack.mode, value); + assert_equals(video.textTracks[0].mode, value); + if (value == "disabled") + assert_equals(textTrack.cues, null); + } + + function testHiddenAndShowing() { + setModeAndCheck("hidden"); + setModeAndCheck("showing"); + } + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html new file mode 100644 index 00000000000..176e0065c59 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Removing an active cue</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video></video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + video.src = getVideoURI("/media/test"); + + // Add a text track to the video element. + video.addTextTrack("captions", "regular captions track", "en"); + + // Add a cue to the track with enter event listener. + var cue = new VTTCue(0, 4, "Random"); + cue.onenter = t.step_func_done(removeActiveCue); + + var track = video.textTracks[0]; + track.addCue(cue); + + function removeActiveCue() { + assert_equals(track.activeCues.length, 1); + + // Remove the cue while it is active. + track.removeCue(track.activeCues[0]); + + // No crash. PASS. + } + + // Play the video and remove cue when it becomes active. + video.play(); + track.mode = "showing"; +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html new file mode 100644 index 00000000000..95929bc83fb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>Removing a track by setting video.innerHTML doesn't crash</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track default src="resources/captions-gaps.vtt"> + <script> + // https://bugs.webkit.org/show_bug.cgi?id=100981 + async_test(function(t) { + var firstSeek = true; + var video = document.querySelector('video'); + video.onseeked = t.step_func(function() { + if (!firstSeek) { + t.done(); + return; + } + + // Remove the text track + video.innerHTML = ''; + + // Seek again to force a repaint. + video.currentTime = 7.9; + firstSeek = false; + }); + + video.currentTime = 0.5; + video.src = getVideoURI('/media/counting'); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html new file mode 100644 index 00000000000..1c854aca0ed --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<title>Attaching a media element again to the document, having a child track that failed loading doesn't block video from playing</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-webvtt.vtt" kind="captions" default> + <script> + async_test(function(t) { + var video = document.querySelector('video'); + video.src = getVideoURI('/media/test'); + video.oncanplaythrough = t.step_func(canplaythrough); + + function canplaythrough() { + video.oncanplaythrough = null; + var track = document.querySelector('track'); + + // Track should have error as ready state. + assert_equals(track.readyState, HTMLTrackElement.ERROR); + + // Remove the video element from body. + document.body.removeChild(video); + + // Reset the video src attribute to re-trigger resource selection for tracks. + video.src = getVideoURI('/media/test'); + + // Append the video element back to the body. + document.body.appendChild(video); + + assert_equals(track.readyState, HTMLTrackElement.ERROR); + + video.onplaying = t.step_func_done(); + video.play(); + // The video should start playing. + } + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html new file mode 100644 index 00000000000..4be040c5f87 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>Removing a track element before it has been processed doesn't crash</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="video_container"></div> +<script> +var mediaFile = getVideoURI("/media/test"); +document.getElementById("video_container").innerHTML = "<video src='" + mediaFile + "' controls ><track kind='captions' src='resources/simple-captions.vtt' default ></video>"; +test(function() { +// https://bugs.webkit.org/show_bug.cgi?id=85095 +// Test passes if it doesn't crash. +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html new file mode 100644 index 00000000000..29938e31029 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html @@ -0,0 +1,105 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <script src="/common/media.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + async_test(function(test) + { + var video = document.createElement("video"); + var track; + + function trackRemoved() + { + assert_equals(event.target, video.textTracks); + assert_equals(event instanceof window.TrackEvent, true); + assert_equals(event.track, track); + test.done(); + } + + var trackElement = document.createElement('track'); + video.appendChild(trackElement); + + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + + assert_equals(video.textTracks.length, 1); + + track = video.textTracks[0]; + video.removeChild(trackElement); + video.textTracks.addEventListener("removetrack", test.step_func(trackRemoved)); + }, "Tests that the 'removetrack' event is fired when an out-of-band TextTrack is removed."); + + async_test(function(test) + { + var video = document.createElement("video"); + + // Create an out-of-band text track by adding a track element. + var trackElement = document.createElement('track'); + + trackElement.addEventListener("error", test.step_func(function() + { + assert_unreached("'error' event on track element should not fire.") + })); + + video.appendChild(trackElement); + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + + assert_equals(video.textTracks.length, 1); + var outOfBandTrack = video.textTracks[0]; + + // Load a media file with an inband text track. + var inbandTrack = null; + var url = "resources/vp8-vorbis-webvtt.webm" + + var firstAddTrackHandler = test.step_func(function() + { + assert_equals(event.target, video.textTracks); + assert_equals(event instanceof window.TrackEvent, true); + if (event.track == outOfBandTrack) { + return; + } + + assert_equals(inbandTrack, null); + assert_equals(video.textTracks.length, 2); + assert_equals(event.track, video.textTracks[1]); + inbandTrack = event.track; + + video.textTracks.removeEventListener("addtrack", firstAddTrackHandler); + + // Clear .src to force the inband track to get destroyed. + video.src = ""; + + // Verify that the inband track was removed. + assert_not_equals(inbandTrack, null); + assert_equals(video.textTracks.length, 1); + assert_equals(video.textTracks[0], outOfBandTrack); + + // Load the URL again to trigger another 'addtrack' event to make sure + // no 'removetrack' event was queued. + video.src = url; + video.textTracks.addEventListener("addtrack", test.step_func(function() + { + assert_equals(video.textTracks.length, 2); + test.done(); + })); + }); + video.textTracks.addEventListener("addtrack", firstAddTrackHandler); + + video.textTracks.addEventListener("removetrack", test.step_func(function() + { + assert_unreached("'removetrack' event should not fire.") + })); + + video.src = url; + }, "Tests that the 'removetrack' event is NOT fired for inband TextTrack on a failed load."); + + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html new file mode 100644 index 00000000000..07ebfd622b0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<title>Cue text position and alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/align-positioning.vtt"> + <track src="resources/align-positioning-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { position : 10, align : "start" }, + { position : 20, align : "center" }, + { position : 80, align : "end" } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { position : 10, align : "center" }, + { position : "auto", align : "center" }, + { position : "auto", align : "center" } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html new file mode 100644 index 00000000000..deb389916ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<title>Cue alignment, line and text position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/align-text-line-position.vtt"> + <track src="resources/align-text-line-position-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { align : "start", position : 10, line : 0, snapToLines : false }, + { align : "start", position : "auto", line : 0, snapToLines : true }, + { align : "center", position : 80, line : 80, snapToLines : false }, + { align : "end", position : 30, line : 5, snapToLines : true }, + { align : "center", position : 60, line : -3, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { align : "center", position : "auto", line : "auto", snapToLines : true }, + { align : "end", position : 0, line : "auto", snapToLines : true }, + { align : "center", position : 60, line : -3, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html new file mode 100644 index 00000000000..e8f47e876a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>Cue alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/alignment.vtt", testTrack); +check_cues_from_track("resources/alignment-ltr.vtt", testTrack); + +check_cues_from_track("resources/alignment-bad.vtt", function(track) { + var expected = [ + { align: "center" }, + { align: "center" }, + { align: "center" }, + { align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { align: "start" }, + { align: "center" }, + { align: "end" }, + { align: "center" } + ]; + + assert_cues_match(track.cues, expected); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html new file mode 100644 index 00000000000..114aebc38c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cues are affected neither by multiple newlines \n, \r, and \r\n nor by the absence of a seperating line</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cues.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "2", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "3", startTime: 61, endTime: 361200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cues-no-separation.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!\n2" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 361200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html new file mode 100644 index 00000000000..c138f96af57 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Parser properly ignores a UTF-8 BOM character at the beginning of a file and all other cues are properly parsed</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/bom.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + var cues = track.track.cues; + assert_equals(cues.length, 2); + assert_cues_equal(cues, expected); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html new file mode 100644 index 00000000000..fe3c868c587 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<title>Tests cues with class markup <c>.</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/class.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", style: { className: "black" }, + value: [ { type: "text", value: "Bear is Coming!!!!!" } ] } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { className: "green" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "red uppercase" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); +}); + +check_cues_from_track("resources/class-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", value: [ { type: "text", value: "Bear is Coming!!!!!" } ] }, + { type: "text", value: "\nThe space signified an annotation start." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { className: "red&large" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] }, + { type: "text", value: "\nProbably should only allow characters that CSS allows in class names." } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "9red upper+case" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!\nProbably should only allow characters that CSS allows in class names." } + ]; + assert_cue_fragment(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html new file mode 100644 index 00000000000..02b0a15187a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>Any text other than "-->" is recognized as optional cue identifier</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-id.vtt", function(track) { + var expected = [ + { id: "random_id", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "another random identifier", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "identifier--too", startTime: 61, endTime: 120.5, text: "I said Bear is coming now!!!!" }, + { id: "identifier--too", startTime: 121, endTime: 180.5, text: "Duplicate identifier" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-id-error.vtt", function(track) { + var expected = [ + { id: "", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 1200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html new file mode 100644 index 00000000000..b2f4b770831 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Empty cue identifiers, but having "-->" leads to discarded cue</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-no-id.vtt", testTrack); +check_cues_from_track("resources/cue-no-id-error.vtt", testTrack); + +function testTrack(track) { + var expected = [ + { id: "", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 1200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html new file mode 100644 index 00000000000..6a104916b7c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>A cue is recovered when a line with a "-->" is encountered without blank line separator</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-recovery-header.vtt", testTrack); +check_cues_from_track("resources/cue-recovery-note.vtt", testTrack); +check_cues_from_track("resources/cue-recovery-cuetext.vtt", testTrack); + +function testTrack(track) { + var expected = [ + { startTime: 0, endTime: 1, text: "Valid cue 1" }, + { startTime: 2, endTime: 3, text: "Valid cue 2" } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html new file mode 100644 index 00000000000..a1243a95e7d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cue size and alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-size-align.vtt", function(track) { + var expected = [ + { size: 100, align: "start" }, + { size: 10, align: "end" }, + { size: 0, align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-size-align-bad.vtt", function(track) { + var expected = [ + { size: 100, align: "center" }, + { size: 100, align: "end" }, + { size: 100, align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html new file mode 100644 index 00000000000..d8e03edce7f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cue size from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-size.vtt", function(track) { + var expected = [ + { size: 100 }, + { size: 10 }, + { size: 0 } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-size-bad.vtt", function(track) { + var expected = [ + { size: 100 }, + { size: 100 }, + { size: 100 } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html new file mode 100644 index 00000000000..8d2569993c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Degenerate cues without separating blank lines</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/degenerate-cues.vtt", function(track) { + var expected = [ + { startTime: 0, endTime: 1, text: "" }, + { startTime: 2, endTime: 3, text: "" }, + { startTime: 4, endTime: 5, text: "" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html new file mode 100644 index 00000000000..e1f55702500 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Empty cues should not be discarded</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/empty-cue.vtt", function(track) { + assert_equals(track.cues.length, 3); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html new file mode 100644 index 00000000000..a5295795ef0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Entities in the cue text</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +var getCueAsHTMLContent = function(cue) { + return cue.getCueAsHTML().textContent; +}; + +check_cues_from_track("resources/entities.vtt", function(track) { + var expected = [ + { innerHTML: getCueAsHTMLContent, + expected: "This cue has an ampersand & character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a less than < character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a greater than > character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a Left-to-Right Mark \u200e." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a Right-to-Left Mark \u200f." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a non-breaking space \u00a0." }, + { innerHTML: getCueAsHTMLContent, + expected: "This & is parsed to the same as &." } + ]; + + assert_cues_html_content(track.cues, expected); +}); + +check_cues_from_track("resources/entities-wrong.vtt", function(track) { + var expected = [ + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a less than ", }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a greater than > character.\nSince it's not related to a < character,\nit's just interpreted as text.", } + ]; + + assert_cues_html_content(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html new file mode 100644 index 00000000000..f9b35576f34 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<title>Optional comment area under the "WEBVTT" file header is properly ignored and also, default settings and styling are currently ignored (treated as faulty cues)</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/default-styles.vtt"> + <track src="resources/metadata-area.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrack(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + assert_cues_equal(video.textTracks[index].cues, expected); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html new file mode 100644 index 00000000000..2287cc2830e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>An empty line after an identifier line discards the current cue and restarts the cue loop</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/interspersed-non-cue.vtt", function(track) { + var expected = [ + { text: "First" }, + { text: "Second" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html new file mode 100644 index 00000000000..bea4acb917a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<title>Cue line position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/line-position.vtt"> + <track src="resources/line-position-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { line : 0, snapToLines : false }, + { line : 0, snapToLines : true }, + { line : 50, snapToLines : false }, + { line : 5, snapToLines : true }, + { line : 100, snapToLines : false }, + { line : -1, snapToLines : true }, + { line : 500, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html new file mode 100644 index 00000000000..ff4637a8a5f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<title>Magic file header "WEBVTT" leads to the file properly recognized as a WebVTT file</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/webvtt-file.vtt"> + <track src="resources/webvtt-rubbish.vtt"> + <track src="resources/no-webvtt.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + trackElements[0].onload = t.step_func(trackLoaded); + trackElements[1].onload = t.step_func(trackLoaded); + trackElements[2].onerror = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 3) + return; + + testTrack(0); + testTrack(1); + testTrackError(2); + t.done(); + } + + function testTrack(index) { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + assert_cues_equal(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + assert_cues_equal(video.textTracks[index].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html new file mode 100644 index 00000000000..2b044379f14 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<title>Cues with <b>, <i>, <u>, <rt> and <ruby> tags</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/markup.vtt", function(track) { + assert_equals(track.cues.length, 4); + + var children = [ + { type: "text", value: "The following bear is bold:\n" }, + { type: "b", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is Coming!!!!!" } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "The following bear is in italics and has a class of \"larger\":\n" }, + { type: "i", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is Coming!!!!!" } + ]; + + var fragment = createFragment(children); + fragment.querySelector("i").className = "larger"; + assert_true(fragment.isEqualNode(track.cues[1].getCueAsHTML())); + + children = [ + { type: "text", value: "The following bear is underlined even though the element has a blank:\nI said " }, + { type: "u", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); + + children = [ + { type: "text", value: "The following bear is ruby annotated:\nI said " }, + { + type: "ruby", + value: [ + { type: "text", value: "Bear" }, + { + type: "rt", + value: [ { type: "text", value: "bear with me" } ] + } + ] + }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[3], children); +}); + +check_cues_from_track("resources/markup-bad.vtt", function(track) { + assert_equals(track.cues.length, 4); + + var children = [ + { type: "text", value: "The following bear starts bold but end is broken:\n" }, + { + type: "b", + value: + [ + { type: "text", value: "Bear" }, + { type: "text", value: " is Coming!!!!!" } + ] + } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "The following bear is not in italics but the markup is removed:\n" }, + { type: "text", value: "Bear" }, + { type: "text", value: " is Coming!!!!!" } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "The following bear is not underlined and markup is removed:\nI said " }, + { type: "text", value : "Bear" }, + { type: "text", value : " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); + + children = [ + { type: "text", value: "The following bear is not ruby annotated and markup is removed:\nI said " }, + { type: "text", value: "Bear" }, + { type: "text", value: "bear with me" }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[3], children); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html new file mode 100644 index 00000000000..4da7e6b1b9c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>A cue with no newline at eof is parsed properly</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-newline-at-eof.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + } + ]; + + assert_cues_equal(track.track.cues, expected); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html new file mode 100644 index 00000000000..a39a2c37aa5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<title>Cue without timings are ignored</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-timings.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + assert_cues_equal(track.track.cues, []); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html new file mode 100644 index 00000000000..d14a5768d3a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Cue text position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/positioning.vtt", testTrack); +check_cues_from_track("resources/positioning-ltr.vtt", testTrack); + +check_cues_from_track("resources/positioning-bad.vtt", function(track) { + var expected = [ + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { position: 0 }, + { position: 50 }, + { position: "auto" }, + { position: 100 } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html new file mode 100644 index 00000000000..9ad98ffa1aa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>WebVTT settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/settings.vtt", function(track) { + var expected = [ + { line: 100, position: "auto", align: "start", vertical: "" }, + { line: 15, position: 40, align: "center", vertical: "rl" }, + { line: "auto", position: 10, align: "center", vertical: "" }, + { line: 95, position: "auto", align: "end", vertical: "lr" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/settings-bad-separation.vtt", function(track) { + var expected = [ + { line: 43, position: 10, align: "center", vertical: "" }, + { line: "auto", position: 50, align: "end", vertical: "" }, + { line: "auto", position: "auto", align: "center", vertical: "" }, + { line: "auto", position: 90, align: "center", vertical: "lr" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html new file mode 100644 index 00000000000..e311f121f25 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>Cues with <timestamps> tags</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/timestamp.vtt", function(track) { + assert_equals(track.cues.length, 3); + + // TODO(srirama.m): Timestamps are handled as ProcessingInstructions, + // but because ProcessingInstructions are used in XML and not HTML, + // they are ignored here. This should later be tested with oncuechange events. + + var children = [ { type: "text", value: "This cue is painted on." } ]; + assert_cue_fragment_as_textcontent(track.cues[0], children); + + children = [ { type: "text", value: "I said Bear is coming!!!!" } ]; + assert_cue_fragment_as_textcontent(track.cues[1], children); + + children = [ { type: "text", value: "I said Bear is coming now!!!!" } ]; + assert_cue_fragment_as_textcontent(track.cues[2], children); +}); + +check_cues_from_track("resources/timestamp-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ { type: "text", value: "This cue is painted on.\nBut since the last two timestamps are out of order, they are ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[0], children); + + children = [ { type: "text", value: "I said Bear is coming!!!!\nAll of these timestamps are before the start of the cue, so get ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[1], children); + + children = [ { type: "text", value: "I said Bear is coming now!!!!\nAll of these timestamps are after the end of the cue, so get ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html new file mode 100644 index 00000000000..c03e182c79e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<title>Cue timings and various syntax errors in timings, with hours</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/timings-hour.vtt"> + <track src="resources/timings-hour-error.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 60.5, + text : "I said Bear is coming!!!!" + }, + { + id : "3", + startTime : 61, + endTime : 361200.5, + text : "I said Bear is coming now!!!!" + } + ]; + + assert_cues_equal(video.textTracks[0].cues, expected); + } + + function testTrack1() { + // Test that all the cues are ignored. + assert_cues_equal(video.textTracks[1].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html new file mode 100644 index 00000000000..e81ae03cc24 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<title>Cue timings and various syntax errors in timings, without hours</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/timings-no-hour.vtt"> + <track src="resources/timings-no-hour-errors.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 60.5, + text : "I said Bear is coming!!!!" + }, + { + id : "3", + startTime : 61, + endTime : 120.5, + text : "I said Bear is coming now!!!!" + }, + { + id : "4", + startTime : 121, + endTime : 180.5, + text : "tab separators" + } + ]; + + assert_cues_equal(video.textTracks[0].cues, expected); + } + + function testTrack1() { + // Test that all the cues are ignored. + assert_cues_equal(video.textTracks[1].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html new file mode 100644 index 00000000000..db1346d23ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>"Skip whitespace" step around cue-timings separator</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/timings-whitespace.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0.1, endTime: 1.5, text: "Single U+0020 SPACE left of cue-timings separator" }, + { id: "2", startTime: 0.1, endTime: 1.5, text: "Single U+0020 SPACE right of cue-timings separator" }, + { id: "3", startTime: 0.1, endTime: 1.5, text: "Single U+0009 TAB left of cue-timings separator" }, + { id: "4", startTime: 0.1, endTime: 1.5, text: "Single U+0009 TAB right of cue-timings separator" }, + { id: "5", startTime: 0.1, endTime: 1.5, text: "Single U+000C FORM FEED left of cue-timings separator" }, + { id: "6", startTime: 0.1, endTime: 1.5, text: "Single U+000C FORM FEED right of cue-timings separator" }, + { id: "7", startTime: 0.1, endTime: 1.5, text: "Several U+0020 SPACE left of cue-timings separator" }, + { id: "8", startTime: 0.1, endTime: 1.5, text: "Several U+0020 SPACE right of cue-timings separator" }, + { id: "9", startTime: 0.1, endTime: 1.5, text: "Several U+0009 TAB left of cue-timings separator" }, + { id: "10", startTime: 0.1, endTime: 1.5, text: "Several U+0009 TAB right of cue-timings separator" }, + { id: "11", startTime: 0.1, endTime: 1.5, text: "Several U+000C FORM FEED left of cue-timings separator" }, + { id: "12", startTime: 0.1, endTime: 1.5, text: "Several U+000C FORM FEED right of cue-timings separator" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html new file mode 100644 index 00000000000..ed3107f89b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>Unsupported markup is properly ignored</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +var getCueAsHTMLContent = function(cue) { + return cue.getCueAsHTML().textContent; +}; + +check_cues_from_track("resources/unsupported-markup.vtt", function(track) { + var expected = [ + { + innerHTML: getCueAsHTMLContent, + expected: "Bear is Coming!!!!!\nAnd what kind of a bear it is - just have look." + }, + { + innerHTML: getCueAsHTMLContent, + expected: "\n I said Bear is coming!!!!\n I said Bear is still coming!!!!\n", + }, + { + innerHTML: getCueAsHTMLContent, + expected: "\n I said Bear is coming now!!!!\n \n \n", + } + ]; + + assert_cues_html_content(track.cues, expected); + + var expected_text = [ + { text: "<h1>Bear is Coming!!!!!</h1>\n<p>And what kind of a bear it is - just have <a href=\"webpage.html\">look</a>.</p>" }, + { text: "<ul>\n <li>I said Bear is coming!!!!</li>\n <li>I said Bear is still coming!!!!</li>\n</ul>" }, + { text: "<ol>\n <li>I said Bear is coming now!!!!</li>\n <li><img src=\"bear.png\" alt=\"mighty bear\"></li>\n <li><video src=\"bear_ad.webm\" controls></video></li>\n</ol>" } + ]; + + assert_cues_match(track.cues, expected_text); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html new file mode 100644 index 00000000000..eb44c85ba83 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>UTF-8 encoded characters are recognized properly and different encodings (iconv) are not recognized as a WebVTT file</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/utf8.vtt"> + <track src="resources/iso2022jp3.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "景気判断" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "電力不足" + } + ]; + + var cues = video.textTracks[0].cues; + assert_equals(cues.length, 2); + assert_cues_equal(cues, expected); + } + + function testTrack1() { + assert_equals(video.textTracks[1].cues.length, 2); + } +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html new file mode 100644 index 00000000000..ace07607400 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>Cue vertical alignment (direction) from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/valign.vtt", testTrack); +check_cues_from_track("resources/valign-ltr.vtt", testTrack); +check_cues_from_track("resources/valign-bad.vtt", function(track) { + var expected = [ + { vertical: "" }, + { vertical: "" }, + { vertical: "" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { vertical: "rl", align: "center", position: "auto" }, + { vertical: "lr", align: "center", position: "auto" }, + { vertical: "rl", align: "start", position: 0 } + ]; + + assert_cues_match(track.cues, expected); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html new file mode 100644 index 00000000000..5df8b4057ae --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<title>Cues with voice markup <v></title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/voice.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", style: { className: "blue", title: "Speaker" }, + value: [ { type: "text", value: "Bear is Coming!!!!!" } ] }, + { type: "text", value: "\nText span with a class and an annotation." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { title: "Doe Hunter" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "blue", title: "Speaker" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); +}); + +check_cues_from_track("resources/voice-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "text", value: "Bear is Coming!!!!!" }, + { type: "text", value: "\nThis is two annotations for an empty tag." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "I said Bear is coming!!!!" }, + { type: "text", value: "\nThis does not parse as a voice tag." } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "text", value: "Bear is coming now" }, + { type: "text", value: "!!!!\nThis does not parse as a voice tag." } + ]; + assert_cue_fragment(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-download-click.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-download-click.html index 7554c9b03bc..8100ada9d5f 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-download-click.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/area-download-click.html @@ -6,22 +6,27 @@ <link rel="help" href="https://github.com/whatwg/html/issues/2116"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - -<img src="/images/threecolors.png" usemap="#x" id="img" width="300" height="300"> -<map name="x"> - <area id="blob-url" download="foo.html" coords="0,0,300,300"> -</map> - +<body> <script> "use strict"; +async_test(t => { + const frame = document.createElement("iframe"); -const string = "test"; -const blob = new Blob([string], { type: "text/html" }); + frame.addEventListener("load", t.step_func(function () { + frame.contentWindow.addEventListener( + "beforeunload", t.unreached_func("Navigated instead of downloading")); + const string = "test"; + const blob = new Blob([string], { type: "text/html" }); -const link = document.querySelector("#blob-url"); -link.href = URL.createObjectURL(blob); + const link = frame.contentDocument.querySelector("#blob-url"); + link.href = URL.createObjectURL(blob); -link.click(); + link.click(); -done(); + t.step_timeout(() => t.done(), 1000); + })); + frame.src = "resources/area-download-click.html"; + document.body.appendChild(frame); +}, "Clicking on an <area> element with a download attribute must not throw an exception"); </script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/resources/area-download-click.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/resources/area-download-click.html new file mode 100644 index 00000000000..c0679f8233d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-area-element/resources/area-download-click.html @@ -0,0 +1,5 @@ +<!doctype html> +<img src="/images/threecolors.png" usemap="#x" id="img" width="300" height="300"> +<map name="x"> + <area id="blob-url" download="foo.html" coords="0,0,300,300"> +</map> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html index 8650876207c..3aba6b7adb3 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html @@ -10,6 +10,17 @@ <textarea id="b">abcde</textarea> </div> <script> +var expected_direction_none; +setup(function() { + var input = document.createElement("input"); + input.setSelectionRange(0, 1, "none"); + var direction = input.selectionDirection; + if (direction !== "none" && direction !== "forward") { + throw new Error("Unexpected direction"); + } + expected_direction_none = direction; +}); + test(function() { var input = document.getElementById("a"); test(function() { @@ -67,22 +78,22 @@ test(function() { test(function() { input.setSelectionRange(0,1,"none") - assert_equals(input.selectionDirection, "none", 'The direction of the selection must be set to forward if direction is a case-sensitive match for the string "none"'); + assert_equals(input.selectionDirection, expected_direction_none); },'input direction of setSelectionRange(0,1,"none")'); test(function() { input.setSelectionRange(0,1,"hoge") - assert_equals(input.selectionDirection, "none", "otherwise"); + assert_equals(input.selectionDirection, expected_direction_none); },'input direction of setSelectionRange(0,1,"hoge")'); test(function() { input.setSelectionRange(0,1,"BACKWARD") - assert_equals(input.selectionDirection, "none", "selectionDirection should be 'none'"); + assert_equals(input.selectionDirection, expected_direction_none); },'input direction of setSelectionRange(0,1,"BACKWARD")'); test(function() { input.setSelectionRange(0,1) - assert_equals(input.selectionDirection, "none", "if the argument is omitted"); + assert_equals(input.selectionDirection, expected_direction_none); },'input direction of setSelectionRange(0,1)'); test(function() { @@ -214,22 +225,22 @@ test(function() { test(function() { textarea.setSelectionRange(0,1,"none") - assert_equals(textarea.selectionDirection, "none", 'The direction of the selection must be set to forward if direction is a case-sensitive match for the string "none"'); + assert_equals(textarea.selectionDirection, expected_direction_none); },'textarea direction of setSelectionRange(0,1,"none")'); test(function() { textarea.setSelectionRange(0,1,"hoge") - assert_equals(textarea.selectionDirection, "none", "otherwise"); + assert_equals(textarea.selectionDirection, expected_direction_none); },'textarea direction of setSelectionRange(0,1,"hoge")'); test(function() { textarea.setSelectionRange(0,1,"BACKWARD") - assert_equals(textarea.selectionDirection, "none", "selectionDirection should be 'none'"); + assert_equals(textarea.selectionDirection, expected_direction_none); },'textarea direction of setSelectionRange(0,1,"BACKWARD")'); test(function() { textarea.setSelectionRange(0,1) - assert_equals(textarea.selectionDirection, "none", "if the argument is omitted"); + assert_equals(textarea.selectionDirection, expected_direction_none); },'textarea direction of setSelectionRange(0,1)'); test(function() { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-progress-element/progress.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-progress-element/progress.html index 0c176d8ea6e..00d63c372f7 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-progress-element/progress.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-progress-element/progress.html @@ -42,7 +42,7 @@ }, "Indeterminate progress bar should have value 0"); test(function() { - assert_array_equals(largerthanmax.value, 1); + assert_equals(largerthanmax.value, 1); }, "Value must equal max if the parsed value is larger than max"); test(function() { @@ -50,7 +50,7 @@ }, "Max must be 1 by default"); test(function() { - assert_array_equals(largerthanmax.max, 1); + assert_equals(largerthanmax.max, 1); }, "Max must be 1 by default, even if value is specified"); test(function() { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/select-add.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/select-add.html new file mode 100644 index 00000000000..84a5442e424 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/select-add.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTMLSelectElement Test: add()</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/form-elements.html#dom-select-add-dev"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<form style="display:none"> + <option id="testoption"> + <select id="testselect1"> + </select> + <select id="testselect2"> + <option>TEST</option> + </select> + </option> +</form> + +<script> + +test(() => { + let testselect1 = document.getElementById("testselect1"); + let opt1 = new Option("Marry","1"); + testselect1.add(opt1); + assert_equals(testselect1.options[0].value, "1"); +}, "test that HTMLSelectElement.add method can add option element"); + +test(() => { + let testselect2 = document.getElementById("testselect2"); + let opt2 = document.getElementById("testoption"); + assert_throws("HierarchyRequestError", () => { + testselect2.add(opt2); + }); +}, "test that HierarchyRequestError exception must be thrown when element is an ancestor of the element into which it is to be inserted"); + +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/selected-index.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/selected-index.html index 6c30698a8ae..46f19da7da2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/selected-index.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-select-element/selected-index.html @@ -70,7 +70,7 @@ test(function () { assertSelectedIndex(select, 0); select.selectedIndex = 2; assertSelectedIndex(select, 2); - this.add_cleanup(() => select.selectedIndex = 0); + this.add_cleanup(() => { select.selectedIndex = 0; }); }, "set (HTMLSelectElement)"); test(function () { @@ -78,7 +78,7 @@ test(function () { assertSelectedIndex(select, 0); select.options.selectedIndex = 2; assertSelectedIndex(select, 2); - this.add_cleanup(() => select.selectedIndex = 0); + this.add_cleanup(() => { select.selectedIndex = 0; }); }, "set (HTMLOptionsCollection)"); test(function () { diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html new file mode 100644 index 00000000000..e97ebee59f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html @@ -0,0 +1,223 @@ +<!DOCTYPE html> +<html> +<head> +<title>Tests layout of absolutely positioned modal dialogs.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +/* Remove body margin and dialog styles for easier positioning expected values */ +body { + height: 10000px; + margin: 0; +} + +dialog { + border: 0; + padding: 0; + height: auto; + width: auto; +} + +#absolute-div { + position: absolute; + top: 800px; + height: 50px; + width: 90%; +} + +#relative-div { + position: relative; + top: 20px; + height: 30px; +} +</style> +</head> +<dialog >It is my dialog.</dialog> +<div id="absolute-div"> + <div id="relative-div"></div> +</div> +<script> +"use strict"; + +function checkNotVerticallyCentered(dialog) { + var centeredTop = (window.innerHeight - dialog.offsetHeight) / 2; + assert_not_equals(dialog.getBoundingClientRect().top, centeredTop); +} + +function checkVerticallyCentered(dialog) { + var centeredTop = (window.innerHeight - dialog.offsetHeight) / 2; + assert_equals(dialog.getBoundingClientRect().top, centeredTop); +} + +function reset() { + if (dialog.open) + dialog.close(); + dialog.remove(); + document.body.appendChild(dialog); + window.scroll(0, 500); +} + +var dialog = document.querySelector('dialog'); +var absoluteContainer = document.querySelector('#absolute-div'); +var relativeContainer = document.querySelector('#relative-div'); +reset(); + +test(function() { + dialog.showModal(); + checkVerticallyCentered(dialog); + reset(); +}, "showModal() should center in the viewport"); + +test(function() { + assert_equals(window.getComputedStyle(dialog).top, 'auto'); + assert_equals(window.getComputedStyle(dialog).bottom, 'auto'); + + dialog.style.height = '20px'; + dialog.showModal(); + + assert_not_equals(window.getComputedStyle(dialog).top, 'auto'); + assert_not_equals(window.getComputedStyle(dialog).bottom, 'auto'); + + // Set back original value to 'height'. + dialog.style.height = 'auto'; + reset(); +}, "The dialog is a positioned element, so the top and bottom should not have style auto."); + +test(function() { + dialog.showModal(); + dialog.close(); + window.scroll(0, 2 * window.scrollY); + dialog.showModal(); + checkVerticallyCentered(dialog); + reset(); +}, "Dialog should be recentered if showModal() is called after close()"); + +test(function() { + dialog.showModal(); + var expectedTop = dialog.getBoundingClientRect().top; + window.scroll(0, window.scrollY * 2); + + // Trigger relayout + document.body.offsetHeight; + + window.scroll(0, window.scrollY / 2); + assert_equals(dialog.getBoundingClientRect().top, expectedTop); + reset(); +}, "Dialog should not recenter on relayout."); + +test(function() { + dialog.style.height = '20000px'; + dialog.showModal(); + assert_equals(dialog.getBoundingClientRect().top, 0); + + // Set back original value to 'height'. + dialog.style.height = 'auto'; + reset(); +}, "A tall dialog should be positioned at the top of the viewport."); + +test(function() { + document.body.style.width = '4000px'; + dialog.showModal(); + checkVerticallyCentered(dialog); + + // Set back original value to 'width'. + document.body.style.width = 'auto'; + reset(); +}, "The dialog should be centered regardless of the presence of a horizontal scrollbar."); + +test(function() { + dialog.remove(); + absoluteContainer.appendChild(dialog); + dialog.showModal(); + checkVerticallyCentered(dialog); + dialog.close(); + + dialog.remove(); + relativeContainer.appendChild(dialog); + dialog.showModal(); + checkVerticallyCentered(dialog); + + reset(); +}, "Centering should work when dialog is inside positioned containers."); + +test(function() { + dialog.showModal(); + var expectedTop = dialog.getBoundingClientRect().top; + relativeContainer.style.display = 'none'; + relativeContainer.style.display = 'block'; + assert_equals(dialog.getBoundingClientRect().top, expectedTop); + + reset(); +}, "A centered dialog's position should survive becoming display:none temporarily."); + +test(function() { + // Remove and reinsert so that the document position isn't changed by the second remove and reinsert + dialog.remove(); + relativeContainer.appendChild(dialog); + + dialog.showModal(); + assert_not_equals(dialog.getBoundingClientRect().top, relativeContainer.getBoundingClientRect().top); + dialog.remove(); + + relativeContainer.appendChild(dialog); + assert_equals(dialog.parentNode, relativeContainer); + assert_equals(dialog.getBoundingClientRect().top, relativeContainer.getBoundingClientRect().top); + + reset(); +}, "Dialog should lose centering when removed from the document."); + +test(function() { + dialog.showModal(); + dialog.style.top = '0px'; + var expectedTop = dialog.getBoundingClientRect().top; + dialog.close(); + dialog.showModal(); + assert_equals(dialog.getBoundingClientRect().top, expectedTop); + + // Set back original value to 'top'. + dialog.style.top = 'auto'; + reset(); +}, "Dialog's specified position should survive after close() and showModal()."); + +test(function() { + dialog.showModal(); + dialog.removeAttribute('open'); + window.scroll(0, window.scrollY * 2); + checkNotVerticallyCentered(dialog); + dialog.showModal(); + checkVerticallyCentered(dialog); + + reset(); +}, "Dialog should be recentered if showModal() is called after removing 'open'."); + +test(function() { + dialog.remove(); + absoluteContainer.appendChild(dialog); + absoluteContainer.style.display = 'none'; + dialog.showModal(); + absoluteContainer.style.display = 'block'; + // Since dialog's containing block is the ICB, it's statically positioned after <body>. + assert_equals(dialog.getBoundingClientRect().top, document.body.getBoundingClientRect().bottom); + reset(); +}, "Dialog should not be centered if showModal() was called when an ancestor had display 'none'."); + +test(function() { + var offset = 50; + dialog.style.top = offset + 'px'; + dialog.showModal(); + assert_equals(dialog.getBoundingClientRect().top + window.scrollY, offset); + // Set back original value to 'top'. + dialog.style.top = 'auto'; + reset(); +}, "A dialog with specified 'top' should be positioned as usual"); + +test(function() { + var offset = 50; + dialog.style.bottom = offset + 'px'; + dialog.showModal(); + assert_equals(dialog.getBoundingClientRect().bottom + window.scrollY, window.innerHeight - offset); + // Set back original value to 'bottom'. + dialog.style.bottom = 'auto'; + reset(); +}, "A dialog with specified 'bottom' should be positioned as usual"); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-scrolled-viewport.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-scrolled-viewport.html new file mode 100644 index 00000000000..8a59ba23e43 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-scrolled-viewport.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html> +<head> +<style> +body { + margin: 0; +} + +dialog { + padding : 0; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body style="height: 10000px; width: 10000px"> +<div style="position: absolute; top: 5000px; left: 5000px; width: 20px;"> + <dialog style="top: 1200px; left: 1200px; right: auto; height: 100px; width: 50%;"> + </dialog> +</div> +<script> +"use strict"; +function checkPosition(dialog) { + assert_equals(dialog.offsetParent, null); + assert_equals(dialog.offsetTop, 1200); + assert_equals(dialog.offsetLeft, 1200); + // Since dialog's 'width' is '50%', the expected width is half of the + // viewport width, but viewport width may be odd. + var expectedWidth = document.documentElement.clientWidth / 2; + assert_approx_equals(dialog.clientWidth, expectedWidth, 0.5); +} + +test(function() { + // The dialog should be onscreen with a width of 50% of the viewport. It is the child of a + // narrow element positioned off screen, but its containing block is the initial containing + // block, so its position and percent lengths are relative to that. + window.scroll(1000, 1000); + var dialog = document.querySelector('dialog'); + dialog.showModal(); + checkPosition(dialog); + dialog.close(); +}, "Tests modal dialog's containing block is the initial containing block"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-does-not-match-disabled-selector.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-does-not-match-disabled-selector.html new file mode 100644 index 00000000000..b3b0c0a9297 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-does-not-match-disabled-selector.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +button { + color: green; +} + +button:disabled { + color: red; +} + +.trigger-style-recalc { + /* No change, we just need a new style recalculation. */ + font-weight:bold; +} +</style> +</head> +<body style="color: green"> +<button>The test passes if this is in green.</button> +<dialog></dialog> +<script> +"use strict"; +test(function() { + document.querySelector('dialog').showModal(); + var button = document.querySelector('button'); + button.classList.add('trigger-style-recalc'); + var color = document.defaultView.getComputedStyle(button).getPropertyValue('color'); + assert_equals(color, 'rgb(0, 128, 0)'); +}, "Tests inert elements do not match the :disabled selector."); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-node-is-unfocusable.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-node-is-unfocusable.html new file mode 100644 index 00000000000..49d6690d673 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-node-is-unfocusable.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html> +<head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body id="body" tabindex="1"> +<dialog id="top-dialog" tabindex="1" style="width: 100px; top: 30px"><button id="top-dialog-button">I get focus</button></dialog> +<dialog id="bottom-dialog" tabindex="-1" style="width: 100px; bottom: 30px"><button id="bottom-dialog-button">I don't get focus.</button></dialog> +<div id="container"> + <input id="text" type="text"> + <input id="datetime" type="datetime"> + <input id="color" type="color"> + <select id="select"> + <optgroup id="optgroup"> + <option id="option">Option</option> + </optgroup> + </select> + <div id="contenteditable-div" contenteditable>I'm editable</div> + <span id="tabindex-span" tabindex="0">I'm tabindexed.</div> + <embed id="embed" type="application/x-blink-test-plugin" width=100 height=100></embed> + <a id="anchor" href="">Link</a> +</div> +<script> +"use strict"; +// The test passses if only the topmost dialog and its button are focusable. + +function testFocus(element, expectFocus) { + var focusedElement = null; + element.addEventListener('focus', function() { focusedElement = element; }, false); + element.focus(); + var theElement = element; + assert_equals(focusedElement === theElement, expectFocus, element.id); +} + +function testTree(element, expectFocus) { + if (element.nodeType == Node.ELEMENT_NODE) + testFocus(element, expectFocus); + var childNodes = element.childNodes; + for (var i = 0; i < childNodes.length; i++) + testTree(childNodes[i], expectFocus); +} + +test(function() { + var bottomDialog = document.getElementById('bottom-dialog'); + bottomDialog.showModal(); + + var topDialog = document.getElementById('top-dialog'); + topDialog.showModal(); + + testFocus(document.body, false); + testTree(topDialog, true); + testTree(bottomDialog, false); + testTree(document.getElementById('container'), false); +}, "Test that inert nodes are not focusable."); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/defer.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/defer.js new file mode 100644 index 00000000000..c4449ca7c8a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/defer.js @@ -0,0 +1,4 @@ +t.step(() => { + assert_equals(script_run_status, "deferred", "the script run status"); +}); +t.done(); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html new file mode 100644 index 00000000000..73a6ce3db00 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>Choice of parse errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "Parse errors in different files should be reported " + + "depending on different roots"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 4); + + // Two different parse errors from different module scripts + // should be reported for each <script> element. + assert_equals(log[0].constructor, SyntaxError); + assert_equals(log[1], 1); + + assert_equals(log[2].constructor, SyntaxError); + assert_equals(log[3], 2); + + assert_not_equals(log[0], log[2], + 'two different parse errors should be reported'); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./choice-of-error-1a.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./choice-of-error-1b.js" + onerror="unreachable()" onload="log.push(2)"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1a.js new file mode 100644 index 00000000000..f479e5e1fac --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1a.js @@ -0,0 +1,2 @@ +import './choice-of-error-1b.js'; +import './syntaxerror.js?1c'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1b.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1b.js new file mode 100644 index 00000000000..257f4a46784 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1b.js @@ -0,0 +1,2 @@ +import './choice-of-error-1a.js'; +import './syntaxerror.js?1d'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html new file mode 100644 index 00000000000..0d67cb819a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>Choice of instantiation errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "Instantiation errors in different files should be reported " + + "depending on different roots"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 4); + + // Two different instantiation errors from different module scripts + // should be reported for each <script> element. + assert_equals(log[0].constructor, SyntaxError); + assert_equals(log[1], 1); + + assert_equals(log[2].constructor, SyntaxError); + assert_equals(log[3], 2); + + assert_not_equals(log[0], log[2], + 'two different instantiation errors should be reported'); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./choice-of-error-2a.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./choice-of-error-2b.js" + onerror="unreachable()" onload="log.push(2)"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2a.js new file mode 100644 index 00000000000..2dc7aac11a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2a.js @@ -0,0 +1,2 @@ +import './choice-of-error-2b.js'; +import './instantiation-error-1.js?2c'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2b.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2b.js new file mode 100644 index 00000000000..2adb9eea597 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2b.js @@ -0,0 +1,2 @@ +import './choice-of-error-2a.js'; +import './instantiation-error-1.js?2d'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html new file mode 100644 index 00000000000..5c0adff6ea8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>Choice of evaluation errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "Evaluation errors are cached in intermediate module scripts"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 5); + + // Evaluation errors, unlike parse/instantiation errors, are remembered + // and cached in module scripts between the root and the script that + // caused an evaluation error, and thus the same evaluation error + // is reported for both <script> elements. + assert_equals(log[0], "throw2"); + assert_true(log[1].bar); + assert_equals(log[2], 1); + + assert_true(log[3].bar); + assert_equals(log[4], 2); + + assert_equals(log[1], log[3], 'evaluation errors must be the same'); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./choice-of-error-3a.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./choice-of-error-3b.js" + onerror="unreachable()" onload="log.push(2)"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3a.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3a.js new file mode 100644 index 00000000000..71154674a34 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3a.js @@ -0,0 +1,2 @@ +import './choice-of-error-3b.js'; +import './throw.js?3c'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3b.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3b.js new file mode 100644 index 00000000000..2131a35eff1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3b.js @@ -0,0 +1,2 @@ +import './choice-of-error-3a.js'; +import './throw2.js?3d'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error.html index 9390ce0a7a8..1578f8570e4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error.html @@ -9,7 +9,7 @@ const cases = [ ["parse error", "../syntaxerror.js", new SyntaxError], ["bad module specifier", "does-not-start-with-dot.js", new TypeError, { differentErrorObjects: true }], ["bad module specifier in a dependency", "../bad-module-specifier.js", new TypeError], - ["instantiation error", "../instantiation-error-1.js", new SyntaxError], + ["instantiation error", "../instantiation-error-1.js", new SyntaxError, { differentErrorObjects: true }], ["evaluation error", "../throw-error.js", new Error] ]; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js new file mode 100644 index 00000000000..bc88bf7bd63 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js @@ -0,0 +1 @@ +Function(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`)(); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js new file mode 100644 index 00000000000..a8bcffe9f81 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js @@ -0,0 +1 @@ +eval(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js new file mode 100644 index 00000000000..c0bd8655873 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js @@ -0,0 +1,2 @@ +window.dummyDiv.setAttribute("onclick", `import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); +window.dummyDiv.click(); // different from **on**click() diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js new file mode 100644 index 00000000000..f19ec2b03f9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js @@ -0,0 +1,2 @@ +window.dummyDiv.setAttribute("onclick", `import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`); +window.dummyDiv.onclick(); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js new file mode 100644 index 00000000000..c6f2dda55aa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js @@ -0,0 +1 @@ +setTimeout(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`, 0); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html new file mode 100644 index 00000000000..7cf2dac0ac6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() inside compiled strings uses the script base URL inside a classic script that is loaded from a file</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="dummy"></div> + +<script> +function load(scriptSrc) { + const el = document.createElement("script"); + el.src = scriptSrc; + document.body.appendChild(el); +} + +function createTestPromise() { + return new Promise((resolve, reject) => { + window.dummyDiv.removeAttribute("onclick"); + delete window.evaluated_imports_a; + delete window.label; + + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +window.dummyDiv = document.querySelector("#dummy"); + +const evaluators = [ + "setTimeout", + "eval", + "Function", + "reflected-inline-event-handlers", + "inline-event-handlers-UA-code" +]; + +for (const label of evaluators) { + promise_test(() => { + const promise = createTestPromise(); + + window.label = label; + load(`scripts/${label}.js`); + + return promise.then(module => { + assert_true(window.evaluated_imports_a, "The module must have been evaluated"); + assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); + }); + }, label + " should successfully import"); +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html new file mode 100644 index 00000000000..73986c2c997 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() inside compiled strings uses the script base URL inside a module script that is loaded from a file</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="dummy"></div> + +<script type="module"> +function load(scriptSrc) { + const el = document.createElement("script"); + el.type = "module"; + el.src = scriptSrc; + document.body.appendChild(el); +} + +function createTestPromise() { + return new Promise((resolve, reject) => { + window.dummyDiv.removeAttribute("onclick"); + delete window.evaluated_imports_a; + delete window.label; + + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +window.dummyDiv = document.querySelector("#dummy"); + +const evaluators = [ + "setTimeout", + "eval", + "Function", + "reflected-inline-event-handlers", + "inline-event-handlers-UA-code" +]; + +for (const label of evaluators) { + promise_test(() => { + const promise = createTestPromise(); + + window.label = label; + load(`scripts/${label}.js`); + + return promise.then(module => { + assert_true(window.evaluated_imports_a, "The module must have been evaluated"); + assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); + }); + }, label + " should successfully import"); +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html index 062bb620b9e..1bd6d7dfd75 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>import() inside compiled strings uses the document base URL inside a classic script</title> +<title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline classic script</title> <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> <base href=".."> @@ -21,8 +21,8 @@ function createTestPromise() { const dummyDiv = document.querySelector("#dummy"); const evaluators = { - eval, setTimeout, + eval, "the Function constructor"(x) { Function(x)(); }, diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html index de51c9a4cd6..f5b85740f55 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>import() inside compiled strings uses the document base URL inside a module script</title> +<title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline module script</title> <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> <base href=".."> @@ -21,8 +21,8 @@ function createTestPromise() { const dummyDiv = document.querySelector("#dummy"); const evaluators = { - eval, setTimeout, + eval, "the Function constructor"(x) { Function(x)(); }, diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html new file mode 100644 index 00000000000..666bc7ce479 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() doesn't have any integrity metadata when initiated by compiled strings inside a classic script</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> +<meta http-equiv="Content-Security-Policy" content="require-sri-for script"> + +<script src="/resources/testharness.js" integrity="sha384-4Nybydhnr3tOpv1yrTkDxu3RFpnxWAxlU5kGn7c8ebKvh1iUdfVMjqP6jf0dacrV"></script> +<script src="/resources/testharnessreport.js" integrity="sha384-GOnHxuyo+nnsFAe4enY+RAl4/+w5NPMJPCQiDroTjxtR7ndRz7Uan8vNbM2qWKmU"></script> + +<div id="dummy"></div> + +<script> +function createTestPromise() { + return new Promise((resolve, reject) => { + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +const dummyDiv = document.querySelector("#dummy"); + +const evaluators = { + eval, + setTimeout, + "the Function constructor"(x) { + Function(x)(); + }, + "reflected inline event handlers"(x) { + dummyDiv.setAttribute("onclick", x); + dummyDiv.onclick(); + }, + "inline event handlers triggered via UA code"(x) { + dummyDiv.setAttribute("onclick", x); + dummyDiv.click(); // different from .**on**click() + } +}; + +for (const [label, evaluator] of Object.entries(evaluators)) { + promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + delete window.evaluated_imports_a; + }); + + const promise = createTestPromise(); + + evaluator(`import('../imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); + + return promise_rejects(t, new TypeError(), promise); + }, label + " should fail to import"); +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html new file mode 100644 index 00000000000..497c9d97150 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() doesn't have any integrity metadata when initiated by compiled strings inside a module script</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> +<meta http-equiv="Content-Security-Policy" content="require-sri-for script"> + +<script src="/resources/testharness.js" integrity="sha384-4Nybydhnr3tOpv1yrTkDxu3RFpnxWAxlU5kGn7c8ebKvh1iUdfVMjqP6jf0dacrV"></script> +<script src="/resources/testharnessreport.js" integrity="sha384-GOnHxuyo+nnsFAe4enY+RAl4/+w5NPMJPCQiDroTjxtR7ndRz7Uan8vNbM2qWKmU"></script> + +<div id="dummy"></div> + +<script type="module"> +function createTestPromise() { + return new Promise((resolve, reject) => { + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +const dummyDiv = document.querySelector("#dummy"); + +const evaluators = { + eval, + setTimeout, + "the Function constructor"(x) { + Function(x)(); + }, + "reflected inline event handlers"(x) { + dummyDiv.setAttribute("onclick", x); + dummyDiv.onclick(); + }, + "inline event handlers triggered via UA code"(x) { + dummyDiv.setAttribute("onclick", x); + dummyDiv.click(); // different from .**on**click() + } +}; + +for (const [label, evaluator] of Object.entries(evaluators)) { + promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + delete window.evaluated_imports_a; + }); + + const promise = createTestPromise(); + + evaluator(`import('../imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`); + + return promise_rejects(t, new TypeError(), promise); + }, label + " should fail to import"); +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html new file mode 100644 index 00000000000..ba82fe8e7c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html @@ -0,0 +1,103 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() inside compiled strings uses the appropriate nonce inside a classic script</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> + +<meta http-equiv="content-security-policy" content="script-src 'nonce-correct' 'unsafe-eval' 'unsafe-hashed-attributes' 'sha256-cAMzxBL19bKt4KwKGbxy/ZOFIIjH5AmRjlVbsD5pvNw=' 'sha256-3VjoJYNK/9HJMS8rrZHlqSZgUssDY+GPyc7AU8lNM3k='"> + +<script nonce="correct" src="/resources/testharness.js"></script> +<script nonce="correct" src="/resources/testharnessreport.js"></script> + +<div id="dummy"></div> + +<script nonce="correct"> +"use strict"; +const dummyDiv = document.querySelector("#dummy"); + +function createTestPromise(t) { + t.add_cleanup(() => { + delete window.evaluated_imports_a; + delete window.unreached; + delete window.continueTest; + delete window.errorTest; + }); + + return new Promise((resolve, reject) => { + window.unreached = t.unreached_func("Must not reach this"); + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +function assertSuccessful(module) { + assert_true(window.evaluated_imports_a, "The module must have been evaluated"); + assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); +} + +promise_test(t => { + const promise = createTestPromise(t); + + setTimeout(`import('../imports-a.js?label=setTimeout').then(window.unreached, window.continueTest)`, 0); + + return promise.then(assertSuccessful); +}, "setTimeout must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + eval(`import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`); + + return promise.then(assertSuccessful); +}, "direct eval must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + const evalAlias = eval; + evalAlias(`import('../imports-a.js?label=indirect eval').then(window.continueTest, window.errorTest)`); + + return promise.then(assertSuccessful); +}, "indirect eval must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)(); + + return promise.then(assertSuccessful); +}, "the Function constructor must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + }); + + const promise = createTestPromise(t); + + // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy + dummyDiv.setAttribute( + "onclick", + `import('../imports-a.js?label=reflected inline event handlers').then(window.continueTest, window.errorTest)` + ); + dummyDiv.onclick(); + + return promise.then(assertSuccessful); +}, "reflected inline event handlers must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + }); + + const promise = createTestPromise(t); + + // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy + dummyDiv.setAttribute( + "onclick", + `import('../imports-a.js?label=inline event handlers triggered via UA code').then(window.continueTest, window.errorTest)` + ); + dummyDiv.click(); // different from **on**click() + + return promise.then(assertSuccessful); +}, "inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute"); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html new file mode 100644 index 00000000000..889628f8395 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html @@ -0,0 +1,102 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>import() inside compiled strings uses the appropriate nonce inside a module script</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> + +<meta http-equiv="content-security-policy" content="script-src 'nonce-correct' 'unsafe-eval' 'unsafe-hashed-attributes' 'sha256-cAMzxBL19bKt4KwKGbxy/ZOFIIjH5AmRjlVbsD5pvNw=' 'sha256-3VjoJYNK/9HJMS8rrZHlqSZgUssDY+GPyc7AU8lNM3k='"> + +<script nonce="correct" src="/resources/testharness.js"></script> +<script nonce="correct" src="/resources/testharnessreport.js"></script> + +<div id="dummy"></div> + +<script type="module" nonce="correct"> +const dummyDiv = document.querySelector("#dummy"); + +function createTestPromise(t) { + t.add_cleanup(() => { + delete window.evaluated_imports_a; + delete window.unreached; + delete window.continueTest; + delete window.errorTest; + }); + + return new Promise((resolve, reject) => { + window.unreached = t.unreached_func("Must not reach this"); + window.continueTest = resolve; + window.errorTest = reject; + }); +} + +function assertSuccessful(module) { + assert_true(window.evaluated_imports_a, "The module must have been evaluated"); + assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct"); +} + +promise_test(t => { + const promise = createTestPromise(t); + + setTimeout(`import('../imports-a.js?label=setTimeout').then(window.unreached, window.continueTest)`, 0); + + return promise.then(assertSuccessful); +}, "setTimeout must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + eval(`import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`); + + return promise.then(assertSuccessful); +}, "direct eval must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + const evalAlias = eval; + evalAlias(`import('../imports-a.js?label=indirect eval').then(window.continueTest, window.errorTest)`); + + return promise.then(assertSuccessful); +}, "indirect eval must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + const promise = createTestPromise(t); + + Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)(); + + return promise.then(assertSuccessful); +}, "the Function constructor must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + }); + + const promise = createTestPromise(t); + + // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy + dummyDiv.setAttribute( + "onclick", + `import('../imports-a.js?label=reflected inline event handlers').then(window.continueTest, window.errorTest)` + ); + dummyDiv.onclick(); + + return promise.then(assertSuccessful); +}, "reflected inline event handlers must inherit the nonce from the triggering script, thus execute"); + +promise_test(t => { + t.add_cleanup(() => { + dummyDiv.removeAttribute("onclick"); + }); + + const promise = createTestPromise(t); + + // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy + dummyDiv.setAttribute( + "onclick", + `import('../imports-a.js?label=inline event handlers triggered via UA code').then(window.continueTest, window.errorTest)` + ); + dummyDiv.click(); // different from **on**click() + + return promise.then(assertSuccessful); +}, "inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute"); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html new file mode 100644 index 00000000000..6f119e30064 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Handling of different types of errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "network error has higher priority than parse error"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 3); + + // A parse error is reported for the first top-level + // <script> element for syntaxerror.js. + assert_equals(log[0].constructor, SyntaxError); + assert_equals(log[1], 1); + + // onerror is called (with no errors reported) due to a network error + // for the second top-level <script>. + assert_equals(log[2], 2); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./syntaxerror.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./error-type-1.js" + onerror="log.push(2)" onload="unreachable()"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.js new file mode 100644 index 00000000000..4882d3f2a56 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.js @@ -0,0 +1,2 @@ +import './syntaxerror.js'; +import './404.js'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html new file mode 100644 index 00000000000..a7df1df0c86 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Handling of different types of errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "parse error has higher priority than instantiation error"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 4); + + // An instantiation error is reported for the first top-level + // <script> element for instantiation-error-1.js. + assert_equals(log[0].constructor, SyntaxError); + assert_equals(log[1], 1); + + // A parse error is reported for the second top-level <script>. + assert_equals(log[2].constructor, SyntaxError); + assert_equals(log[3], 2); + assert_not_equals(log[0], log[2]); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./instantiation-error-1.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./error-type-2.js" + onerror="unreachable()" onload="log.push(2)"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.js new file mode 100644 index 00000000000..6b113973009 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.js @@ -0,0 +1,2 @@ +import './instantiation-error-1.js'; +import './syntaxerror.js'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html new file mode 100644 index 00000000000..9b00df38915 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Handling of different types of errors</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => log.push(ev.error)); + + const test_load = async_test( + "instantiation error has higher priority than evaluation error"); + window.addEventListener("load", test_load.step_func_done(ev => { + assert_equals(log.length, 5); + + // An evaluation error is reported for the first top-level + // <script> element for throw.js. + assert_equals(log[0], 'throw'); + assert_true(log[1].foo); + assert_equals(log[2], 1); + + // An instantiation error is reported for the second top-level <script>. + assert_equals(log[3].constructor, SyntaxError); + assert_equals(log[4], 2); + })); + + function unreachable() { log.push("unexpected"); } +</script> +<script type="module" src="./throw.js" + onerror="unreachable()" onload="log.push(1)"></script> +<script type="module" src="./error-type-3.js" + onerror="unreachable()" onload="log.push(2)"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.js new file mode 100644 index 00000000000..542be52846a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.js @@ -0,0 +1,2 @@ +import './throw.js'; +import './instantiation-error-1.js'; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html index efdf5879fce..57b40f5baaf 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html @@ -6,17 +6,19 @@ <script> setup({allow_uncaught_exception: true}); - window.log = []; - - window.addEventListener("error", ev => log.push(ev.error)); - const test_load = async_test( "Test that missing exports lead to SyntaxError events on window and " + - "load events on script, and that exceptions are remembered"); + "load events on script"); + + window.log = []; + window.addEventListener("error", ev => { + test_load.step(() => assert_equals(ev.error.constructor, SyntaxError)); + log.push(ev.message); + }); + window.addEventListener("load", test_load.step_func_done(ev => { - const exn = log[0]; - assert_array_equals(log, [exn, 1, exn, 2, exn, 3, exn, 4, exn, 5]); - assert_equals(exn.constructor, SyntaxError); + const msg = log[0]; + assert_array_equals(log, [msg, 1, msg, 2, msg, 3, msg, 4, msg, 5]); })); function unreachable() { log.push("unexpected"); } diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html index 3d50ce63a6b..27ba006fc7a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html @@ -6,17 +6,19 @@ <script> setup({allow_uncaught_exception: true}); - window.log = []; - - window.addEventListener("error", ev => log.push(ev.error)); - const test_load = async_test( "Test that missing exports lead to SyntaxError events on window and " + - "load events on script, and that exceptions are remembered"); + "load events on script"); + + window.log = []; + window.addEventListener("error", ev => { + test_load.step(() => assert_equals(ev.error.constructor, SyntaxError)); + log.push(ev.message); + }); + window.addEventListener("load", test_load.step_func_done(ev => { - const exn = log[0]; - assert_array_equals(log, [exn, 1, exn, 2, exn, 3, exn, 4, exn, 5]); - assert_equals(exn.constructor, SyntaxError); + const msg = log[0]; + assert_array_equals(log, [msg, 1, msg, 2, msg, 3, msg, 4, msg, 5]); })); function unreachable() { log.push("unexpected"); } diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html index ab510c675ad..e03fcc0ecbb 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html @@ -6,17 +6,19 @@ <script> setup({allow_uncaught_exception: true}); - window.log = []; - - window.addEventListener("error", ev => log.push(ev.error)); - const test_load = async_test( "Test that unresolvable cycles lead to SyntaxError events on window " + - "and load events on script, and that exceptions are remembered"); + "and load events on script"); + + window.log = []; + window.addEventListener("error", ev => { + test_load.step(() => assert_equals(ev.error.constructor, SyntaxError)); + log.push(ev.message); + }); + window.addEventListener("load", test_load.step_func_done(ev => { - const exn = log[0]; - assert_array_equals(log, [exn, 1, exn, 2, exn, 3]); - assert_equals(exn.constructor, SyntaxError); + const msg = log[0]; + assert_array_equals(log, [msg, 1, msg, 2, msg, 3]); })); function unreachable() { log.push("unexpected"); } diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html index 4eb2f9f277b..238e8832c00 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html @@ -7,16 +7,18 @@ setup({allow_uncaught_exception: true}); window.log = []; - - window.addEventListener("error", ev => log.push(ev.error)); - const test_load = async_test( "Test that loading a graph in which a module is already " + - "errored results in that module's error."); + "errored results in an error."); + + window.addEventListener("error", ev => { + test_load.step(() => assert_equals(ev.error.constructor, SyntaxError)); + log.push(ev.message); + }); + window.addEventListener("load", test_load.step_func_done(ev => { - const exn = log[0]; - assert_array_equals(log, [exn, 1, exn, 2]); - assert_equals(exn.constructor, SyntaxError); + const msg = log[0]; + assert_array_equals(log, [msg, 1, msg, 2]); })); function unreachable() { log.push("unexpected"); } diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html index 86d0fb3e956..de2b6ba7b34 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html @@ -6,17 +6,19 @@ <script> setup({allow_uncaught_exception: true}); - window.log = []; - - window.addEventListener("error", ev => log.push(ev.error)); - const test_load = async_test( "Test that loading a graph in which a module is already " + - "errored results in that module's error."); + "errored results an error."); + + window.log = []; + window.addEventListener("error", ev => { + test_load.step(() => assert_equals(ev.error.constructor, SyntaxError)); + log.push(ev.message); + }); + window.addEventListener("load", test_load.step_func_done(ev => { - const exn = log[0]; - assert_array_equals(log, [exn, 1, exn, 2]); - assert_equals(exn.constructor, SyntaxError); + const msg = log[0]; + assert_array_equals(log, [msg, 1, msg, 2]); })); function unreachable() { log.push("unexpected"); } diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html new file mode 100644 index 00000000000..e50c7b525b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html> +<head> +<title>Referrer with the no-referrer policy</title> +<meta name="referrer" content="no-referrer"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script type="module"> + +// "name" parameter is necessary for bypassing the module map. + +import { referrer as referrerSame } from "./resources/referrer-checker.py?name=same"; + +import { referrer as referrerRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name=remote"; + +import { referrer as referrerSameSame } from "./resources/import-referrer-checker.sub.js?name=same_same"; + +import { referrer as referrerSameRemote } from "./resources/import-remote-origin-referrer-checker.sub.js?name=same_remote"; + +import { referrer as referrerRemoteRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js?name=remote_remote"; + +test(t => { + assert_equals( + referrerSame, "", + "Referrer should not be sent for the same-origin top-level script."); +}, "Importing a same-origin top-level script with the no-referrer policy."); + +test(t => { + assert_equals( + referrerRemote, "", + "Referrer should not be sent for the remote-origin top-level script."); +}, "Importing a remote-origin top-level script with the no-referrer policy."); + +test(t => { + assert_equals( + referrerSameSame, "", + "Referrer should not be sent for the same-origin descendant script."); +}, "Importing a same-origin descendant script from a same-origin top-level " + + "script with the no-referrer policy."); + +test(t => { + assert_equals( + referrerSameRemote, "", + "Referrer should not be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a same-origin top-level " + + "script with the no-referrer policy."); + +test(t => { + assert_equals( + referrerRemoteRemote, "", + "Referrer should not be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a remote-origin " + + "top-level script with the no-referrer policy."); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html new file mode 100644 index 00000000000..3623ac2ccb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<html> +<head> +<title>Referrer with the origin-when-cross-origin policy</title> +<meta name="referrer" content="origin-when-cross-origin"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script type="module"> + +// "name" parameter is necessary for bypassing the module map. + +import { referrer as referrerSame } from "./resources/referrer-checker.py?name=same"; + +import { referrer as referrerRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name=remote"; + +import { referrer as referrerSameSame } from "./resources/import-referrer-checker.sub.js?name=same_same"; + +import { referrer as referrerSameRemote } from "./resources/import-remote-origin-referrer-checker.sub.js?name=same_remote"; + +import { referrer as referrerRemoteRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js?name=remote_remote"; + +const origin = (new URL(location.href)).origin + "/"; +const remoteOrigin = "http://{{domains[www1]}}:{{ports[http][0]}}/"; + +test(t => { + assert_equals( + referrerSame, location.href, + "Referrer should be sent for the same-origin top-level script."); +}, "Importing a same-origin top-level script with the " + + "origin-when-cross-origin policy."); + +test(t => { + assert_equals( + referrerRemote, origin, + "Referrer should be sent for the remote-origin top-level script."); +}, "Importing a remote-origin top-level script with the " + + "origin-when-cross-origin policy."); + +test(t => { + const scriptURL = + new URL("resources/import-referrer-checker.sub.js", location.href) + assert_equals( + referrerSameSame, scriptURL + "?name=same_same", + "Referrer should be sent for the same-origin descendant script."); +}, "Importing a same-origin descendant script from a same-origin top-level " + + "script with the origin-when-cross-origin policy."); + +test(t => { + assert_equals( + referrerSameRemote, origin, + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a same-origin top-level " + + "script with the origin-when-cross-origin policy."); + +test(t => { + assert_equals( + referrerRemoteRemote, remoteOrigin, + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a remote-origin " + + "top-level script with the origin-when-cross-origin policy."); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html new file mode 100644 index 00000000000..f512982a451 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html> +<head> +<title>Referrer with the origin policy</title> +<meta name="referrer" content="origin"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script type="module"> + +// "name" parameter is necessary for bypassing the module map. + +import { referrer as referrerSame } from "./resources/referrer-checker.py?name=same"; + +import { referrer as referrerRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name=remote"; + +import { referrer as referrerSameSame } from "./resources/import-referrer-checker.sub.js?name=same_same"; + +import { referrer as referrerSameRemote } from "./resources/import-remote-origin-referrer-checker.sub.js?name=same_remote"; + +import { referrer as referrerRemoteRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js?name=remote_remote"; + +const origin = (new URL(location.href)).origin + "/"; +const remoteOrigin = "http://{{domains[www1]}}:{{ports[http][0]}}/"; + +test(t => { + assert_equals( + referrerSame, origin, + "Referrer should be sent for the same-origin top-level script."); +}, "Importing a same-origin top-level script with the origin policy."); + +test(t => { + assert_equals( + referrerRemote, origin, + "Referrer should be sent for the remote-origin top-level script."); +}, "Importing a remote-origin top-level script with the origin policy."); + +test(t => { + assert_equals( + referrerSameSame, origin, + "Referrer should be sent for the same-origin descendant script."); +}, "Importing a same-origin descendant script from a same-origin top-level " + + "script with the origin policy."); + +test(t => { + assert_equals( + referrerSameRemote, origin, + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a same-origin top-level " + + "script with the origin policy."); + +test(t => { + assert_equals( + referrerRemoteRemote, remoteOrigin, + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a remote-origin " + + "top-level script with the origin policy."); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html new file mode 100644 index 00000000000..67b055c217d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html> +<head> +<title>Referrer with the same-origin policy</title> +<meta name="referrer" content="same-origin"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script type="module"> + +// "name" parameter is necessary for bypassing the module map. + +import { referrer as referrerSame } from "./resources/referrer-checker.py?name=same"; + +import { referrer as referrerRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name=remote"; + +import { referrer as referrerSameSame } from "./resources/import-referrer-checker.sub.js?name=same_same"; + +import { referrer as referrerSameRemote } from "./resources/import-remote-origin-referrer-checker.sub.js?name=same_remote"; + +import { referrer as referrerRemoteRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js?name=remote_remote"; + +test(t => { + assert_equals( + referrerSame, location.href, + "Referrer should be sent for the same-origin top-level script."); +}, "Importing a same-origin top-level script with the same-origin policy."); + +test(t => { + assert_equals( + referrerRemote, "", + "Referrer should not be sent for the remote-origin top-level script."); +}, "Importing a remote-origin top-level script with the same-origin policy."); + +test(t => { + const path = + new URL("resources/import-referrer-checker.sub.js", location.href); + assert_equals( + referrerSameSame, path + `?name=same_same`, + "Referrer should be sent for the same-origin descendant script."); +}, "Importing a same-origin descendant script from a same-origin top-level " + + "script with the same-origin policy."); + +test(t => { + assert_equals( + referrerSameRemote, "", + "Referrer should not be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a same-origin top-level " + + "script with the same-origin policy."); + +test(t => { + assert_equals( + referrerRemoteRemote, "", + "Referrer should not be sent for the remote-origin descendant script " + + "even if it is imported from the script in the same remote-origin."); +}, "Importing a remote-origin descendant script from a remote-origin " + + "top-level script with the same-origin policy."); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html new file mode 100644 index 00000000000..11f60c010f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<html> +<head> +<title>Referrer with the unsafe-url policy</title> +<meta name="referrer" content="unsafe-url"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script type="module"> + +// "name" parameter is necessary for bypassing the module map. + +import { referrer as referrerSame } from "./resources/referrer-checker.py?name=same"; + +import { referrer as referrerRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name=remote"; + +import { referrer as referrerSameSame } from "./resources/import-referrer-checker.sub.js?name=same_same"; + +import { referrer as referrerSameRemote } from "./resources/import-remote-origin-referrer-checker.sub.js?name=same_remote"; + +import { referrer as referrerRemoteRemote } from "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js?name=remote_remote"; + +test(t => { + assert_equals( + referrerSame, location.href, + "Referrer should be sent for the same-origin top-level script."); +}, "Importing a same-origin top-level script with the unsafe-url policy."); + +test(t => { + assert_equals( + referrerRemote, location.href, + "Referrer should be sent for the remote-origin top-level script."); +}, "Importing a remote-origin top-level script with the unsafe-url policy."); + +test(t => { + const scriptURL = + new URL("resources/import-referrer-checker.sub.js", location.href) + assert_equals( + referrerSameSame, scriptURL + "?name=same_same", + "Referrer should be sent for the same-origin descendant script."); +}, "Importing a same-origin descendant script from a same-origin top-level " + + "script with the unsafe-url policy."); + +test(t => { + const scriptURL = + new URL("resources/import-remote-origin-referrer-checker.sub.js", + location.href) + assert_equals( + referrerSameRemote, scriptURL + "?name=same_remote", + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a same-origin top-level " + + "script with the unsafe-url policy."); + +test(t => { + const scriptURL = + "http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/" + + "scripting-1/the-script-element/module/resources/" + + "import-referrer-checker.sub.js"; + assert_equals( + referrerRemoteRemote, scriptURL + "?name=remote_remote", + "Referrer should be sent for the remote-origin descendant script."); +}, "Importing a remote-origin descendant script from a remote-origin " + + "top-level script with the unsafe-url policy."); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js new file mode 100644 index 00000000000..2c7dce9dffa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js @@ -0,0 +1,2 @@ +import { referrer as referrerImport } from './referrer-checker.py?name={{GET[name]}}'; +export const referrer = referrerImport; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers new file mode 100644 index 00000000000..cb762eff806 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js new file mode 100644 index 00000000000..45a2520b68c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js @@ -0,0 +1,2 @@ +import { referrer as referrerImport } from 'http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name={{GET[name]}}'; +export const referrer = referrerImport; diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py new file mode 100644 index 00000000000..b652cbe2c86 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py @@ -0,0 +1,6 @@ +def main(request, response): + referrer = request.headers.get("referer", "") + response_headers = [("Content-Type", "text/javascript"), + ("Access-Control-Allow-Origin", "*")]; + return (200, response_headers, + "export const referrer = '" + referrer + "';") diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw2.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw2.js new file mode 100644 index 00000000000..2931eec500d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/throw2.js @@ -0,0 +1,2 @@ +log.push("throw2"); +throw {bar: true} diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-defer.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-defer.html new file mode 100644 index 00000000000..80eb98dc750 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/script-defer.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML Test: HTMLScriptElement - defer</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="log"></div> + +<script> + +let script_run_status = "inline"; +let t = async_test("the defer script run later"); + +</script> + +<script type="text/javascript" src="defer.js" defer></script> + +<script> + +t.step(() => { + assert_equals(script_run_status, "inline", "the script run status"); + script_run_status = "deferred"; +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html index db9e1cbfb92..3c8adc0b97e 100644 --- a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html @@ -11,15 +11,15 @@ async_test(t => { const errorFrame = document.createElement("iframe"); - errorFrame.addEventListener("load", function () { + errorFrame.addEventListener("load", t.step_func(function () { errorFrame.contentWindow.addEventListener( "beforeunload", t.unreached_func("Navigated instead of downloading")); errorFrame.contentDocument.querySelector("#error-url").click(); t.step_timeout(() => t.done(), 1000); - }); + })); errorFrame.src = "resources/a-download-404.html"; document.body.appendChild(errorFrame); }, "Do not navigate to 404 for anchor with download"); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click.html index ad6a3df001e..22d329f2452 100644 --- a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click.html +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click.html @@ -7,18 +7,27 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<a id="blob-url" download="foo.html">Click me</a> - +<body> <script> "use strict"; +async_test(t => { + const frame = document.createElement("iframe"); -const string = "test"; -const blob = new Blob([string], { type: "text/html" }); + frame.addEventListener("load", t.step_func(function () { + frame.contentWindow.addEventListener( + "beforeunload", t.unreached_func("Navigated instead of downloading")); + const string = "test"; + const blob = new Blob([string], { type: "text/html" }); -const link = document.querySelector("#blob-url"); -link.href = URL.createObjectURL(blob); + const link = frame.contentDocument.querySelector("#blob-url"); + link.href = URL.createObjectURL(blob); -link.click(); + link.click(); -done(); + t.step_timeout(() => t.done(), 1000); + })); + frame.src = "resources/a-download-click.html"; + document.body.appendChild(frame); +}, "Clicking on an <a> element with a download attribute must not throw an exception"); </script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/resources/a-download-click.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/resources/a-download-click.html new file mode 100644 index 00000000000..7d36c21d1e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-a-element/resources/a-download-click.html @@ -0,0 +1,2 @@ +<!doctype html> +<a id="blob-url" download="foo.html">Click me</a> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage-notref.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage-notref.html new file mode 100644 index 00000000000..3d3c46a281f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage-notref.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML Reference File</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> + +<p>You enter a small room. Your sword glows brighter. A rat scurries past the corner wall.</p> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage.html new file mode 100644 index 00000000000..ff2105dcae8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-b-element/b-usage.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML test: b - highlight keywords</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> +<link rel="mismatch" href="b-usage-notref.html"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-b-element"/> + +<p>You enter a small room. Your <b>sword</b> glows brighter. A <b>rat</b> scurries past the corner wall.</p> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html new file mode 100644 index 00000000000..f5747811ae4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML Reference File</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> + +<p>君くん子しは和わして同どうぜず</p> diff --git a/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html new file mode 100644 index 00000000000..59c076cd092 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>HTML test: ruby - mark phrasing content</title> +<link rel="author" title="Intel" href="http://www.intel.com/"> +<link rel="mismatch" href="ruby-usage-notref.html"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-ruby-element"/> + +<p><ruby>君<rt>くん</ruby><ruby>子<rt>し</ruby>は<ruby>和<rt>わ</ruby>して<ruby>同<rt>どう</ruby>ぜず</p> |