Update web-platform-tests to revision 3ec34e5a2c8cbeeb7fad521cce0daf923b272a92

This commit is contained in:
WPT Sync Bot 2018-03-19 21:30:49 -04:00
parent e9fdcdc785
commit d67bfb7ff8
58 changed files with 2014 additions and 848 deletions

View file

@ -159175,6 +159175,102 @@
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-001.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-001.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-001-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-002.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-002.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-002-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-003.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-003.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-003-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-004.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-004.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-003-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-005.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-005.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-005-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-006.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-006.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-006-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-007.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-007.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-007-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-008.html": [
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-008.html",
[
[
"/css/css-writing-modes/sizing-orthogonal-percentage-margin-007-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/svg-aliasing-001.html": [
[
"/css/css-writing-modes/svg-aliasing-001.html",
@ -215207,6 +215303,16 @@
{}
]
],
"css/CSS2/backgrounds/support/cat-128.png": [
[
{}
]
],
"css/CSS2/backgrounds/support/cat-830.png": [
[
{}
]
],
"css/CSS2/backgrounds/support/cat.png": [
[
{}
@ -260157,6 +260263,36 @@
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-001-ref.html": [
[
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-002-ref.html": [
[
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-003-ref.html": [
[
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-005-ref.html": [
[
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-006-ref.html": [
[
{}
]
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-007-ref.html": [
[
{}
]
],
"css/css-writing-modes/support/100x100-lime.png": [
[
{}
@ -285222,6 +285358,11 @@
{}
]
],
"interfaces/webaudio.idl": [
[
{}
]
],
"interfaces/webauthn.idl": [
[
{}
@ -314109,6 +314250,12 @@
{}
]
],
"css/css-scroll-snap/snap-inline-block.html": [
[
"/css/css-scroll-snap/snap-inline-block.html",
{}
]
],
"css/css-scroll-snap/snap-to-visible-areas.html": [
[
"/css/css-scroll-snap/snap-to-visible-areas.html",
@ -317199,12 +317346,60 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/mix-blend-mode.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/mix-blend-mode.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/object-fit.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/object-fit.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/object-position.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/object-position.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset-anchor.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset-anchor.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset-distance.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset-distance.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset-path.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset-path.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset-position.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset-position.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset-rotate.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset-rotate.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/offset.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/offset.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/opacity.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/opacity.html",
@ -317277,6 +317472,12 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/table-layout.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/table-layout.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-align.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-align.html",
@ -317301,6 +317502,12 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-orientation.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-orientation.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-transform.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-transform.html",
@ -318609,6 +318816,12 @@
{}
]
],
"css/cssom/getComputedStyle-dynamic-subdoc.html": [
[
"/css/cssom/getComputedStyle-dynamic-subdoc.html",
{}
]
],
"css/cssom/getComputedStyle-pseudo.html": [
[
"/css/cssom/getComputedStyle-pseudo.html",
@ -342207,6 +342420,18 @@
{}
]
],
"offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.html": [
[
"/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.html",
{}
]
],
"offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.w.html": [
[
"/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.w.html",
{}
]
],
"offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.3arg.html": [
[
"/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.3arg.html",
@ -349251,18 +349476,6 @@
{}
]
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.html": [
[
"/offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.html",
{}
]
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.w.html": [
[
"/offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.w.html",
{}
]
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext.html": [
[
"/offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext.html",
@ -364327,6 +364540,12 @@
{}
]
],
"webaudio/idlharness.https.html": [
[
"/webaudio/idlharness.https.html",
{}
]
],
"webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html": [
[
"/webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html",
@ -390991,7 +391210,7 @@
"support"
],
"./config.default.json": [
"939f06a73458155a62c9d81f198ac0194ad26234",
"54422ca469a8d54fa4b8252803bb0e2c91459858",
"support"
],
"./lint.whitelist": [
@ -395143,7 +395362,7 @@
"manual"
],
"FileAPI/FileReader/workers.html": [
"d7894a0abb064411d4811d8cfb9c3ce65f99babd",
"b93f6c447184bc20cc59e895ae446ee95ebdb406",
"testharness"
],
"FileAPI/FileReaderSync.worker.js": [
@ -425275,7 +425494,7 @@
"manual"
],
"css/CSS2/backgrounds/background-attachment-004.xht": [
"ffa99116e4615792f0308b7c430efab4bc31073a",
"3586ab83a0d7b2173ec33964575b26fb00f92bc8",
"manual"
],
"css/CSS2/backgrounds/background-attachment-005.xht": [
@ -427738,6 +427957,14 @@
"435db9c6ad02d80fe1545ad7fbc97d5009a32ebf",
"support"
],
"css/CSS2/backgrounds/support/cat-128.png": [
"4dd27ea01f998476c3a50fd748175af07ca3632e",
"support"
],
"css/CSS2/backgrounds/support/cat-830.png": [
"73e44a633f1d26b915e093a65ca53650c03b9c56",
"support"
],
"css/CSS2/backgrounds/support/cat.png": [
"461fd17b274662b88500cdf42bab7f3b79e6019d",
"support"
@ -507570,6 +507797,10 @@
"51f08f58135901b332ff43d15fbdc8d0a22f962c",
"manual"
],
"css/css-scroll-snap/snap-inline-block.html": [
"4fc646db848f597af6f4562e7b60815e9ca4ef2b",
"testharness"
],
"css/css-scroll-snap/snap-to-visible-areas.html": [
"dfaf8675bec557c9f2178ad48b29c803f94056b5",
"testharness"
@ -522263,7 +522494,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/height.html": [
"36b8677eb45f8555da4381e1644624df2f2060e0",
"617ec941ab1cbd02b31b8a9bb7ce6da311109476",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/isolation.html": [
@ -522294,10 +522525,42 @@
"2a20c6818e9d71adbf3902fde74cb26136917e72",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/mix-blend-mode.html": [
"43a29c4680d0f93c586f3e7d772fe64a56947d87",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/object-fit.html": [
"9e16a0dac44abcdb6b17475c429694ec78c5ae0a",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/object-position.html": [
"c3040ca9284c50c2149dc09502fde5f20d0a4baa",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset-anchor.html": [
"6f6411b7eb198d0f76ea077f80e5974b50dd5ee1",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset-distance.html": [
"57718eea1d7c224115d7a82b0a19f368354200a7",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset-path.html": [
"5822486bf8d79310965dddcb5bcbe6bf69ac89c4",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset-position.html": [
"a0e3b777d15caecaee854c3e5fb050df8c736d0a",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset-rotate.html": [
"f405f78977c3521f2dfd78316b78ad2bbe61845d",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/offset.html": [
"87b8d31906a2bf96a38e5112600fcd8970642d53",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/opacity.html": [
"3812b01e648e3b043abbd2fe82c3733309da49ad",
"testharness"
@ -522350,6 +522613,10 @@
"3189c7b3903d30f31836ea845aebecf599198c79",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/table-layout.html": [
"e56449111778ad18152a42d54fc88097950f15f0",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-align.html": [
"88a1f5866a767c25dec2ef75728c68c5631d371f",
"testharness"
@ -522366,6 +522633,10 @@
"9419ab219034d1fb732965ebd3a03934bcaddf5a",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-orientation.html": [
"919ebc1fadf6e097071a0f1618afeed0849f18e6",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-transform.html": [
"53f0482b667f049170dcdfb5de29dedc6897d09a",
"testharness"
@ -522403,7 +522674,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/width.html": [
"d429f7a88012179ef3d604b79b3db4aaba0ca426",
"205915eb7162e23fd5600488304dd8dfa8e51ee2",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/writing-mode.html": [
@ -530270,6 +530541,62 @@
"770cfe7939de94e221926b65bccfa057ee7711f2",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-001-ref.html": [
"dc2667e1dee2cb1c22f678aabe4d617bb4f64f69",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-001.html": [
"efa71c02524fa57eac92e8311b7c95befd06bda1",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-002-ref.html": [
"da28e37e576350d3eec7061f0dab66d5d7d4a261",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-002.html": [
"109856fd1d885f7d5f8cd4a6c0db0eb8cec83dc0",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-003-ref.html": [
"bea55f8e91d4ff012e7a2ce5efa70b653893c565",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-003.html": [
"186bbff0e10a299950a3594349115956a977d2d8",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-004.html": [
"663ce0026de3c61a649c77aa6ac0097940ab1a47",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-005-ref.html": [
"3b68b98fd6e8be39b56d2882e0fe739d46b826d0",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-005.html": [
"2d4ccf4c626ead622054753ebdabadc2626483f8",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-006-ref.html": [
"6d45ce1c05f792c126bd5c912f6f0232cd6a8fb9",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-006.html": [
"582ce006ae8576c9b44f2532fea73641a7f4ad9b",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-007-ref.html": [
"a2a544c867707e4ac9715495c3ba7b6d26670818",
"support"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-007.html": [
"b4a0abd69a69f19ef671042ee972a7fe62675fc6",
"reftest"
],
"css/css-writing-modes/sizing-orthogonal-percentage-margin-008.html": [
"2543ef7b6e41b2b0614c32167f4e0a85319dae0c",
"reftest"
],
"css/css-writing-modes/support/100x100-lime.png": [
"b02fc2d0ad1d95a2aeb6011022e63928841b183f",
"support"
@ -532478,6 +532805,10 @@
"c9ed57c7ef7a035c25feff4ea60547a57d727f31",
"testharness"
],
"css/cssom/getComputedStyle-dynamic-subdoc.html": [
"45d94c17f0a88877a8218135c94d331afcdf7df4",
"testharness"
],
"css/cssom/getComputedStyle-pseudo.html": [
"a2033405d6852cdeb4c3b8cf628f7c1d8f7cd1aa",
"testharness"
@ -544451,7 +544782,7 @@
"testharness"
],
"custom-elements/builtin-coverage.html": [
"a33f3950860fead2c1cbe249d73394b1888facd0",
"14cda641d06979600b461a4985f36c1fbc3defc9",
"testharness"
],
"custom-elements/connected-callbacks.html": [
@ -571726,6 +572057,10 @@
"d3ab33fa078f1b3bd4b29e174369073aab3963d5",
"support"
],
"interfaces/webaudio.idl": [
"43a244276b9795b137c2e46c194d56dbb957635d",
"support"
],
"interfaces/webauthn.idl": [
"77076f0828383c0f48f36131a81b25186622b3a3",
"support"
@ -575854,6 +576189,14 @@
"aebe4c1ad096a35fce7aa8c12d7655b525b5cd2a",
"testharness"
],
"offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.html": [
"4268a275ad695dfded9f6ed8de1850fafb649f95",
"testharness"
],
"offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob.w.html": [
"8466fb824c584d343ca20a52fd8d316fc2cd0d1c",
"testharness"
],
"offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.3arg.html": [
"f2e95967ca89ad85787c121f3cae4ed35e825b44",
"testharness"
@ -580554,14 +580897,6 @@
"ca1cedea429efabeaaf1132b54fe45a7626f7f86",
"testharness"
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.html": [
"4268a275ad695dfded9f6ed8de1850fafb649f95",
"testharness"
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.convert.to.blob.w.html": [
"8466fb824c584d343ca20a52fd8d316fc2cd0d1c",
"testharness"
],
"offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext.html": [
"2961422d4081a0fc55cb8bde62e6d33cb2877832",
"testharness"
@ -590315,7 +590650,7 @@
"testharness"
],
"resource-timing/resource_initiator_types.html": [
"11ad45e383c110eee2496c481abbff9642f6e6ee",
"b05a2dfad953398d6b31f11055606f2f3694a9af",
"testharness"
],
"resource-timing/resource_memory_cached.sub.html": [
@ -600810,6 +601145,10 @@
"93068df297042344669093ce899f0230c87ebf54",
"testharness"
],
"webaudio/idlharness.https.html": [
"7876e16ea643f69315e18c3e17af0d7f95769420",
"testharness"
],
"webaudio/js/buffer-loader.js": [
"4d564eae0b3d7d1045626d1f144cd2638dba64e5",
"support"
@ -601895,7 +602234,7 @@
"testharness"
],
"webmessaging/broadcastchannel/workers.html": [
"ef608ad90a3dfbcdbf3cbb0b51ee8cacfb3a3a65",
"483e03e9528f1e80fc1b250caee46f7f256d63c1",
"testharness"
],
"webmessaging/event.data.sub.htm": [
@ -601947,7 +602286,7 @@
"testharness"
],
"webmessaging/message-channels/worker.html": [
"9c6e11c2a0d5cdbca5682c7be5a23f081f419e0f",
"25778166691434e77f361a609742a170c4f787e8",
"testharness"
],
"webmessaging/messageerror.html": [
@ -602699,7 +603038,7 @@
"testharness"
],
"websockets/Create-on-worker-shutdown.html": [
"e710493c0cd84630a1c853ada23c37908bece9cb",
"75112264efdc3b310f4ba2ab4517b7608aacf2f2",
"testharness"
],
"websockets/Create-protocol-with-space.htm": [

View file

@ -1,2 +0,0 @@
[vh_not_refreshing_on_chrome.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[getComputedStyle-dynamic-subdoc.html]
[getComputedStyle cross-doc properly reflects media query changes]
expected: FAIL

View file

@ -1,5 +1,6 @@
[shader-with-non-reserved-words.html]
type: testharness
expected: TIMEOUT
[WebGL test #1696: shader with: 'dmat2' failed to compile]
expected: FAIL
@ -144,3 +145,6 @@
[WebGL test #1862: shader with: 'dmat4x4' failed to compile]
expected: FAIL
[Overall test]
expected: NOTRUN

View file

@ -15,7 +15,7 @@ async_test(t => {
postMessage(true);
}
var workerBlob = new Blob([workerCode.toSource() + ";workerCode();"], {type:"application/javascript"});
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
var w = new Worker(URL.createObjectURL(workerBlob));
w.onmessage = function(e) {

View file

@ -1,7 +1,7 @@
{"host": "web-platform.test",
{"browser_host": "web-platform.test",
"doc_root": null,
"ws_doc_root": null,
"host_ip": null,
"server_host": null,
"ports":{"http":[8000, "auto"],
"https":[8443],
"ws":["auto"],

View file

@ -8,8 +8,8 @@
<meta name="flags" content="interact"/>
<style type="text/css">
* { background: transparent; }
body { background: transparent url(http://www.hixie.ch/resources/images/astrophy/128) no-repeat fixed center; }
.a { background: transparent url(http://www.hixie.ch/resources/images/astrophy/830) no-repeat fixed center; height: 100px; }
body { background: transparent url(support/cat-128.png) no-repeat fixed center; }
.a { background: transparent url(support/cat-830.png) no-repeat fixed center; height: 100px; }
pre { font: 100 24px/2 Arial, sans-serif; letter-spacing: 1em; word-spacing: 1.2em; margin: 1em; }
</style>
</head>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View file

@ -0,0 +1,53 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
div {
position: absolute;
margin: 0px;
}
#scroller {
width: 400px;
height: 350px;
overflow: scroll;
scroll-snap-type: both mandatory;
}
#space {
width: 1000px;
height: 1000px;
}
#target {
width: 200px;
height: 200px;
left: 300px;
top: 300px;
scroll-snap-align: start end;
}
</style>
<div id="scroller">
<div id="space"></div>
<div id="target"></div>
</div>
<script>
var scroller = document.getElementById("scroller");
var width = scroller.clientWidth;
var height = scroller.clientHeight;
[
["horizontal-tb", 300, 500 - height],
["vertical-lr", 500 - width, 300],
["vertical-rl", 300, 300]
].forEach(([writing_mode, left, top]) => {
test(() => {
scroller.style.writingMode = writing_mode;
if (writing_mode == "vertical-rl")
document.getElementById("target").style.left = (width - 700) + "px";
scroller.scrollTo(0, 0);
assert_equals(scroller.scrollLeft, left, "aligns correctly on x");
assert_equals(scroller.scrollTop, top, "aligns correctly on y");
}, "Snaps correctly for " + writing_mode +
" writing mode with 'inline' and 'block' alignments");
})
</script>

View file

@ -19,4 +19,27 @@ runPropertyTests('height', [
{ syntax: '<length>', specified: assert_is_equal_with_range_handling },
]);
runPropertyTests('min-height', [
{
syntax: '<percentage>',
specified: assert_is_equal_with_range_handling
},
{
syntax: '<length>',
specified: assert_is_equal_with_range_handling
},
]);
runPropertyTests('max-height', [
{ syntax: 'none' },
{
syntax: '<percentage>',
specified: assert_is_equal_with_range_handling
},
{
syntax: '<length>',
specified: assert_is_equal_with_range_handling
},
]);
</script>

View file

@ -0,0 +1,35 @@
<!doctype html>
<meta charset="utf-8">
<title>'mix-blend-mode' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('mix-blend-mode', [
{ syntax: 'normal' },
{ syntax: 'multiply' },
{ syntax: 'screen' },
{ syntax: 'overlay' },
{ syntax: 'darken' },
{ syntax: 'lighten' },
{ syntax: 'color-dodge' },
{ syntax: 'color-burn' },
{ syntax: 'hard-light' },
{ syntax: 'soft-light' },
{ syntax: 'difference' },
{ syntax: 'exclusion' },
{ syntax: 'hue' },
{ syntax: 'saturation' },
{ syntax: 'color' },
{ syntax: 'luminosity' },
]);
</script>

View file

@ -0,0 +1,24 @@
<!doctype html>
<meta charset="utf-8">
<title>'object-fit' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('object-fit', [
{ syntax: 'fill' },
{ syntax: 'contain' },
{ syntax: 'cover' },
{ syntax: 'none' },
{ syntax: 'scale-down' },
]);
</script>

View file

@ -0,0 +1,20 @@
<meta charset="utf-8">
<title>'offset-anchor' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('offset-anchor', [
{ syntax: 'auto' },
{ syntax: '<position>' },
]);
</script>

View file

@ -0,0 +1,21 @@
<!doctype html>
<meta charset="utf-8">
<title>'offset-distance' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('offset-distance', [
{ syntax: '<length>' },
{ syntax: '<percentage>' },
]);
</script>

View file

@ -0,0 +1,25 @@
<!doctype html>
<meta charset="utf-8">
<title>'offset-path' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('offset-path', [
{ syntax: 'none' },
]);
runUnsupportedPropertyTests('offset-path', [
'ray(45deg closest-side)',
'path("M 100 100 L 300 100 L 200 300 Z")',
]);
</script>

View file

@ -0,0 +1,21 @@
<!doctype html>
<meta charset="utf-8">
<title>'offset-position' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('offset-position', [
{ syntax: 'auto' },
{ syntax: '<position>' },
]);
</script>

View file

@ -0,0 +1,20 @@
<meta charset="utf-8">
<title>'offset-rotate' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runUnsupportedPropertyTests('offset-rotate', [
'auto 90deg',
'reverse -90deg',
]);
</script>

View file

@ -0,0 +1,23 @@
<!doctype html>
<meta charset="utf-8">
<title>'offset' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runUnsupportedPropertyTests('offset', [
'auto', '10px 30px', 'none',
'ray(45deg closest-side)',
'path("M 100 100 L 300 100 L 200 300 z")',
'ray(45deg closest-side) / 40px 20px'
]);
</script>

View file

@ -0,0 +1,21 @@
<!doctype html>
<meta charset="utf-8">
<title>'table-layout' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('table-layout', [
{ syntax: 'auto' },
{ syntax: 'fixed' },
]);
</script>

View file

@ -0,0 +1,22 @@
<!doctype html>
<meta charset="utf-8">
<title>'text-orientation' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('text-orientation', [
{ syntax: 'mixed' },
{ syntax: 'upright' },
{ syntax: 'sideways' },
]);
</script>

View file

@ -25,4 +25,27 @@ runPropertyTests('width', [
},
]);
runPropertyTests('min-width', [
{
syntax: '<percentage>',
specified: assert_is_equal_with_range_handling
},
{
syntax: '<length>',
specified: assert_is_equal_with_range_handling
},
]);
runPropertyTests('max-width', [
{ syntax: 'none' },
{
syntax: '<percentage>',
specified: assert_is_equal_with_range_handling
},
{
syntax: '<length>',
specified: assert_is_equal_with_range_handling
},
]);
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 50px;
height: 100px;
writing-mode: vertical-lr;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-001-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that a verticalLR element inside an horizontal container computes properly its percentage margins against the container's inline size (the container's width in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (500px), so it should be 50px and element's height should be 100px. */
writing-mode: vertical-lr;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 50px;
height: 100px;
writing-mode: vertical-rl;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-002-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that a verticalRL element inside an horizontal container computes properly its percentage margins against the container's inline size (the container's width in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (500px), so it should be 50px and element's height should be 100px. */
writing-mode: vertical-rl;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
writing-mode: vertical-lr;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 20px;
width: 460px;
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-003-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that an horizontal element inside a verticalLR container computes properly its percentage margins against the container's inline size (the container's height in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
writing-mode: vertical-lr;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (200px), so it should be 20px and element's width should be 460px. */
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-003-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that an horizontal element inside a verticalLR container computes properly its percentage margins against the container's inline size (the container's height in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 200px;
width: 500px;
writing-mode: vertical-rl;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (200px), so it should be 20px and element's width should be 460px. */
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 20px;
height: 460px;
writing-mode: vertical-lr;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-005-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that a verticalLR element inside an horizontal container computes properly its percentage margins against the container's inline size (the container's width in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (200px), so it should be 20px and element's height should be 460px. */
writing-mode: vertical-lr;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 20px;
height: 460px;
writing-mode: vertical-rl;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-006-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that a verticalRL element inside an horizontal container computes properly its percentage margins against the container's inline size (the container's width in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
}
.element {
background: magenta;
font: 50px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (200px), so it should be 20px and element's height should be 460px. */
writing-mode: vertical-rl;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins reference file</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
writing-mode: vertical-lr;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 50px;
width: 100px;
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-007-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that an horizontal element inside a verticalLR container computes properly its percentage margins against the container's inline size (the container's height in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
writing-mode: vertical-lr;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (500px), so it should be 50px and element's width should be 100px. */
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Writing Modes Test: Orthogonal element sizing and percentage margins</title>
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="match" href="sizing-orthogonal-percentage-margin-007-ref.html">
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<meta name="assert" content="This test checks that an horizontal element inside a verticalLR container computes properly its percentage margins against the container's inline size (the container's height in this test), and the element is sized accordingly subtracting those margins from the available size.">
<style>
.container {
background: cyan;
border: solid thick;
height: 500px;
width: 200px;
writing-mode: vertical-rl;
}
.element {
background: magenta;
font: 25px/1 Ahem;
margin: 10%; /* This should be computed against the container's inline size (500px), so it should be 50px and element's width should be 100px. */
writing-mode: horizontal-tb;
}
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="container">
<div class="element">XX X X X XX X X XX X XX</div>
</div>

View file

@ -0,0 +1,37 @@
<!doctype html>
<meta charset="utf-8">
<title>CSSOM: getComputedStyle cross-doc properly reflects media query changes</title>
<link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle">
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<!--
NOTE: The way this test is written doesn't match the spec, but matches all
implementations, see https://github.com/w3c/csswg-drafts/issues/2403
-->
<iframe id="frm" style="width: 100px; height: 100px"></iframe>
<script>
test(function() {
let frm = document.getElementById('frm');
let frmDoc = frm.contentWindow.document;
frmDoc.open();
frmDoc.write('<style>body { color: red } @media all and (min-width: 101px) { body { color: green } }</style><body>Should be green</body>');
frmDoc.close();
document.body.offsetTop;
assert_equals(
getComputedStyle(frmDoc.body).color,
"rgb(255, 0, 0)",
"Initial color should be red"
);
frm.style.width = "200px";
assert_equals(
getComputedStyle(frmDoc.body).color,
"rgb(0, 128, 0)",
"style should have been updated to account for media query changes"
);
}, "getComputedStyle cross-doc properly reflects media query changes");
</script>

View file

@ -9,805 +9,146 @@
<body is="my-body">
<div id="container"></div>
<script>
class MyA extends HTMLAnchorElement {
constructor() {
super();
}
}
class MyAbbr extends HTMLElement {
constructor() {
super();
}
}
class MyAddress extends HTMLElement {
constructor() {
super();
}
}
class MyArea extends HTMLAreaElement {
constructor() {
super();
}
}
class MyArticle extends HTMLElement {
constructor() {
super();
}
}
class MyAside extends HTMLElement {
constructor() {
super();
}
}
class MyAudio extends HTMLAudioElement {
constructor() {
super();
}
}
class MyB extends HTMLElement {
constructor() {
super();
}
}
class MyBase extends HTMLBaseElement {
constructor() {
super();
}
}
class MyBdi extends HTMLElement {
constructor() {
super();
}
}
class MyBdo extends HTMLElement {
constructor() {
super();
}
}
class MyBlockquote extends HTMLQuoteElement {
constructor() {
super();
}
}
class MyBody extends HTMLBodyElement {
constructor() {
super();
}
}
class MyBr extends HTMLBRElement {
constructor() {
super();
}
}
class MyButton extends HTMLButtonElement {
constructor() {
super();
}
}
class MyCanvas extends HTMLCanvasElement {
constructor() {
super();
}
}
class MyCaption extends HTMLTableCaptionElement {
constructor() {
super();
}
}
class MyCite extends HTMLElement {
constructor() {
super();
}
}
class MyCode extends HTMLElement {
constructor() {
super();
}
}
class MyCol extends HTMLTableColElement {
constructor() {
super();
}
}
class MyColgroup extends HTMLTableColElement {
constructor() {
super();
}
}
class MyData extends HTMLDataElement {
constructor() {
super();
}
}
class MyDd extends HTMLElement {
constructor() {
super();
}
}
class MyDel extends HTMLModElement {
constructor() {
super();
}
}
class MyDetails extends HTMLDetailsElement {
constructor() {
super();
}
}
class MyDfn extends HTMLElement {
constructor() {
super();
}
}
class MyDiv extends HTMLDivElement {
constructor() {
super();
}
}
class MyDl extends HTMLDListElement {
constructor() {
super();
}
}
class MyDt extends HTMLElement {
constructor() {
super();
}
}
class MyEm extends HTMLElement {
constructor() {
super();
}
}
class MyEmbed extends HTMLEmbedElement {
constructor() {
super();
}
}
class MyFieldset extends HTMLFieldSetElement {
constructor() {
super();
}
}
class MyFigcaption extends HTMLElement {
constructor() {
super();
}
}
class MyFigure extends HTMLElement {
constructor() {
super();
}
}
class MyFooter extends HTMLElement {
constructor() {
super();
}
}
class MyForm extends HTMLFormElement {
constructor() {
super();
}
}
class MyH1 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyH2 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyH3 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyH4 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyH5 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyH6 extends HTMLHeadingElement {
constructor() {
super();
}
}
class MyHeader extends HTMLElement {
constructor() {
super();
}
}
class MyHgroup extends HTMLElement {
constructor() {
super();
}
}
class MyHr extends HTMLHRElement {
constructor() {
super();
}
}
class MyHtml extends HTMLHtmlElement {
constructor() {
super();
}
}
class MyI extends HTMLElement {
constructor() {
super();
}
}
class MyIframe extends HTMLIFrameElement {
constructor() {
super();
}
}
class MyImg extends HTMLImageElement {
constructor() {
super();
}
}
class MyInput extends HTMLInputElement {
constructor() {
super();
}
}
class MyIns extends HTMLModElement {
constructor() {
super();
}
}
class MyKbd extends HTMLElement {
constructor() {
super();
}
}
class MyLabel extends HTMLLabelElement {
constructor() {
super();
}
}
class MyLegend extends HTMLLegendElement {
constructor() {
super();
}
}
class MyLi extends HTMLLIElement {
constructor() {
super();
}
}
class MyLink extends HTMLLinkElement {
constructor() {
super();
}
}
class MyMain extends HTMLElement {
constructor() {
super();
}
}
class MyMap extends HTMLMapElement {
constructor() {
super();
}
}
class MyMark extends HTMLElement {
constructor() {
super();
}
}
class MyMenu extends HTMLMenuElement {
constructor() {
super();
}
}
class MyMeta extends HTMLMetaElement {
constructor() {
super();
}
}
class MyMeter extends HTMLMeterElement {
constructor() {
super();
}
}
class MyNav extends HTMLElement {
constructor() {
super();
}
}
class MyNoscript extends HTMLElement {
constructor() {
super();
}
}
class MyObject extends HTMLObjectElement {
constructor() {
super();
}
}
class MyOl extends HTMLOListElement {
constructor() {
super();
}
}
class MyOptgroup extends HTMLOptGroupElement {
constructor() {
super();
}
}
class MyOption extends HTMLOptionElement {
constructor() {
super();
}
}
class MyOutput extends HTMLOutputElement {
constructor() {
super();
}
}
class MyP extends HTMLParagraphElement {
constructor() {
super();
}
}
class MyParam extends HTMLParamElement {
constructor() {
super();
}
}
class MyPicture extends HTMLPictureElement {
constructor() {
super();
}
}
class MyPre extends HTMLPreElement {
constructor() {
super();
}
}
class MyProgress extends HTMLProgressElement {
constructor() {
super();
}
}
class MyQ extends HTMLQuoteElement {
constructor() {
super();
}
}
class MyRp extends HTMLElement {
constructor() {
super();
}
}
class MyRt extends HTMLElement {
constructor() {
super();
}
}
class MyRuby extends HTMLElement {
constructor() {
super();
}
}
class MyS extends HTMLElement {
constructor() {
super();
}
}
class MySamp extends HTMLElement {
constructor() {
super();
}
}
class MyScript extends HTMLScriptElement {
constructor() {
super();
}
}
class MySection extends HTMLElement {
constructor() {
super();
}
}
class MySelect extends HTMLSelectElement {
constructor() {
super();
}
}
class MySmall extends HTMLElement {
constructor() {
super();
}
}
class MySource extends HTMLSourceElement {
constructor() {
super();
}
}
class MySpan extends HTMLSpanElement {
constructor() {
super();
}
}
class MyStrong extends HTMLElement {
constructor() {
super();
}
}
class MyStyle extends HTMLStyleElement {
constructor() {
super();
}
}
class MySub extends HTMLElement {
constructor() {
super();
}
}
class MySummary extends HTMLElement {
constructor() {
super();
}
}
class MySup extends HTMLElement {
constructor() {
super();
}
}
class MyTable extends HTMLTableElement {
constructor() {
super();
}
}
class MyTbody extends HTMLTableSectionElement {
constructor() {
super();
}
}
class MyTd extends HTMLTableCellElement {
constructor() {
super();
}
}
class MyTemplate extends HTMLTemplateElement {
constructor() {
super();
}
}
class MyTextarea extends HTMLTextAreaElement {
constructor() {
super();
}
}
class MyTfoot extends HTMLTableSectionElement {
constructor() {
super();
}
}
class MyTh extends HTMLTableCellElement {
constructor() {
super();
}
}
class MyThead extends HTMLTableSectionElement {
constructor() {
super();
}
}
class MyTime extends HTMLTimeElement {
constructor() {
super();
}
}
class MyTitle extends HTMLTitleElement {
constructor() {
super();
}
}
class MyTr extends HTMLTableRowElement {
constructor() {
super();
}
}
class MyTrack extends HTMLTrackElement {
constructor() {
super();
}
}
class MyU extends HTMLElement {
constructor() {
super();
}
}
class MyUl extends HTMLUListElement {
constructor() {
super();
}
}
class MyVar extends HTMLElement {
constructor() {
super();
}
}
class MyVideo extends HTMLVideoElement {
constructor() {
super();
}
}
class MyWbr extends HTMLElement {
constructor() {
super();
}
}
let testData = [
{tag: 'a', klass: MyA},
{tag: 'abbr', klass: MyAbbr},
{tag: 'address', klass: MyAddress},
{tag: 'area', klass: MyArea},
{tag: 'article', klass: MyArticle},
{tag: 'aside', klass: MyAside},
{tag: 'audio', klass: MyAudio},
{tag: 'b', klass: MyB},
{tag: 'base', klass: MyBase},
{tag: 'bdi', klass: MyBdi},
{tag: 'bdo', klass: MyBdo},
{tag: 'blockquote', klass: MyBlockquote},
{tag: 'body', klass: MyBody, parsing: 'document'},
{tag: 'br', klass: MyBr},
{tag: 'button', klass: MyButton},
{tag: 'canvas', klass: MyCanvas},
{tag: 'caption', klass: MyCaption, parsing: 'table'},
{tag: 'cite', klass: MyCite},
{tag: 'code', klass: MyCode},
{tag: 'col', klass: MyCol, parsing: 'table'},
{tag: 'colgroup', klass: MyColgroup, parsing: 'table'},
{tag: 'data', klass: MyData},
{tag: 'dd', klass: MyDd},
{tag: 'del', klass: MyDel},
{tag: 'details', klass: MyDetails},
{tag: 'dfn', klass: MyDfn},
{tag: 'div', klass: MyDiv},
{tag: 'dl', klass: MyDl},
{tag: 'dt', klass: MyDt},
{tag: 'em', klass: MyEm},
{tag: 'embed', klass: MyEmbed},
{tag: 'fieldset', klass: MyFieldset},
{tag: 'figcaption', klass: MyFigcaption},
{tag: 'figure', klass: MyFigure},
{tag: 'footer', klass: MyFooter},
{tag: 'form', klass: MyForm},
{tag: 'h1', klass: MyH1},
{tag: 'h2', klass: MyH2},
{tag: 'h3', klass: MyH3},
{tag: 'h4', klass: MyH4},
{tag: 'h5', klass: MyH5},
{tag: 'h6', klass: MyH6},
{tag: 'header', klass: MyHeader},
{tag: 'hgroup', klass: MyHgroup},
{tag: 'hr', klass: MyHr},
{tag: 'html', klass: MyHtml, parsing: 'document'},
{tag: 'i', klass: MyI},
{tag: 'iframe', klass: MyIframe},
{tag: 'img', klass: MyImg},
{tag: 'input', klass: MyInput},
{tag: 'ins', klass: MyIns},
{tag: 'kbd', klass: MyKbd},
{tag: 'label', klass: MyLabel},
{tag: 'legend', klass: MyLegend},
{tag: 'li', klass: MyLi},
{tag: 'link', klass: MyLink},
{tag: 'main', klass: MyMain},
{tag: 'map', klass: MyMap},
{tag: 'mark', klass: MyMark},
{tag: 'menu', klass: MyMenu},
{tag: 'meta', klass: MyMeta},
{tag: 'meter', klass: MyMeter},
{tag: 'nav', klass: MyNav},
{tag: 'noscript', klass: MyNoscript},
{tag: 'object', klass: MyObject},
{tag: 'ol', klass: MyOl},
{tag: 'optgroup', klass: MyOptgroup},
{tag: 'option', klass: MyOption},
{tag: 'output', klass: MyOutput},
{tag: 'p', klass: MyP},
{tag: 'param', klass: MyParam},
{tag: 'picture', klass: MyPicture},
{tag: 'pre', klass: MyPre},
{tag: 'progress', klass: MyProgress},
{tag: 'q', klass: MyQ},
{tag: 'rp', klass: MyRp},
{tag: 'rt', klass: MyRt},
{tag: 'ruby', klass: MyRuby},
{tag: 's', klass: MyS},
{tag: 'samp', klass: MySamp},
{tag: 'script', klass: MyScript},
{tag: 'section', klass: MySection},
{tag: 'select', klass: MySelect},
{tag: 'small', klass: MySmall},
{tag: 'source', klass: MySource},
{tag: 'span', klass: MySpan},
{tag: 'strong', klass: MyStrong},
{tag: 'style', klass: MyStyle},
{tag: 'sub', klass: MySub},
{tag: 'summary', klass: MySummary},
{tag: 'sup', klass: MySup},
{tag: 'table', klass: MyTable},
{tag: 'tbody', klass: MyTbody, parsing: 'table'},
{tag: 'td', klass: MyTd, parsing: 'table'},
{tag: 'template', klass: MyTemplate},
{tag: 'textarea', klass: MyTextarea},
{tag: 'tfoot', klass: MyTfoot, parsing: 'table'},
{tag: 'th', klass: MyTh, parsing: 'table'},
{tag: 'thead', klass: MyThead, parsing: 'table'},
{tag: 'time', klass: MyTime},
{tag: 'title', klass: MyTitle},
{tag: 'tr', klass: MyTr, parsing: 'table'},
{tag: 'track', klass: MyTrack},
{tag: 'u', klass: MyU},
{tag: 'ul', klass: MyUl},
{tag: 'var', klass: MyVar},
{tag: 'video', klass: MyVideo},
{tag: 'wbr', klass: MyWbr},
{tag: 'a', interface: 'HTMLAnchorElement'},
{tag: 'abbr', interface: 'HTMLElement'},
{tag: 'address', interface: 'HTMLElement'},
{tag: 'area', interface: 'HTMLAreaElement'},
{tag: 'article', interface: 'HTMLElement'},
{tag: 'aside', interface: 'HTMLElement'},
{tag: 'audio', interface: 'HTMLAudioElement'},
{tag: 'b', interface: 'HTMLElement'},
{tag: 'base', interface: 'HTMLBaseElement'},
{tag: 'bdi', interface: 'HTMLElement'},
{tag: 'bdo', interface: 'HTMLElement'},
{tag: 'blockquote', interface: 'HTMLQuoteElement'},
{tag: 'body', interface: 'HTMLBodyElement', parsing: 'document'},
{tag: 'br', interface: 'HTMLBRElement'},
{tag: 'button', interface: 'HTMLButtonElement'},
{tag: 'canvas', interface: 'HTMLCanvasElement'},
{tag: 'caption', interface: 'HTMLTableCaptionElement', parsing: 'table'},
{tag: 'cite', interface: 'HTMLElement'},
{tag: 'code', interface: 'HTMLElement'},
{tag: 'col', interface: 'HTMLTableColElement', parsing: 'table'},
{tag: 'colgroup', interface: 'HTMLTableColElement', parsing: 'table'},
{tag: 'data', interface: 'HTMLDataElement'},
{tag: 'dd', interface: 'HTMLElement'},
{tag: 'del', interface: 'HTMLModElement'},
{tag: 'details', interface: 'HTMLDetailsElement'},
{tag: 'dfn', interface: 'HTMLElement'},
{tag: 'div', interface: 'HTMLDivElement'},
{tag: 'dl', interface: 'HTMLDListElement'},
{tag: 'dt', interface: 'HTMLElement'},
{tag: 'em', interface: 'HTMLElement'},
{tag: 'embed', interface: 'HTMLEmbedElement'},
{tag: 'fieldset', interface: 'HTMLFieldSetElement'},
{tag: 'figcaption', interface: 'HTMLElement'},
{tag: 'figure', interface: 'HTMLElement'},
{tag: 'footer', interface: 'HTMLElement'},
{tag: 'form', interface: 'HTMLFormElement'},
{tag: 'h1', interface: 'HTMLHeadingElement'},
{tag: 'h2', interface: 'HTMLHeadingElement'},
{tag: 'h3', interface: 'HTMLHeadingElement'},
{tag: 'h4', interface: 'HTMLHeadingElement'},
{tag: 'h5', interface: 'HTMLHeadingElement'},
{tag: 'h6', interface: 'HTMLHeadingElement'},
{tag: 'header', interface: 'HTMLElement'},
{tag: 'hgroup', interface: 'HTMLElement'},
{tag: 'hr', interface: 'HTMLHRElement'},
{tag: 'html', interface: 'HTMLHtmlElement', parsing: 'document'},
{tag: 'i', interface: 'HTMLElement'},
{tag: 'iframe', interface: 'HTMLIFrameElement'},
{tag: 'img', interface: 'HTMLImageElement'},
{tag: 'input', interface: 'HTMLInputElement'},
{tag: 'ins', interface: 'HTMLModElement'},
{tag: 'kbd', interface: 'HTMLElement'},
{tag: 'label', interface: 'HTMLLabelElement'},
{tag: 'legend', interface: 'HTMLLegendElement'},
{tag: 'li', interface: 'HTMLLIElement'},
{tag: 'link', interface: 'HTMLLinkElement'},
{tag: 'main', interface: 'HTMLElement'},
{tag: 'map', interface: 'HTMLMapElement'},
{tag: 'mark', interface: 'HTMLElement'},
{tag: 'menu', interface: 'HTMLMenuElement'},
{tag: 'meta', interface: 'HTMLMetaElement'},
{tag: 'meter', interface: 'HTMLMeterElement'},
{tag: 'nav', interface: 'HTMLElement'},
{tag: 'noscript', interface: 'HTMLElement'},
{tag: 'object', interface: 'HTMLObjectElement'},
{tag: 'ol', interface: 'HTMLOListElement'},
{tag: 'optgroup', interface: 'HTMLOptGroupElement'},
{tag: 'option', interface: 'HTMLOptionElement'},
{tag: 'output', interface: 'HTMLOutputElement'},
{tag: 'p', interface: 'HTMLParagraphElement'},
{tag: 'param', interface: 'HTMLParamElement'},
{tag: 'picture', interface: 'HTMLPictureElement'},
{tag: 'pre', interface: 'HTMLPreElement'},
{tag: 'progress', interface: 'HTMLProgressElement'},
{tag: 'q', interface: 'HTMLQuoteElement'},
{tag: 'rp', interface: 'HTMLElement'},
{tag: 'rt', interface: 'HTMLElement'},
{tag: 'ruby', interface: 'HTMLElement'},
{tag: 's', interface: 'HTMLElement'},
{tag: 'samp', interface: 'HTMLElement'},
{tag: 'script', interface: 'HTMLScriptElement'},
{tag: 'section', interface: 'HTMLElement'},
{tag: 'select', interface: 'HTMLSelectElement'},
{tag: 'small', interface: 'HTMLElement'},
{tag: 'source', interface: 'HTMLSourceElement'},
{tag: 'span', interface: 'HTMLSpanElement'},
{tag: 'strong', interface: 'HTMLElement'},
{tag: 'style', interface: 'HTMLStyleElement'},
{tag: 'sub', interface: 'HTMLElement'},
{tag: 'summary', interface: 'HTMLElement'},
{tag: 'sup', interface: 'HTMLElement'},
{tag: 'table', interface: 'HTMLTableElement'},
{tag: 'tbody', interface: 'HTMLTableSectionElement', parsing: 'table'},
{tag: 'td', interface: 'HTMLTableCellElement', parsing: 'table'},
{tag: 'template', interface: 'HTMLTemplateElement'},
{tag: 'textarea', interface: 'HTMLTextAreaElement'},
{tag: 'tfoot', interface: 'HTMLTableSectionElement', parsing: 'table'},
{tag: 'th', interface: 'HTMLTableCellElement', parsing: 'table'},
{tag: 'thead', interface: 'HTMLTableSectionElement', parsing: 'table'},
{tag: 'time', interface: 'HTMLTimeElement'},
{tag: 'title', interface: 'HTMLTitleElement'},
{tag: 'tr', interface: 'HTMLTableRowElement', parsing: 'table'},
{tag: 'track', interface: 'HTMLTrackElement'},
{tag: 'u', interface: 'HTMLElement'},
{tag: 'ul', interface: 'HTMLUListElement'},
{tag: 'var', interface: 'HTMLElement'},
{tag: 'video', interface: 'HTMLVideoElement'},
{tag: 'wbr', interface: 'HTMLElement'},
];
// HTMLDataListElement isn't implemented by all major browsers yet.
if (window.HTMLDataListElement) {
testData.push({tag: 'datalist', klass: class extends HTMLDataListElement {
constructor() {
super();
}
}});
testData.push({tag: 'datalist', interface: 'HTMLDataListElement'});
}
// HTMLDialogElement isn't implemented by all major browsers yet.
if (window.HTMLDialogElement) {
testData.push({tag: 'dialog', klass: class MyDialog extends HTMLDialogElement {
constructor() {
super();
}
}});
testData.push({tag: 'dialog', interface: 'HTMLDialogElement'});
}
// HTMLSlotElement isn't implemented by all major browsers yet.
if (window.HTMLSlotElement) {
testData.push({tag: 'slot', klass: class extends HTMLSlotElement {
constructor() {
super();
}
}});
testData.push({tag: 'slot', interface: 'HTMLSlotElement'});
}
for (const t of testData) {
test(() => {
let name = 'my-' + t.tag;
customElements.define(name, t.klass, { extends: t.tag });
let klass = eval(`(class extends ${t.interface} {})`);
customElements.define(name, klass, { extends: t.tag });
test(() => {
let customized = new t.klass();
assert_equals(customized.constructor, t.klass);
assert_equals(customized.cloneNode().constructor, t.klass,
let customized = new klass();
assert_equals(customized.constructor, klass);
assert_equals(customized.cloneNode().constructor, klass,
'Cloning a customized built-in element should succeed.');
}, `${t.tag}: Operator 'new' should instantiate a customized built-in element`);
test(() => {
let customized = document.createElement(t.tag, { is: name });
assert_equals(customized.constructor, t.klass);
assert_equals(customized.cloneNode().constructor, t.klass,
assert_equals(customized.constructor, klass);
assert_equals(customized.cloneNode().constructor, klass,
'Cloning a customized built-in element should succeed.');
}, `${t.tag}: document.createElement() should instantiate a customized built-in element`);
@ -815,8 +156,8 @@ for (const t of testData) {
let test = async_test(`${t.tag}: document parser should instantiate a customized built-in element`);
window.addEventListener('load', test.step_func_done(() => {
let customized = document.querySelector(t.tag);
assert_equals(customized.constructor, t.klass);
assert_equals(customized.cloneNode().constructor, t.klass,
assert_equals(customized.constructor, klass);
assert_equals(customized.cloneNode().constructor, klass,
'Cloning a customized built-in element should succeed.');
}));
return;
@ -829,8 +170,8 @@ for (const t of testData) {
container.innerHTML = `<${t.tag} is="${name}" id="${name}">`;
}
let customized = document.getElementById(name);
assert_equals(customized.constructor, t.klass);
assert_equals(customized.cloneNode().constructor, t.klass,
assert_equals(customized.constructor, klass);
assert_equals(customized.cloneNode().constructor, klass,
'Cloning a customized built-in element should succeed.');
}, `${t.tag}: innerHTML should instantiate a customized built-in element`);

View file

@ -0,0 +1,596 @@
enum AudioContextState {
"suspended",
"running",
"closed"
};
callback DecodeErrorCallback = void (DOMException error);
callback DecodeSuccessCallback = void (AudioBuffer decodedData);
[Exposed=Window]
interface BaseAudioContext : EventTarget {
readonly attribute AudioDestinationNode destination;
readonly attribute float sampleRate;
readonly attribute double currentTime;
readonly attribute AudioListener listener;
readonly attribute AudioContextState state;
[SameObject, SecureContext]
readonly attribute AudioWorklet audioWorklet;
Promise<void> resume ();
attribute EventHandler onstatechange;
AudioBuffer createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate);
Promise<AudioBuffer> decodeAudioData (ArrayBuffer audioData,
optional DecodeSuccessCallback successCallback,
optional DecodeErrorCallback errorCallback);
AudioBufferSourceNode createBufferSource ();
ConstantSourceNode createConstantSource ();
ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0,
optional unsigned long numberOfInputChannels = 2,
optional unsigned long numberOfOutputChannels = 2);
AnalyserNode createAnalyser ();
GainNode createGain ();
DelayNode createDelay (optional double maxDelayTime = 1.0);
BiquadFilterNode createBiquadFilter ();
IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback);
WaveShaperNode createWaveShaper ();
PannerNode createPanner ();
StereoPannerNode createStereoPanner ();
ConvolverNode createConvolver ();
ChannelSplitterNode createChannelSplitter (optional unsigned long numberOfOutputs = 6);
ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
DynamicsCompressorNode createDynamicsCompressor ();
OscillatorNode createOscillator ();
PeriodicWave createPeriodicWave (sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints constraints);
};
[Exposed=Window]
enum AudioContextLatencyCategory {
"balanced",
"interactive",
"playback"
};
[Exposed=Window,
Constructor (optional AudioContextOptions contextOptions)]
interface AudioContext : BaseAudioContext {
readonly attribute double baseLatency;
readonly attribute double outputLatency;
AudioTimestamp getOutputTimestamp ();
Promise<void> suspend ();
Promise<void> close ();
MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement);
MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream);
MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (MediaStreamTrack mediaStreamTrack);
MediaStreamAudioDestinationNode createMediaStreamDestination ();
};
[Exposed=Window]
dictionary AudioContextOptions {
(AudioContextLatencyCategory or double) latencyHint = "interactive";
float sampleRate;
};
[Exposed=Window]
dictionary AudioTimestamp {
double contextTime;
DOMHighResTimeStamp performanceTime;
};
[Exposed=Window,
Constructor (OfflineAudioContextOptions contextOptions),
Constructor (unsigned long numberOfChannels, unsigned long length, float sampleRate)]
interface OfflineAudioContext : BaseAudioContext {
Promise<AudioBuffer> startRendering();
Promise<void> suspend(double suspendTime);
readonly attribute unsigned long length;
attribute EventHandler oncomplete;
};
[Exposed=Window]
dictionary OfflineAudioContextOptions {
unsigned long numberOfChannels = 1;
required unsigned long length;
required float sampleRate;
};
[Exposed=Window,
Constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict)]
interface OfflineAudioCompletionEvent : Event {
readonly attribute AudioBuffer renderedBuffer;
};
[Exposed=Window]
dictionary OfflineAudioCompletionEventInit : EventInit {
required AudioBuffer renderedBuffer;
};
[Exposed=Window,
Constructor (AudioBufferOptions options)]
interface AudioBuffer {
readonly attribute float sampleRate;
readonly attribute unsigned long length;
readonly attribute double duration;
readonly attribute unsigned long numberOfChannels;
Float32Array getChannelData (unsigned long channel);
void copyFromChannel (Float32Array destination, unsigned long channelNumber, optional unsigned long startInChannel = 0);
void copyToChannel (Float32Array source, unsigned long channelNumber, optional unsigned long startInChannel = 0);
};
dictionary AudioBufferOptions {
unsigned long numberOfChannels = 1;
required unsigned long length;
required float sampleRate;
};
[Exposed=Window]
interface AudioNode : EventTarget {
AudioNode connect (AudioNode destinationNode,
optional unsigned long output = 0,
optional unsigned long input = 0);
void connect (AudioParam destinationParam, optional unsigned long output = 0);
void disconnect ();
void disconnect (unsigned long output);
void disconnect (AudioNode destinationNode);
void disconnect (AudioNode destinationNode, unsigned long output);
void disconnect (AudioNode destinationNode, unsigned long output, unsigned long input);
void disconnect (AudioParam destinationParam);
void disconnect (AudioParam destinationParam, unsigned long output);
readonly attribute BaseAudioContext context;
readonly attribute unsigned long numberOfInputs;
readonly attribute unsigned long numberOfOutputs;
attribute unsigned long channelCount;
attribute ChannelCountMode channelCountMode;
attribute ChannelInterpretation channelInterpretation;
};
[Exposed=Window]
enum ChannelCountMode {
"max",
"clamped-max",
"explicit"
};
[Exposed=Window]
enum ChannelInterpretation {
"speakers",
"discrete"
};
dictionary AudioNodeOptions {
unsigned long channelCount;
ChannelCountMode channelCountMode;
ChannelInterpretation channelInterpretation;
};
[Exposed=Window]
interface AudioParam {
attribute float value;
readonly attribute float defaultValue;
readonly attribute float minValue;
readonly attribute float maxValue;
AudioParam setValueAtTime (float value, double startTime);
AudioParam linearRampToValueAtTime (float value, double endTime);
AudioParam exponentialRampToValueAtTime (float value, double endTime);
AudioParam setTargetAtTime (float target, double startTime, float timeConstant);
AudioParam setValueCurveAtTime (sequence<float> values, double startTime, double duration);
AudioParam cancelScheduledValues (double cancelTime);
AudioParam cancelAndHoldAtTime (double cancelTime);
};
[Exposed=Window]
interface AudioScheduledSourceNode : AudioNode {
attribute EventHandler onended;
void start(optional double when = 0);
void stop(optional double when = 0);
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional AnalyserOptions options)]
interface AnalyserNode : AudioNode {
void getFloatFrequencyData (Float32Array array);
void getByteFrequencyData (Uint8Array array);
void getFloatTimeDomainData (Float32Array array);
void getByteTimeDomainData (Uint8Array array);
attribute unsigned long fftSize;
readonly attribute unsigned long frequencyBinCount;
attribute double minDecibels;
attribute double maxDecibels;
attribute double smoothingTimeConstant;
};
dictionary AnalyserOptions : AudioNodeOptions {
unsigned long fftSize = 2048;
double maxDecibels = -30;
double minDecibels = -100;
double smoothingTimeConstant = 0.8;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options)]
interface AudioBufferSourceNode : AudioScheduledSourceNode {
attribute AudioBuffer? buffer;
readonly attribute AudioParam playbackRate;
readonly attribute AudioParam detune;
attribute boolean loop;
attribute double loopStart;
attribute double loopEnd;
void start (optional double when = 0,
optional double offset,
optional double duration);
void stop (optional double when = 0);
};
dictionary AudioBufferSourceOptions {
AudioBuffer? buffer;
float detune = 0;
boolean loop = false;
double loopEnd = 0;
double loopStart = 0;
float playbackRate = 1;
};
[Exposed=Window]
interface AudioDestinationNode : AudioNode {
readonly attribute unsigned long maxChannelCount;
};
[Exposed=Window]
interface AudioListener {
readonly attribute AudioParam positionX;
readonly attribute AudioParam positionY;
readonly attribute AudioParam positionZ;
readonly attribute AudioParam forwardX;
readonly attribute AudioParam forwardY;
readonly attribute AudioParam forwardZ;
readonly attribute AudioParam upX;
readonly attribute AudioParam upY;
readonly attribute AudioParam upZ;
void setPosition (float x, float y, float z);
void setOrientation (float x, float y, float z, float xUp, float yUp, float zUp);
};
[Exposed=Window,
Constructor (DOMString type, AudioProcessingEventInit eventInitDict)]
interface AudioProcessingEvent : Event {
readonly attribute double playbackTime;
readonly attribute AudioBuffer inputBuffer;
readonly attribute AudioBuffer outputBuffer;
};
dictionary AudioProcessingEventInit : EventInit {
required double playbackTime;
required AudioBuffer inputBuffer;
required AudioBuffer outputBuffer;
};
enum BiquadFilterType {
"lowpass",
"highpass",
"bandpass",
"lowshelf",
"highshelf",
"peaking",
"notch",
"allpass"
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional BiquadFilterOptions options)]
interface BiquadFilterNode : AudioNode {
attribute BiquadFilterType type;
readonly attribute AudioParam frequency;
readonly attribute AudioParam detune;
readonly attribute AudioParam Q;
readonly attribute AudioParam gain;
void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
};
dictionary BiquadFilterOptions : AudioNodeOptions {
BiquadFilterType type = "lowpass";
float Q = 1;
float detune = 0;
float frequency = 350;
float gain = 0;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional ChannelMergerOptions options)]
interface ChannelMergerNode : AudioNode {
};
dictionary ChannelMergerOptions : AudioNodeOptions {
unsigned long numberOfInputs = 6;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional ChannelSplitterNode options)]
interface ChannelSplitterNode : AudioNode {
};
dictionary ChannelSplitterOptions : AudioNodeOptions {
unsigned long numberOfOutputs = 6;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional ConstantSourceOptions options)]
interface ConstantSourceNode : AudioScheduledSourceNode {
readonly attribute AudioParam offset;
};
dictionary ConstantSourceOptions {
float offset = 1;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional ConvolverOptions options)]
interface ConvolverNode : AudioNode {
attribute AudioBuffer? buffer;
attribute boolean normalize;
};
dictionary ConvolverOptions : AudioNodeOptions {
AudioBuffer? buffer;
boolean disableNormalization = false;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional DelayOptions options)]
interface DelayNode : AudioNode {
readonly attribute AudioParam delayTime;
};
dictionary DelayOptions : AudioNodeOptions {
double maxDelayTime = 1;
double delayTime = 0;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional DynamicsCompressorOptions options)]
interface DynamicsCompressorNode : AudioNode {
readonly attribute AudioParam threshold;
readonly attribute AudioParam knee;
readonly attribute AudioParam ratio;
readonly attribute float reduction;
readonly attribute AudioParam attack;
readonly attribute AudioParam release;
};
dictionary DynamicsCompressorOptions : AudioNodeOptions {
float attack = 0.003;
float knee = 30;
float ratio = 12;
float release = 0.25;
float threshold = -24;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional GainOptions options)]
interface GainNode : AudioNode {
readonly attribute AudioParam gain;
};
dictionary GainOptions : AudioNodeOptions {
float gain = 1.0;
};
[Exposed=Window,
Constructor (BaseAudioContext context, IIRFilterOptions options)]
interface IIRFilterNode : AudioNode {
void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
};
dictionary IIRFilterOptions : AudioNodeOptions {
required sequence<double> feedforward;
required sequence<double> feedback;
};
[Exposed=Window,
Constructor (BaseAudioContext context, MediaElementAudioSourceOptions options)]
interface MediaElementAudioSourceNode : AudioNode {
[SameObject] readonly attribute HTMLMediaElement mediaElement;
};
dictionary MediaElementAudioSourceOptions {
required HTMLMediaElement mediaElement;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional AudioNodeOptions options)]
interface MediaStreamAudioDestinationNode : AudioNode {
readonly attribute MediaStream stream;
};
[Exposed=Window,
Constructor (BaseAudioContext context, MediaStreamAudioSourceOptions options)]
interface MediaStreamAudioSourceNode : AudioNode {
[SameObject] readonly attribute MediaStream mediaStream;
};
dictionary MediaStreamAudioSourceOptions {
required MediaStream mediaStream;
};
[Exposed=Window,
Constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options)]
interface MediaStreamTrackAudioSourceNode : AudioNode {
};
dictionary MediaStreamTrackAudioSourceOptions {
required MediaStreamTrack mediaStreamTrack;
};
enum OscillatorType {
"sine",
"square",
"sawtooth",
"triangle",
"custom"
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional OscillatorOptions options)]
interface OscillatorNode : AudioScheduledSourceNode {
attribute OscillatorType type;
readonly attribute AudioParam frequency;
readonly attribute AudioParam detune;
void setPeriodicWave (PeriodicWave periodicWave);
};
dictionary OscillatorOptions : AudioNodeOptions {
OscillatorType type = "sine";
float frequency = 440;
float detune = 0;
PeriodicWave periodicWave;
};
enum PanningModelType {
"equalpower",
"HRTF"
};
enum DistanceModelType {
"linear",
"inverse",
"exponential"
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional PannerOptions options)]
interface PannerNode : AudioNode {
attribute PanningModelType panningModel;
readonly attribute AudioParam positionX;
readonly attribute AudioParam positionY;
readonly attribute AudioParam positionZ;
readonly attribute AudioParam orientationX;
readonly attribute AudioParam orientationY;
readonly attribute AudioParam orientationZ;
attribute DistanceModelType distanceModel;
attribute double refDistance;
attribute double maxDistance;
attribute double rolloffFactor;
attribute double coneInnerAngle;
attribute double coneOuterAngle;
attribute double coneOuterGain;
void setPosition (float x, float y, float z);
void setOrientation (float x, float y, float z);
};
dictionary PannerOptions : AudioNodeOptions {
PanningModelType panningModel = "equalpower";
DistanceModelType distanceModel = "inverse";
float positionX = 0;
float positionY = 0;
float positionZ = 0;
float orientationX = 1;
float orientationY = 0;
float orientationZ = 0;
double refDistance = 1;
double maxDistance = 10000;
double rolloffFactor = 1;
double coneInnerAngle = 360;
double coneOuterAngle = 360;
double coneOuterGain = 0;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional PeriodicWaveOptions options)]
interface PeriodicWave {
};
dictionary PeriodicWaveConstraints {
boolean disableNormalization = false;
};
dictionary PeriodicWaveOptions : PeriodicWaveConstraints {
sequence<float> real;
sequence<float> imag;
};
[Exposed=Window]
interface ScriptProcessorNode : AudioNode {
attribute EventHandler onaudioprocess;
readonly attribute long bufferSize;
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional StereoPannerOptions options)]
interface StereoPannerNode : AudioNode {
readonly attribute AudioParam pan;
};
dictionary StereoPannerOptions : AudioNodeOptions {
float pan = 0;
};
enum OverSampleType {
"none",
"2x",
"4x"
};
[Exposed=Window,
Constructor (BaseAudioContext context, optional WaveShaperOptions options)]
interface WaveShaperNode : AudioNode {
attribute Float32Array? curve;
attribute OverSampleType oversample;
};
dictionary WaveShaperOptions : AudioNodeOptions {
sequence<float> curve;
OverSampleType oversample = "none";
};
[Exposed=Window, SecureContext]
interface AudioWorklet : Worklet {
};
[Global=(Worklet, AudioWorklet), Exposed=AudioWorklet]
interface AudioWorkletGlobalScope : WorkletGlobalScope {
void registerProcessor (DOMString name, VoidFunction processorCtor);
readonly attribute double currentTime;
readonly attribute float sampleRate;
};
[Exposed=Window]
interface AudioParamMap {
readonly maplike<DOMString, AudioParam>;
};
enum AudioWorkletProcessorState {
"pending",
"running",
"stopped",
"error"
};
[Exposed=Window,
SecureContext,
Constructor (BaseAudioContext context, DOMString name, optional AudioWorkletNodeOptions options)]
interface AudioWorkletNode : AudioNode {
readonly attribute AudioParamMap parameters;
readonly attribute MessagePort port;
readonly attribute AudioWorkletProcessorState processorState;
attribute EventHandler onprocessorstatechange;
};
dictionary AudioWorkletNodeOptions : AudioNodeOptions {
unsigned long numberOfInputs = 1;
unsigned long numberOfOutputs = 1;
sequence<unsigned long> outputChannelCount;
record<DOMString, double> parameterData;
object processorOptions = null;
};
[Exposed=AudioWorklet,
Constructor (optional AudioWorkletNodeOptions options)]
interface AudioWorkletProcessor {
readonly attribute MessagePort port;
};
dictionary AudioParamDescriptor {
required DOMString name;
float defaultValue = 0;
float minValue = -3.4028235e38;
float maxValue = 3.4028235e38;
};

View file

@ -112,7 +112,7 @@ function perform_test() {
addEntryIfExists(entries, expected_entries, pathname + 'blue.png?id=video-poster', 'video');
addEntryIfExists(entries, expected_entries, '/media/test.mp4?id=video-src', 'video');
addEntryIfExists(entries, expected_entries, '/media/test.mp4?id=video-source', 'source');
addEntryIfExists(entries, expected_entries, '/media/test.ogg?id=video-source', 'source');
addEntryIfExists(entries, expected_entries, '/media/test.ogv?id=video-source', 'source');
addEntryIfExists(entries, expected_entries, pathname + 'empty.py?id=video-track', 'track');
addEntryIfExists(entries, expected_entries, pathname + 'empty.py?id=audio-src', 'audio');
addEntryIfExists(entries, expected_entries, pathname + 'empty.py?id=audio-source-wav', 'source');

View file

@ -646,7 +646,12 @@ def get_ports(config, ssl_environment):
def normalise_config(config, ports):
if "host" in config:
logger.warning("host in config is deprecated; use browser_host instead")
host = config["host"]
else:
host = config["browser_host"]
domains = get_subdomains(host)
not_domains = get_not_subdomains(host)
@ -675,6 +680,8 @@ def normalise_config(config, ports):
config_["not_domains"] = not_domains
config_["ports"] = ports_
config_["bind_address"] = bind_address
if config.get("server_host", None) is None:
config_["server_host"] = host
return config_
@ -692,7 +699,7 @@ def get_ssl_config(config, ssl_environment):
def start(config, ssl_environment, routes, **kwargs):
host = config.get("host_ip") or config["host"]
host = config["server_host"]
ports = get_ports(config, ssl_environment)
paths = get_paths(config)
bind_address = config["bind_address"]
@ -815,7 +822,7 @@ def run(**kwargs):
with get_ssl_environment(config) as ssl_env:
ports = get_ports(config, ssl_env)
config = normalise_config(config, ports)
host = config["host"]
host = config["browser_host"]
bind_address = config["bind_address"]
if config["check_subdomains"]:

View file

@ -96,10 +96,11 @@ otherwise install OpenSSL and ensure that it's on your $PATH.""")
def check_environ(product):
if product not in ("firefox", "servo"):
expected_hosts = {".".join(x)
for x in serve.get_subdomains("web-platform.test").values()}
expected_hosts |= {".".join(x)
for x in serve.get_not_subdomains("web-platform.test").values()}
config = serve.load_config(os.path.join(wpt_root, "config.default.json"),
os.path.join(wpt_root, "config.json"))
config = serve.normalise_config(config, {})
expected_hosts = (set(config["domains"].itervalues()) ^
set(config["not_domains"].itervalues()))
missing_hosts = set(expected_hosts)
if platform.uname()[0] != "Windows":
hosts_path = "/etc/hosts"

View file

@ -122,10 +122,8 @@ def env_options():
# domains to localhost without relying on the network stack.
#
# https://github.com/w3c/web-platform-tests/pull/9480
return {"host_ip": "127.0.0.1",
"host": "web-platform.test",
return {"server_host": "127.0.0.1",
"bind_address": False,
"certificate_domain": "web-platform.test",
"supports_debugger": True}

View file

@ -52,8 +52,7 @@ def env_extras(**kwargs):
def env_options():
return {"host": "web-platform.test",
"host_ip": "127.0.0.1",
return {"server_host": "127.0.0.1",
"bind_address": False,
"testharnessreport": "testharnessreport-servo.js",
"supports_debugger": True}

View file

@ -53,8 +53,7 @@ def env_extras(**kwargs):
def env_options():
return {"host_ip": "127.0.0.1",
"host": "web-platform.test",
return {"server_host": "127.0.0.1",
"testharnessreport": "testharnessreport-servodriver.js",
"supports_debugger": True}

View file

@ -147,8 +147,8 @@ class TestEnvironment(object):
"ssl": {}
}
if "host" in self.options:
local_config["host"] = self.options["host"]
if "browser_host" in self.options:
local_config["browser_host"] = self.options["browser_host"]
if "bind_address" in self.options:
local_config["bind_address"] = self.options["bind_address"]
@ -156,7 +156,7 @@ class TestEnvironment(object):
with open(default_config_path) as f:
default_config = json.load(f)
local_config["host_ip"] = self.options.get("host_ip", None)
local_config["server_host"] = self.options.get("server_host", None)
local_config["ssl"]["encrypt_after_connect"] = self.options.get("encrypt_after_connect", False)
config = serve.merge_json(default_config, local_config)
@ -165,7 +165,7 @@ class TestEnvironment(object):
if not self.ssl_env.ssl_enabled:
config["ports"]["https"] = [None]
host = self.options.get("certificate_domain", config["host"])
host = config["browser_host"]
hosts = [host]
hosts.extend("%s.%s" % (item[0], host) for item in serve.get_subdomains(host).values())
key_file, certificate = self.ssl_env.host_cert_path(hosts)
@ -240,7 +240,7 @@ class TestEnvironment(object):
def test_servers(self):
failed = []
host = self.config.get("host_ip") or self.config.get("host")
host = self.config["server_host"]
for scheme, servers in self.servers.iteritems():
for port, server in servers:
if self.test_server_port:

View file

@ -172,7 +172,7 @@ class TestExecutor(object):
def server_url(self, protocol):
return "%s://%s:%s" % (protocol,
self.server_config["host"],
self.server_config["browser_host"],
self.server_config["ports"][protocol][0])
def test_url(self, test):

View file

@ -58,6 +58,8 @@ def test_server_start_config(product):
start.assert_called_once()
args = start.call_args
config = args[0][0]
if "host" in env_options:
assert config["host"] == env_options["host"]
if "server_host" in env_options:
assert config["server_host"] == env_options["server_host"]
else:
assert config["server_host"] == config["browser_host"]
assert isinstance(config["bind_address"], bool)

View file

@ -4,6 +4,7 @@ import os
import sys
from collections import OrderedDict
from distutils.spawn import find_executable
from datetime import datetime, timedelta
import config
import wpttest
@ -82,6 +83,36 @@ scheme host and port.""")
mode_group.add_argument("--verify-log-full", action="store_true",
default=False,
help="Output per-iteration test results when running verify")
mode_group.add_argument("--verify-repeat-loop", action="store",
default=10,
help="Number of iterations for a run that reloads each test without restart.",
type=int)
mode_group.add_argument("--verify-repeat-restart", action="store",
default=5,
help="Number of iterations, for a run that restarts the runner between each iteration",
type=int)
chaos_mode_group = mode_group.add_mutually_exclusive_group()
chaos_mode_group.add_argument("--verify-no-chaos-mode", action="store_false",
default=True,
dest="verify_chaos_mode",
help="Disable chaos mode when running on Firefox")
chaos_mode_group.add_argument("--verify-chaos-mode", action="store_true",
default=True,
dest="verify_chaos_mode",
help="Enable chaos mode when running on Firefox")
mode_group.add_argument("--verify-max-time", action="store",
default=None,
help="The maximum number of minutes for the job to run",
type=lambda x: timedelta(minutes=float(x)))
output_results_group = mode_group.add_mutually_exclusive_group()
output_results_group.add_argument("--verify-no-output-results", action="store_false",
dest="verify_output_results",
default=True,
help="Prints individuals test results and messages")
output_results_group.add_argument("--verify-output-results", action="store_true",
dest="verify_output_results",
default=True,
help="Disable printing individuals test results and messages")
test_selection_group = parser.add_argument_group("Test Selection")
test_selection_group.add_argument("--test-types", action="store",

View file

@ -288,8 +288,13 @@ def run_tests(config, test_paths, product, **kwargs):
def check_stability(**kwargs):
import stability
return stability.check_stability(logger, **kwargs)
return stability.check_stability(logger,
max_time=kwargs['verify_max_time'],
chaos_mode=kwargs['verify_chaos_mode'],
repeat_loop=kwargs['verify_repeat_loop'],
repeat_restart=kwargs['verify_repeat_restart'],
output_results=kwargs['verify_output_results'],
**kwargs)
def start(**kwargs):
if kwargs["list_test_groups"]:

View file

@ -398,6 +398,8 @@ def template(request, content, escape_type="html"):
value = request.server.config['not_domains']
else:
value = request.server.config['domains']
elif field == "host":
value = request.server.config["browser_host"]
elif field in request.server.config:
value = request.server.config[tokens[0][1]]
elif field == "location":

View file

@ -168,7 +168,8 @@ class WebTestServer(ThreadingMixIn, BaseHTTPServer.HTTPServer):
Server.config = config
else:
self.logger.debug("Using default configuration")
Server.config = {"host": server_address[0],
Server.config = {"browser_host": server_address[0],
"server_host": server_address[0],
"domains": {"": server_address[0]},
"ports": {"http": [self.server_address[1]]}}

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAudio IDL tests</title>
<link rel="help" href="https://webaudio.github.io/web-audio-api/"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
'use strict';
promise_test(async t => {
const [html, dom, mediacapture, webaudio] = await Promise.all([
// Needed for EventTarget, HTMLMediaElement
'/interfaces/html.idl',
// Needed for Event, EventListener
'/interfaces/dom.idl',
// Needed for MediaStream, MediaStreamTrack
'/interfaces/mediacapture-main.idl',
'/interfaces/webaudio.idl'
].map(url => fetch(url).then(response => response.text())));
const idl_array = new IdlArray();
idl_array.add_untested_idls('interface LinkStyle {};'); // Dependency of HTML
idl_array.add_untested_idls(html);
idl_array.add_untested_idls(dom);
idl_array.add_untested_idls(mediacapture);
idl_array.add_untested_idls('interface Worklet {};');
idl_array.add_idls(webaudio);
const sample_rate = 44100;
const context = new AudioContext;
const buffer = new AudioBuffer({length: 1, sampleRate: sample_rate});
await context.audioWorklet.addModule(
'the-audio-api/the-audioworklet-interface/processors/dummy-processor.js');
const worklet_node = new AudioWorkletNode(context, 'dummy');
idl_array.add_objects({
BaseAudioContext: [],
AudioContext: [context],
OfflineAudioContext: [new OfflineAudioContext(1, 1, sample_rate)],
OfflineAudioCompletionEvent: [
new OfflineAudioCompletionEvent('', {renderedBuffer: buffer})],
AudioBuffer: [buffer],
AudioNode: [],
AudioParam: [new AudioBufferSourceNode(context).playbackRate],
AudioScheduledSourceNode: [],
AnalyserNode: [new AnalyserNode(context)],
AudioBufferSourceNode: [new AudioBufferSourceNode(context)],
AudioDestinationNode: [context.destination],
AudioListener: [context.listener],
AudioProcessingEvent: [new AudioProcessingEvent('', {
playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer
})],
BiquadFilterNode: [new BiquadFilterNode(context)],
ChannelMergerNode: [new ChannelMergerNode(context)],
ChannelSplitterNode: [new ChannelSplitterNode(context)],
ConstantSourceNode: [new ConstantSourceNode(context)],
ConvolverNode: [new ConvolverNode(context)],
DelayNode: [new DelayNode(context)],
DynamicsCompressorNode: [new DynamicsCompressorNode(context)],
GainNode: [new GainNode(context)],
IIRFilterNode: [
new IIRFilterNode(context, {feedforward: [1], feedback: [1]})],
MediaElementAudioSourceNode: [
new MediaElementAudioSourceNode(context, {mediaElement: new Audio})],
MediaStreamAudioDestinationNode: [
new MediaStreamAudioDestinationNode(context)],
MediaStreamAudioSourceNode: [],
MediaStreamTrackAudioSourceNode: [],
OscillatorNode: [new OscillatorNode(context)],
PannerNode: [new PannerNode(context)],
PeriodicWave: [new PeriodicWave(context)],
ScriptProcessorNode: [context.createScriptProcessor()],
StereoPannerNode: [new StereoPannerNode(context)],
WaveShaperNode: [new WaveShaperNode(context)],
AudioWorklet: [context.audioWorklet],
AudioWorkletGlobalScope: [],
AudioParamMap: [worklet_node.parameters],
AudioWorkletNode: [worklet_node],
AudioWorkletProcessor: [],
});
idl_array.test();
}, 'Test driver');
</script>

View file

@ -112,7 +112,7 @@ async_test(t => {
postMessage(true);
}
var workerBlob = new Blob([workerCode.toSource() + ";workerCode();"], {type:"application/javascript"});
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
var w = new Worker(URL.createObjectURL(workerBlob));
w.onmessage = function(e) {

View file

@ -14,7 +14,7 @@ async_test(t => {
postMessage(true);
}
var workerBlob = new Blob([workerCode.toSource() + ";workerCode();"], {type:"application/javascript"});
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
var w = new Worker(URL.createObjectURL(workerBlob));
w.onmessage = function(e) {

View file

@ -13,11 +13,11 @@
async_test(t => {
function workerCode() {
close();
var ws = new WebSocket(self.location)
var ws = new WebSocket(self.location.origin.replace('http', 'ws'));
postMessage(ws.readyState == WebSocket.CONNECTING);
}
var workerBlob = new Blob([workerCode.toSource() + ";workerCode();"], {type:"application/javascript"});
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
var w = new Worker(URL.createObjectURL(workerBlob));
w.onmessage = function(e) {