mirror of
https://github.com/servo/servo.git
synced 2025-06-24 09:04:33 +01:00
Update web-platform-tests to revision 82cc91c66f1b42ada1b9ff5609a33332122ccdc8
This commit is contained in:
parent
cce2832690
commit
8653304dd9
52 changed files with 314 additions and 115 deletions
|
@ -1,5 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -312,12 +312,6 @@
|
|||
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -333,3 +327,12 @@
|
|||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,6 +56,3 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Element with tabindex should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -3,3 +3,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -16,5 +15,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -1,5 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -308178,11 +308178,11 @@
|
|||
[]
|
||||
],
|
||||
"range-percent-intrinsic-size-2-ref.html": [
|
||||
"9a6e9287d96089912d00684166494e5dcb902b40",
|
||||
"d98c8220164bcb92ada82f9799ba4da0e6425ea7",
|
||||
[]
|
||||
],
|
||||
"range-percent-intrinsic-size-2a-ref.html": [
|
||||
"9aab2aede09aaaea2acb3fd5e3e98a6e70286fb3",
|
||||
"11afa34a654ec071c00971b11a2261ff95397904",
|
||||
[]
|
||||
],
|
||||
"slice-intrinsic-size-ref.html": [
|
||||
|
@ -360345,6 +360345,12 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"webcodecs": {
|
||||
"pattern.png": [
|
||||
"85676f29ff5806a32ac6713e601fdcb71dd03777",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"webdriver": {
|
||||
"META.yml": [
|
||||
"a397b497c32234d3889c738f51b96a3ba3b2a96f",
|
||||
|
@ -476796,6 +476802,15 @@
|
|||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"select-event-drag-remove.html": [
|
||||
"f5c2e702e5783e3f9067c7735ab02f905d3de69b",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"installedapp": {
|
||||
|
@ -478383,7 +478398,7 @@
|
|||
]
|
||||
],
|
||||
"mpadded-002.html": [
|
||||
"d376bd3da1f60d3f4c7e7b9294095e35598f853a",
|
||||
"a5f77523e15ae745b57c1a355274554802dfc8cb",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -510079,7 +510094,7 @@
|
|||
]
|
||||
],
|
||||
"bad-underlying-sinks.any.js": [
|
||||
"cf04e01b0c0c4daa0b193e46fee6583c0ed7cba1",
|
||||
"0bfc036246a8709bd14117b252c1d186b8d8df0d",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -524300,6 +524315,13 @@
|
|||
]
|
||||
},
|
||||
"webcodecs": {
|
||||
"video-encoder.html": [
|
||||
"ce03f058f78ec551afc8024203f633e64cb1a29f",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"video-track-reader.html": [
|
||||
"087e0bb935b6033876c9b7eed10274bab02d8910",
|
||||
[
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -312,12 +312,6 @@
|
|||
[fetch(): separate response Content-Type: text/plain ]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -333,3 +327,12 @@
|
|||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,6 +56,3 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -7,14 +6,11 @@
|
|||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus including no focusable descendants should be skipped]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: NOTRUN
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[DOMContentLoaded-defer.html]
|
||||
[The end: DOMContentLoaded and defer scripts]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -4,3 +4,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
[promise-job-entry.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Sanity check: this all works as expected with no promises involved]
|
||||
expected: FAIL
|
||||
|
@ -16,5 +15,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -56,7 +56,7 @@ input[orient="vertical"] {
|
|||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
@ -78,7 +78,7 @@ input[orient="vertical"] {
|
|||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
@ -103,7 +103,7 @@ input[orient="vertical"] {
|
|||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
@ -125,7 +125,7 @@ input[orient="vertical"] {
|
|||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
|
|
@ -47,7 +47,7 @@ div {
|
|||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
@ -67,7 +67,7 @@ div {
|
|||
<input type="range" class="mb" orient="vertical">
|
||||
</div></div>
|
||||
|
||||
<div class="grid" style="grid: min-content / auto">
|
||||
<div class="grid" style="grid: minmax(min-content,30px) / auto">
|
||||
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
|
||||
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>Drag select triggers the right event, and doesn't crash if it removes the target while at it</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver-actions.js"></script>
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1386418">
|
||||
<style>
|
||||
input {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
font: 16px/1 monospace;
|
||||
}
|
||||
</style>
|
||||
<input type="text" value="Drag select to crash">
|
||||
<script>
|
||||
async_test(t => {
|
||||
let input = document.querySelector("input");
|
||||
input.addEventListener("select", t.step_func(function() {
|
||||
input.remove();
|
||||
requestAnimationFrame(() => requestAnimationFrame(() => t.done()));
|
||||
}));
|
||||
new test_driver.Actions()
|
||||
.pointerMove(0, 0, { origin: input })
|
||||
.pointerDown()
|
||||
.pointerMove(40, 0, { origin: input })
|
||||
.pointerUp()
|
||||
.send();
|
||||
}, "Drag and remove from the select event doesn't crash");
|
||||
</script>
|
|
@ -48,8 +48,8 @@
|
|||
|
||||
test(function() {
|
||||
var mpadded = getBox("percentages");
|
||||
assert_equals(mpadded.width, contentWidth / 2, "width");
|
||||
assert_approx_equals(getBox("baseline").bottom - mpadded.top, contentHeight / 3, epsilon, "height");
|
||||
assert_equals(mpadded.width, contentWidth, "width");
|
||||
assert_approx_equals(getBox("baseline").bottom - mpadded.top, contentHeight, epsilon, "height");
|
||||
assert_approx_equals(mpadded.bottom - getBox("baseline").bottom, contentDepth, epsilon, "depth");
|
||||
}, "Percentage calculation for width, height and depth");
|
||||
|
||||
|
@ -133,7 +133,7 @@ div.shrink-wrap {
|
|||
<mpadded id="height0" height="25px"><mspace width="100px" depth="125px" height="150px" style="background: black; opacity: .5"/></mpadded>
|
||||
<mpadded id="height1" height="50px"><mspace width="100px" depth="125px" height="150px" style="background: black; opacity: .5"/></mpadded>
|
||||
<mpadded id="height2" height="75px"><mspace width="100px" depth="125px" height="150px" style="background: black; opacity: .5"/></mpadded>
|
||||
<mpadded id="percentages" width="50%" height="33%" depth="100%"><mspace width="100px" depth="125px" height="150px" style="background: black; opacity: .5"/></mpadded>
|
||||
<mpadded id="percentages" width="50%" height="33%" depth="10%"><mspace width="100px" depth="125px" height="150px" style="background: black; opacity: .5"/></mpadded>
|
||||
</math>
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -157,6 +157,24 @@ promise_test(t => {
|
|||
|
||||
}, 'write: returning a rejected promise (second write) should cause writer write() and ready to reject');
|
||||
|
||||
test(() => {
|
||||
assert_throws_js(TypeError, () => new WritableStream({
|
||||
start: 'test'
|
||||
}), 'constructor should throw');
|
||||
}, 'start: non-function start method');
|
||||
|
||||
test(() => {
|
||||
assert_throws_js(TypeError, () => new WritableStream({
|
||||
write: 'test'
|
||||
}), 'constructor should throw');
|
||||
}, 'write: non-function write method');
|
||||
|
||||
test(() => {
|
||||
assert_throws_js(TypeError, () => new WritableStream({
|
||||
close: 'test'
|
||||
}), 'constructor should throw');
|
||||
}, 'close: non-function close method');
|
||||
|
||||
test(() => {
|
||||
assert_throws_js(TypeError, () => new WritableStream({
|
||||
abort: { apply() {} }
|
||||
|
|
BIN
tests/wpt/web-platform-tests/webcodecs/pattern.png
Normal file
BIN
tests/wpt/web-platform-tests/webcodecs/pattern.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
139
tests/wpt/web-platform-tests/webcodecs/video-encoder.html
Normal file
139
tests/wpt/web-platform-tests/webcodecs/video-encoder.html
Normal file
|
@ -0,0 +1,139 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>Test the VideoTrackReader API.</title>
|
||||
<body>
|
||||
<img id='frame_image' src="pattern.png">
|
||||
</body>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/media.js"></script>
|
||||
<script>
|
||||
|
||||
async function generateBitmap(width, height) {
|
||||
return createImageBitmap(document.getElementById('frame_image'),
|
||||
{ resizeWidth: width,
|
||||
resizeHeight: height });
|
||||
}
|
||||
|
||||
async function createVideoFrame(width, height, timestamp) {
|
||||
let bitmap = await generateBitmap(width, height);
|
||||
return new VideoFrame(bitmap, { timestamp: timestamp });
|
||||
}
|
||||
|
||||
// Calls done after giving async output/error callbacks a final chance to run.
|
||||
async function asyncDone(test) {
|
||||
test.step_timeout(test.done.bind(test), 0);
|
||||
}
|
||||
|
||||
async_test(async (t) => {
|
||||
// VideoEncoderInit lacks required fields.
|
||||
assert_throws_js(TypeError, () => { new VideoEncoder({}); });
|
||||
|
||||
// VideoEncoderInit has required fields.
|
||||
let encoder = new VideoEncoder({
|
||||
output(chunk) { assert_unreached("Unexpected output"); },
|
||||
error(error) { assert_unreached("Unexpected error:" + error); },
|
||||
});
|
||||
encoder.close();
|
||||
|
||||
asyncDone(t);
|
||||
}, 'Test VideoEncoder construction');
|
||||
|
||||
async_test(async (t) => {
|
||||
let encoder = new VideoEncoder({
|
||||
output(chunk) { assert_unreached("Unexpected output"); },
|
||||
error(error) { assert_unreached("Unexpected error:" + error); },
|
||||
});
|
||||
|
||||
const requiredConfigPairs = {
|
||||
codec: 'vp8',
|
||||
framerate: 25,
|
||||
width: 640,
|
||||
height: 480
|
||||
};
|
||||
let incrementalConfig = {};
|
||||
|
||||
for (let key in requiredConfigPairs) {
|
||||
// Configure should fail while required keys are missing.
|
||||
assert_throws_js(TypeError, () => { encoder.configure(incrementalConfig); });
|
||||
incrementalConfig[key] = requiredConfigPairs[key];
|
||||
}
|
||||
|
||||
// Configure should pass once incrementalConfig meets all requirements.
|
||||
encoder.configure(incrementalConfig);
|
||||
|
||||
encoder.configure(incrementalConfig);
|
||||
|
||||
encoder.close();
|
||||
|
||||
asyncDone(t);
|
||||
}, 'Test VideoEncoder.configure()');
|
||||
|
||||
async_test(async (t) => {
|
||||
let encoder = new VideoEncoder({
|
||||
output(chunk) { assert_unreached("Unexpected output"); },
|
||||
error(error) { assert_unreached("Unexpected error:" + error); },
|
||||
});
|
||||
|
||||
let videoFrame = await createVideoFrame(640, 480, 0);
|
||||
|
||||
assert_throws_dom('InvalidStateError',
|
||||
() => { encoder.encode(videoFrame); },
|
||||
'first encode');
|
||||
|
||||
// Once more for good measure.
|
||||
assert_throws_dom('InvalidStateError',
|
||||
() => { encoder.encode(videoFrame); },
|
||||
'second encode');
|
||||
|
||||
encoder.close();
|
||||
|
||||
asyncDone(t);
|
||||
}, 'Test encode() before configure() throws InvalidStateError.');
|
||||
|
||||
async_test(async (t) => {
|
||||
let output_chunks = [];
|
||||
let encoder = new VideoEncoder({
|
||||
output(chunk) { output_chunks.push(chunk); },
|
||||
error(error) { assert_unreached("Unexpected error:" + error); },
|
||||
});
|
||||
|
||||
// No encodes yet.
|
||||
assert_equals(encoder.encodeQueueSize, 0);
|
||||
|
||||
const config = {
|
||||
codec: 'vp8',
|
||||
framerate: 25,
|
||||
width: 640,
|
||||
height: 480
|
||||
};
|
||||
encoder.configure(config);
|
||||
|
||||
// Still no encodes.
|
||||
assert_equals(encoder.encodeQueueSize, 0);
|
||||
|
||||
let frame1 = await createVideoFrame(640, 480, 0);
|
||||
let frame2 = await createVideoFrame(640, 480, 33333);
|
||||
|
||||
encoder.encode(frame1);
|
||||
encoder.encode(frame2);
|
||||
|
||||
// Could be 0, 1, or 2. We can't guarantee this check runs before the UA has
|
||||
// processed the encodes.
|
||||
assert_true(encoder.encodeQueueSize >= 0 && encoder.encodeQueueSize <= 2)
|
||||
|
||||
await encoder.flush();
|
||||
|
||||
// We can guarantee that all encodes are processed after a flush.
|
||||
assert_equals(encoder.encodeQueueSize, 0);
|
||||
|
||||
assert_equals(output_chunks.length, 2);
|
||||
assert_equals(output_chunks[0].timestamp, frame1.timestamp);
|
||||
assert_equals(output_chunks[1].timestamp, frame2.timestamp);
|
||||
|
||||
encoder.close();
|
||||
|
||||
asyncDone(t);
|
||||
}, 'Test successful configure(), encode(), and flush()');
|
||||
</script>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue