From ed38a584a40ce1d556435de8b9f6a52411118b84 Mon Sep 17 00:00:00 2001 From: Dale Date: Thu, 14 Dec 2017 00:43:20 -0800 Subject: [PATCH 001/235] Add tests for time-origin. Closes https://github.com/w3c/hr-time/issues/32. --- hr-time/resources/unload-a.html | 13 ++++++ hr-time/resources/unload-b.html | 13 ++++++ hr-time/resources/unload-c.html | 13 ++++++ hr-time/resources/unload.js | 51 +++++++++++++++++++++++ hr-time/unload-manual.html | 73 +++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 hr-time/resources/unload-a.html create mode 100644 hr-time/resources/unload-b.html create mode 100644 hr-time/resources/unload-c.html create mode 100644 hr-time/resources/unload.js create mode 100644 hr-time/unload-manual.html diff --git a/hr-time/resources/unload-a.html b/hr-time/resources/unload-a.html new file mode 100644 index 00000000000000..40c1d061830e6f --- /dev/null +++ b/hr-time/resources/unload-a.html @@ -0,0 +1,13 @@ + + + + Helper page for ../unload-manual.html + + + + + + + diff --git a/hr-time/resources/unload-b.html b/hr-time/resources/unload-b.html new file mode 100644 index 00000000000000..7c2d90df275fbc --- /dev/null +++ b/hr-time/resources/unload-b.html @@ -0,0 +1,13 @@ + + + + Helper page for ../unload-manual.html + + + + + + + diff --git a/hr-time/resources/unload-c.html b/hr-time/resources/unload-c.html new file mode 100644 index 00000000000000..731da9db758ba5 --- /dev/null +++ b/hr-time/resources/unload-c.html @@ -0,0 +1,13 @@ + + + + Helper page for ../unload-manual.html + + + + + + + diff --git a/hr-time/resources/unload.js b/hr-time/resources/unload.js new file mode 100644 index 00000000000000..ab6b121c2b5ced --- /dev/null +++ b/hr-time/resources/unload.js @@ -0,0 +1,51 @@ +const syncDelay = ms => { + const start = performance.now(); + let elapsedTime; + do { + elapsedTime = performance.now() - start; + } while (elapsedTime < ms); +}; + +const markTime = (docName, lifecycleEventName) => { + // Calculating these values before the below `mark` invocation ensures that delays in + // reaching across to the other window object doesn't interfere with the correctness + // of the test. + const dateNow = Date.now(); + const performanceNow = performance.now(); + + window.opener.mark({ + docName, + lifecycleEventName, + performanceNow: performanceNow, + dateNow: dateNow + }); +}; + +const setupUnloadPrompt = (docName, msg) => { + window.addEventListener("beforeunload", ev => { + markTime(docName, "beforeunload"); + return ev.returnValue = msg || "Click OK to continue test." + }); +}; + +const setupListeners = (docName, nextDocument) => { + window.addEventListener("load", () => { + markTime(docName, "load"); + document.getElementById("proceed").addEventListener("click", ev => { + ev.preventDefault(); + if (nextDocument) { + document.location = nextDocument; + } else { + window.close(); + } + }) + }); + + setupUnloadPrompt(docName); + + window.addEventListener("unload", () => { + markTime(docName, "unload"); + if (docName !== "c") { syncDelay(1000); } + }); +}; + diff --git a/hr-time/unload-manual.html b/hr-time/unload-manual.html new file mode 100644 index 00000000000000..18c4e0dc327919 --- /dev/null +++ b/hr-time/unload-manual.html @@ -0,0 +1,73 @@ + + + + time origin value manual test + + + + + + + + + + +

Description

+

This test validates the behavior of performance.now() with respect to its time origin.

+
+

Manual Test Steps

+
    +
  1. Click here +
+
+ + From e98afd37282a2ba81726c5e17c02e9c23730b5dc Mon Sep 17 00:00:00 2001 From: Florian Rivoal Date: Thu, 12 Oct 2017 12:16:00 +0900 Subject: [PATCH 002/235] [css-break-3] Basic widows and orphans test To go with https://github.com/w3c/csswg-drafts/pull/1864 --- css/css-break-3/orphans-001.html | 31 +++++++++++++++++ css/css-break-3/orphans-002.html | 34 +++++++++++++++++++ css/css-break-3/reference/widows-001-ref.html | 11 ++++++ css/css-break-3/widows-001.html | 31 +++++++++++++++++ css/css-break-3/widows-002.html | 34 +++++++++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 css/css-break-3/orphans-001.html create mode 100644 css/css-break-3/orphans-002.html create mode 100644 css/css-break-3/reference/widows-001-ref.html create mode 100644 css/css-break-3/widows-001.html create mode 100644 css/css-break-3/widows-002.html diff --git a/css/css-break-3/orphans-001.html b/css/css-break-3/orphans-001.html new file mode 100644 index 00000000000000..e27631ea4c1066 --- /dev/null +++ b/css/css-break-3/orphans-001.html @@ -0,0 +1,31 @@ + + +CSS Fragmentation level 3 Test: orphans and block level boxes + + + + + + + +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. + +

+

X
X +

X
X +

+ diff --git a/css/css-break-3/orphans-002.html b/css/css-break-3/orphans-002.html new file mode 100644 index 00000000000000..4695bd7c45fd33 --- /dev/null +++ b/css/css-break-3/orphans-002.html @@ -0,0 +1,34 @@ + + +CSS Fragmentation level 3 Test: orphans and line boxes + + + + + + + +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. + +

+

X
X +

X
X +

+ diff --git a/css/css-break-3/reference/widows-001-ref.html b/css/css-break-3/reference/widows-001-ref.html new file mode 100644 index 00000000000000..8f4de7900fc92d --- /dev/null +++ b/css/css-break-3/reference/widows-001-ref.html @@ -0,0 +1,11 @@ + + +CSS Fragmentation level 3 Test Reference File + + + +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. + +

XX
XX
+ diff --git a/css/css-break-3/widows-001.html b/css/css-break-3/widows-001.html new file mode 100644 index 00000000000000..b1cce859b03af5 --- /dev/null +++ b/css/css-break-3/widows-001.html @@ -0,0 +1,31 @@ + + +CSS Fragmentation level 3 Test: widows and block level boxes + + + + + + + +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. + +

+

X
X +

X
X +

+ diff --git a/css/css-break-3/widows-002.html b/css/css-break-3/widows-002.html new file mode 100644 index 00000000000000..6b2e22e7e0d203 --- /dev/null +++ b/css/css-break-3/widows-002.html @@ -0,0 +1,34 @@ + + +CSS Fragmentation level 3 Test: widows and line boxes + + + + + + + +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. + +

+

X
X +

X
X +

+ From cff7f39aa508142ec9395d3076aaa9ea25a05a72 Mon Sep 17 00:00:00 2001 From: Florian Rivoal Date: Thu, 8 Feb 2018 10:17:39 +0900 Subject: [PATCH 003/235] [css-break] rename to avoid conflicts --- .../{widows-001-ref.html => widows-orphans-001-ref.html} | 0 css/css-break-3/{widows-001.html => widows-orphans-001.html} | 2 +- css/css-break-3/{widows-002.html => widows-orphans-002.html} | 2 +- css/css-break-3/{orphans-001.html => widows-orphans-003.html} | 2 +- css/css-break-3/{orphans-002.html => widows-orphans-004.html} | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename css/css-break-3/reference/{widows-001-ref.html => widows-orphans-001-ref.html} (100%) rename css/css-break-3/{widows-001.html => widows-orphans-001.html} (93%) rename css/css-break-3/{widows-002.html => widows-orphans-002.html} (94%) rename css/css-break-3/{orphans-001.html => widows-orphans-003.html} (93%) rename css/css-break-3/{orphans-002.html => widows-orphans-004.html} (94%) diff --git a/css/css-break-3/reference/widows-001-ref.html b/css/css-break-3/reference/widows-orphans-001-ref.html similarity index 100% rename from css/css-break-3/reference/widows-001-ref.html rename to css/css-break-3/reference/widows-orphans-001-ref.html diff --git a/css/css-break-3/widows-001.html b/css/css-break-3/widows-orphans-001.html similarity index 93% rename from css/css-break-3/widows-001.html rename to css/css-break-3/widows-orphans-001.html index b1cce859b03af5..21f1f9fffe7709 100644 --- a/css/css-break-3/widows-001.html +++ b/css/css-break-3/widows-orphans-001.html @@ -3,7 +3,7 @@ CSS Fragmentation level 3 Test: widows and block level boxes - +

Test passes if there are 4 “X” characters arranged in a 2 by 2 square below. -

XX
XX
+
X
X
X
X
From 8266e228097155310f7604a0f5c7ef5f2e611068 Mon Sep 17 00:00:00 2001 From: Florian Rivoal Date: Thu, 8 Feb 2018 11:24:25 +0900 Subject: [PATCH 005/235] [css-break] make the tests work on paged media as well --- css/css-break-3/widows-orphans-001.html | 1 + css/css-break-3/widows-orphans-002.html | 1 + css/css-break-3/widows-orphans-003.html | 1 + css/css-break-3/widows-orphans-004.html | 1 + 4 files changed, 4 insertions(+) diff --git a/css/css-break-3/widows-orphans-001.html b/css/css-break-3/widows-orphans-001.html index 21f1f9fffe7709..8da27f0b6594fc 100644 --- a/css/css-break-3/widows-orphans-001.html +++ b/css/css-break-3/widows-orphans-001.html @@ -13,6 +13,7 @@ columns: 2; column-gap: 0; position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ widows: 4; } diff --git a/css/css-break-3/widows-orphans-002.html b/css/css-break-3/widows-orphans-002.html index 208b8950942bde..cf9afe7c033438 100644 --- a/css/css-break-3/widows-orphans-002.html +++ b/css/css-break-3/widows-orphans-002.html @@ -13,6 +13,7 @@ columns: 4; column-gap: 0; position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ } div p { orphans: 1; /* to avoid interference */ diff --git a/css/css-break-3/widows-orphans-003.html b/css/css-break-3/widows-orphans-003.html index 19cce4ab7ebca6..311148409267e0 100644 --- a/css/css-break-3/widows-orphans-003.html +++ b/css/css-break-3/widows-orphans-003.html @@ -13,6 +13,7 @@ columns: 2; column-gap: 0; position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ orphans: 4; } diff --git a/css/css-break-3/widows-orphans-004.html b/css/css-break-3/widows-orphans-004.html index 159e0b6bd90daf..3e226d9e41e42f 100644 --- a/css/css-break-3/widows-orphans-004.html +++ b/css/css-break-3/widows-orphans-004.html @@ -13,6 +13,7 @@ columns: 4; column-gap: 0; position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */ + column-fill: balance-all; /* to make sure it balances as well on paged media */ } div p { widows: 1; /* to avoid interference */ From 26ff0c1b02c931c9b784cb9b5629b4bf3e730b08 Mon Sep 17 00:00:00 2001 From: Florian Rivoal Date: Thu, 8 Feb 2018 11:34:16 +0900 Subject: [PATCH 006/235] [css-break] Follow the latest directory naming conventions --- .../reference/widows-orphans-001-ref.html | 0 css/{css-break-3 => css-break}/widows-orphans-001.html | 0 css/{css-break-3 => css-break}/widows-orphans-002.html | 0 css/{css-break-3 => css-break}/widows-orphans-003.html | 0 css/{css-break-3 => css-break}/widows-orphans-004.html | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename css/{css-break-3 => css-break}/reference/widows-orphans-001-ref.html (100%) rename css/{css-break-3 => css-break}/widows-orphans-001.html (100%) rename css/{css-break-3 => css-break}/widows-orphans-002.html (100%) rename css/{css-break-3 => css-break}/widows-orphans-003.html (100%) rename css/{css-break-3 => css-break}/widows-orphans-004.html (100%) diff --git a/css/css-break-3/reference/widows-orphans-001-ref.html b/css/css-break/reference/widows-orphans-001-ref.html similarity index 100% rename from css/css-break-3/reference/widows-orphans-001-ref.html rename to css/css-break/reference/widows-orphans-001-ref.html diff --git a/css/css-break-3/widows-orphans-001.html b/css/css-break/widows-orphans-001.html similarity index 100% rename from css/css-break-3/widows-orphans-001.html rename to css/css-break/widows-orphans-001.html diff --git a/css/css-break-3/widows-orphans-002.html b/css/css-break/widows-orphans-002.html similarity index 100% rename from css/css-break-3/widows-orphans-002.html rename to css/css-break/widows-orphans-002.html diff --git a/css/css-break-3/widows-orphans-003.html b/css/css-break/widows-orphans-003.html similarity index 100% rename from css/css-break-3/widows-orphans-003.html rename to css/css-break/widows-orphans-003.html diff --git a/css/css-break-3/widows-orphans-004.html b/css/css-break/widows-orphans-004.html similarity index 100% rename from css/css-break-3/widows-orphans-004.html rename to css/css-break/widows-orphans-004.html From 84f9b966adc157f19d7d5babca74fdc79fa8502e Mon Sep 17 00:00:00 2001 From: fantasai Date: Wed, 11 Jul 2018 22:50:04 -0700 Subject: [PATCH 007/235] [css-writing-modes][css-values][css-logical-properties] Change primary spec of ch-unit and logical-prop tests to the one primarily defining the feature. --- css/css-writing-modes/ch-units-vrl-001.html | 2 ++ css/css-writing-modes/ch-units-vrl-002.html | 2 ++ css/css-writing-modes/ch-units-vrl-003.html | 2 ++ css/css-writing-modes/ch-units-vrl-004.html | 2 ++ css/css-writing-modes/ch-units-vrl-005.html | 2 ++ css/css-writing-modes/ch-units-vrl-006.html | 2 ++ css/css-writing-modes/ch-units-vrl-007.html | 2 ++ css/css-writing-modes/ch-units-vrl-008.html | 2 ++ css/css-writing-modes/logical-props-001.html | 2 ++ css/css-writing-modes/logical-props-002.html | 2 ++ css/css-writing-modes/logical-props-003.html | 2 ++ css/css-writing-modes/logical-props-004.html | 2 ++ 12 files changed, 24 insertions(+) diff --git a/css/css-writing-modes/ch-units-vrl-001.html b/css/css-writing-modes/ch-units-vrl-001.html index 5591465b0a7951..40c8227cf4e167 100644 --- a/css/css-writing-modes/ch-units-vrl-001.html +++ b/css/css-writing-modes/ch-units-vrl-001.html @@ -2,7 +2,9 @@ upright vertical writing mode and ch unit on table rows + + diff --git a/css/css-writing-modes/ch-units-vrl-002.html b/css/css-writing-modes/ch-units-vrl-002.html index d1ff259c58875e..893913bd6a998f 100644 --- a/css/css-writing-modes/ch-units-vrl-002.html +++ b/css/css-writing-modes/ch-units-vrl-002.html @@ -2,7 +2,9 @@ upright vertical writing mode and ch unit on table row groups + + diff --git a/css/css-writing-modes/ch-units-vrl-003.html b/css/css-writing-modes/ch-units-vrl-003.html index 5f7de3c96de921..804b407b7998c6 100644 --- a/css/css-writing-modes/ch-units-vrl-003.html +++ b/css/css-writing-modes/ch-units-vrl-003.html @@ -2,7 +2,9 @@ upright vertical writing mode and ch unit on table columns + + diff --git a/css/css-writing-modes/ch-units-vrl-004.html b/css/css-writing-modes/ch-units-vrl-004.html index 4264afd718224d..7530711f14c930 100644 --- a/css/css-writing-modes/ch-units-vrl-004.html +++ b/css/css-writing-modes/ch-units-vrl-004.html @@ -2,7 +2,9 @@ upright vertical writing mode and ch unit on table column groups + + diff --git a/css/css-writing-modes/ch-units-vrl-005.html b/css/css-writing-modes/ch-units-vrl-005.html index 6348b0099bec36..fa4e236e871735 100644 --- a/css/css-writing-modes/ch-units-vrl-005.html +++ b/css/css-writing-modes/ch-units-vrl-005.html @@ -2,7 +2,9 @@ sideways vertical writing mode and ch unit on table rows + + diff --git a/css/css-writing-modes/ch-units-vrl-006.html b/css/css-writing-modes/ch-units-vrl-006.html index 1395606be49ead..fa1d8bf1c8308a 100644 --- a/css/css-writing-modes/ch-units-vrl-006.html +++ b/css/css-writing-modes/ch-units-vrl-006.html @@ -2,7 +2,9 @@ sideways vertical writing mode and ch unit on table row groups + + diff --git a/css/css-writing-modes/ch-units-vrl-007.html b/css/css-writing-modes/ch-units-vrl-007.html index 978e5ba3c20af6..ef85fa4ee58e63 100644 --- a/css/css-writing-modes/ch-units-vrl-007.html +++ b/css/css-writing-modes/ch-units-vrl-007.html @@ -2,7 +2,9 @@ sideways vertical writing mode and ch unit on table columns + + diff --git a/css/css-writing-modes/ch-units-vrl-008.html b/css/css-writing-modes/ch-units-vrl-008.html index eece5974bfb60f..e19ce4a921b7c1 100644 --- a/css/css-writing-modes/ch-units-vrl-008.html +++ b/css/css-writing-modes/ch-units-vrl-008.html @@ -2,7 +2,9 @@ sideways vertical writing mode and ch unit on table column groups + + diff --git a/css/css-writing-modes/logical-props-001.html b/css/css-writing-modes/logical-props-001.html index 599c80edc90edb..4ca71c959c68b6 100644 --- a/css/css-writing-modes/logical-props-001.html +++ b/css/css-writing-modes/logical-props-001.html @@ -2,7 +2,9 @@ writing-modes and logical props: tr + + diff --git a/css/css-writing-modes/logical-props-002.html b/css/css-writing-modes/logical-props-002.html index a018e59853d386..c417bf732d7d1d 100644 --- a/css/css-writing-modes/logical-props-002.html +++ b/css/css-writing-modes/logical-props-002.html @@ -2,7 +2,9 @@ writing-modes and logical props: tbody + + diff --git a/css/css-writing-modes/logical-props-003.html b/css/css-writing-modes/logical-props-003.html index 64e272d4514cc5..c0a4b55eacff4d 100644 --- a/css/css-writing-modes/logical-props-003.html +++ b/css/css-writing-modes/logical-props-003.html @@ -2,7 +2,9 @@ writing-modes and logical props: col + + diff --git a/css/css-writing-modes/logical-props-004.html b/css/css-writing-modes/logical-props-004.html index 556794d7fa89f9..a924170ee6c2d4 100644 --- a/css/css-writing-modes/logical-props-004.html +++ b/css/css-writing-modes/logical-props-004.html @@ -2,7 +2,9 @@ writing-modes and logical props: colgroup + + From 5cae125295682bb9e2b6ab20bdfb2e3ab99b9d26 Mon Sep 17 00:00:00 2001 From: fantasai Date: Wed, 11 Jul 2018 22:58:11 -0700 Subject: [PATCH 008/235] [css-writing-modes] Fix syntax errors in ch-units-* and logical-props-* --- css/css-writing-modes/ch-units-vrl-001.html | 2 +- css/css-writing-modes/ch-units-vrl-002.html | 2 +- css/css-writing-modes/ch-units-vrl-003.html | 2 +- css/css-writing-modes/ch-units-vrl-004.html | 2 +- css/css-writing-modes/ch-units-vrl-005.html | 2 +- css/css-writing-modes/ch-units-vrl-006.html | 2 +- css/css-writing-modes/ch-units-vrl-007.html | 2 +- css/css-writing-modes/ch-units-vrl-008.html | 2 +- css/css-writing-modes/logical-props-001.html | 2 +- css/css-writing-modes/logical-props-002.html | 2 +- css/css-writing-modes/logical-props-003.html | 2 +- css/css-writing-modes/logical-props-004.html | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/css/css-writing-modes/ch-units-vrl-001.html b/css/css-writing-modes/ch-units-vrl-001.html index 40c8227cf4e167..7f887e771e83f9 100644 --- a/css/css-writing-modes/ch-units-vrl-001.html +++ b/css/css-writing-modes/ch-units-vrl-001.html @@ -5,7 +5,7 @@ -

It should say PASS below without anything obscuring the text.

From 68fe44c02c597a00973a9465c3bfed67ba4fd260 Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Fri, 24 Aug 2018 04:26:10 +0000 Subject: [PATCH 026/235] Make sure the transitionend event is for width property. There is another transition for height property, it's possible that the received event is for the height property transition. Differential Revision: https://phabricator.services.mozilla.com/D4181 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1438814 gecko-commit: e1127dfee76a03cfb7f674234b08adde0009ecda gecko-integration-branch: mozilla-inbound gecko-reviewers: birtles --- .../support/vh_not_refreshing_on_chrome_iframe.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html b/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html index c58ec57a58f29d..68902e3658d898 100644 --- a/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html +++ b/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html @@ -78,8 +78,10 @@ setTimeout(animate, 20); - addEventListener('transitionend', function() { - parent.postMessage('testBoxWithTransition', '*'); + addEventListener('transitionend', event => { + if (event.propertyName == 'width') { + parent.postMessage('testBoxWithTransition', '*'); + } }, false); var transitionedTestBoxStyle = document.getElementById('testBoxWithTransition').style; transitionedTestBoxStyle.height = "60px"; From 487d6760152760699518e4b6dc68d682ae06994c Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Fri, 24 Aug 2018 04:26:12 +0000 Subject: [PATCH 027/235] Use pre-increment operator for height changes. With post increment operator, the first callback doesn't change height at all. Differential Revision: https://phabricator.services.mozilla.com/D4182 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1438814 gecko-commit: 8cf98bdb463d7953ac604c4788f0788c6d272e45 gecko-integration-branch: mozilla-inbound gecko-reviewers: birtles --- css/css-values/reference/vh_not_refreshing_on_chrome-ref.html | 4 ++-- css/css-values/vh_not_refreshing_on_chrome.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/css/css-values/reference/vh_not_refreshing_on_chrome-ref.html b/css/css-values/reference/vh_not_refreshing_on_chrome-ref.html index 32ce9ada155649..279d1c69b9f7fb 100644 --- a/css/css-values/reference/vh_not_refreshing_on_chrome-ref.html +++ b/css/css-values/reference/vh_not_refreshing_on_chrome-ref.html @@ -36,10 +36,10 @@ var frameTest = document.getElementById('frameTest'); // let's resize the iframe vertically only, showing that the vh sizes is not updated. - if (height <= 300) { + if (height < 300) { //frameTest.style.width = height++ + "px"; - frameTest.style.height = height++ + "px"; + frameTest.style.height = ++height + "px"; setTimeout(resizeReference, 10); diff --git a/css/css-values/vh_not_refreshing_on_chrome.html b/css/css-values/vh_not_refreshing_on_chrome.html index b4e0a413ab975d..52a45a114c85bf 100644 --- a/css/css-values/vh_not_refreshing_on_chrome.html +++ b/css/css-values/vh_not_refreshing_on_chrome.html @@ -39,10 +39,10 @@ var frameTest = document.getElementById('frameTest'); // let's resize the iframe vertically only, showing that the vh sizes is not updated. - if (height <= 300) { + if (height < 300) { //frameTest.style.width = height++ + "px"; - frameTest.style.height = height++ + "px"; + frameTest.style.height = ++height + "px"; setTimeout(resizeReference, 10); From 6c818320b2b647e7f76c9f55bc43b15feeb943da Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Fri, 24 Aug 2018 04:26:12 +0000 Subject: [PATCH 028/235] Stop any further transitions creation once after we got a transitionend for the width transition. The transition property in this test is shorter than the period of chaging parent viewport height so that it's possible that a new transition happens after a transitionend event was dispatched. The new transition will reduce the element width (i.e. it's opposite direction of the first transition), so the transitioned yellow box was smaller than the expected result. Differential Revision: https://phabricator.services.mozilla.com/D4183 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1438814 gecko-commit: f433ed4ff1de863250d6ebf82b5bc5afcea9b6c7 gecko-integration-branch: mozilla-inbound gecko-reviewers: birtles --- css/css-values/support/vh_not_refreshing_on_chrome_iframe.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html b/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html index 68902e3658d898..8d8e9b49d4aa3d 100644 --- a/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html +++ b/css/css-values/support/vh_not_refreshing_on_chrome_iframe.html @@ -80,6 +80,8 @@ addEventListener('transitionend', event => { if (event.propertyName == 'width') { + // Stop any further transitons. + testBoxWithTransition.style.transitionProperty = 'none'; parent.postMessage('testBoxWithTransition', '*'); } }, false); From 267a39b7d4dd76e83131405ab6854bd14e65a27c Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 24 Aug 2018 11:44:30 +0100 Subject: [PATCH 029/235] Fixup import of WebDriver helper functions --- webdriver/tests/support/inline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webdriver/tests/support/inline.py b/webdriver/tests/support/inline.py index 2f8fe9b79e3bac..1ef379093cbc65 100644 --- a/webdriver/tests/support/inline.py +++ b/webdriver/tests/support/inline.py @@ -2,7 +2,7 @@ def inline(doc, doctype="html", mime="text/html;charset=utf-8", protocol="http"): - from .fixtures import server_config, url + from ..conftest import server_config, url build_url = url(server_config()) if doctype == "html": From 1d7a97518ff59e331f7871b11c2ecbba725e8445 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 24 Aug 2018 13:33:10 +0200 Subject: [PATCH 030/235] Revert "Merge pull request #10344 from nox/var-gt-const" This reverts commit b80da5dcd487fa46b68eb2ae2e3fcaac32c53427, reversing changes made to 603e2776a1663e0790db8887204d22547ddc90de. --- resources/idlharness.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/idlharness.js b/resources/idlharness.js index 368c96d70cff25..a088bc4c2a7800 100644 --- a/resources/idlharness.js +++ b/resources/idlharness.js @@ -826,7 +826,7 @@ IdlArray.prototype.test = function() this["includes"] = {}; // Assert B defined for A : B - for (var member of Object.values(this.members).filter(m => m.base)) { + for (const member of Object.values(this.members).filter(m => m.base)) { const lhs = member.name; const rhs = member.base; if (!(rhs in this.members)) throw new IdlHarnessError(`${lhs} inherits ${rhs}, but ${rhs} is undefined.`); From d0960dcdfc8e25c3bdbd487787ec61858e0e1937 Mon Sep 17 00:00:00 2001 From: Simon Pieters Date: Fri, 24 Aug 2018 10:24:26 +0200 Subject: [PATCH 031/235] HTML: fix a bug in img environment changes test Fixes #12656. --- .../the-img-element/environment-changes/viewport-change.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html b/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html index 21624712cf919d..f6ae65708c661c 100644 --- a/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html +++ b/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html @@ -39,7 +39,7 @@ var expected = {wide:resolve(img.dataset.wide), narrow:resolve(img.dataset.narrow)}; var current = iframe.className; var next = current === 'wide' ? 'narrow' : 'wide'; - var expect_change = expected[next].indexOf('broken.png') !== 0 && !('noChange' in img.dataset); + var expect_change = expected[next].indexOf('broken.png') === -1 && !('noChange' in img.dataset); test(function() { assert_equals(img.currentSrc, expected[current]); From 3588ed998f005477df1060cdee0560b9e47c8509 Mon Sep 17 00:00:00 2001 From: Dave Tapuska Date: Fri, 24 Aug 2018 07:17:58 -0700 Subject: [PATCH 032/235] Fullscreen elements that were root level elements weren't sized properly. Avoid setting position absolute on top layer elements that are the documentElement. This matches what Firefox does. The root element is special when it is in fullscreen mode because it does not get the style applied that forces its dimensions and position to be fixed. BUG=876339 Change-Id: I42b18047dc9648585bc279510d66decd6d6a4516 Reviewed-on: https://chromium-review.googlesource.com/1186961 Commit-Queue: Dave Tapuska Reviewed-by: Rune Lillesveen Cr-Commit-Position: refs/heads/master@{#585830} --- .../fullscreen-root-block-size-manual.html | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 fullscreen/rendering/fullscreen-root-block-size-manual.html diff --git a/fullscreen/rendering/fullscreen-root-block-size-manual.html b/fullscreen/rendering/fullscreen-root-block-size-manual.html new file mode 100644 index 00000000000000..989a85d91c4e17 --- /dev/null +++ b/fullscreen/rendering/fullscreen-root-block-size-manual.html @@ -0,0 +1,28 @@ + + +fullscreen root block sizing + + + + + + From a63935ce4574b32d850cf0063f6ea508ad517986 Mon Sep 17 00:00:00 2001 From: Timothy Gu Date: Fri, 24 Aug 2018 10:27:31 -0400 Subject: [PATCH 033/235] HTML: review followup (#12662) Follow up to review comments in https://github.com/web-platform-tests/wpt/pull/12636. --- .../opening-the-input-stream/url.window.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js index 282e58e9c380fc..4e7c649f453395 100644 --- a/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js +++ b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js @@ -3,7 +3,7 @@ test(t => { t.add_cleanup(() => frame.remove()); assert_equals(frame.contentDocument.URL, "about:blank"); assert_equals(frame.contentWindow.location.href, "about:blank"); - frame.contentDocument.open(); + assert_equals(frame.contentDocument.open(), frame.contentDocument); assert_equals(frame.contentDocument.URL, document.URL); assert_equals(frame.contentWindow.location.href, document.URL); }, "document.open() changes document's URL (fully active document)"); @@ -26,7 +26,7 @@ async_test(t => { frame.onload = t.step_func_done(() => { // Now childDoc is still active but no longer fully active. - childDoc.open(); + assert_equals(childDoc.open(), childDoc); assert_equals(childDoc.URL, blankURL); assert_equals(childWin.location.href, blankURL); }); @@ -40,6 +40,9 @@ test(t => { t.add_cleanup(() => frame.remove()); const doc = frame.contentDocument; + // We do not test for win.location.href in this test due to + // https://github.com/whatwg/html/issues/3959. + // Right now the frame is connected and it has an active document. assert_equals(doc.URL, "about:blank"); @@ -55,6 +58,9 @@ async_test(t => { const frame = document.createElement("iframe"); t.add_cleanup(() => frame.remove()); + // We do not test for win.location.href in this test due to + // https://github.com/whatwg/html/issues/3959. + frame.onload = t.step_func(() => { const doc = frame.contentDocument; // Right now the frame is connected and it has an active document. From 0976ae3d6e1ad9000ee2d3724a3b03dd2d3e7d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Sat, 25 Aug 2018 00:46:47 +1000 Subject: [PATCH 034/235] add romandev (#12582) --- payment-request/META.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/payment-request/META.yml b/payment-request/META.yml index 74a165b1392d25..f8460d403ffa42 100644 --- a/payment-request/META.yml +++ b/payment-request/META.yml @@ -5,3 +5,4 @@ suggested_reviewers: - domenic - MSFTkihans - mnoorenberghe + - romandev From 96508b50374beb53d52373b5f585c05a246cf745 Mon Sep 17 00:00:00 2001 From: David H Date: Fri, 24 Aug 2018 15:48:50 +0100 Subject: [PATCH 035/235] [HTTP/2.0][WIP] H2 server documentation (#12655) Added documentation for H2ResponseWriter API as well as a more general Handler explanation and how to use new functionality --- docs/_writing-tests/h2tests.md | 155 +++++++++++++++++++++++++ docs/_writing-tests/server-features.md | 13 +++ 2 files changed, 168 insertions(+) create mode 100644 docs/_writing-tests/h2tests.md diff --git a/docs/_writing-tests/h2tests.md b/docs/_writing-tests/h2tests.md new file mode 100644 index 00000000000000..0d19f7de19ca32 --- /dev/null +++ b/docs/_writing-tests/h2tests.md @@ -0,0 +1,155 @@ +# Writing H2 Tests +> Important: The HTTP/2.0 server requires you to have Python 2.7.10+ +and OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the +[TLS ALPN](https://tools.ietf.org/html/rfc7301) extension, which is only supported in [OpenSSL 1.0.2](https://www.openssl.org/news/openssl-1.0.2-notes.html) and up. + +These instructions assume you are already familiar with the testing +infrastructure and know how to write a standard HTTP/1.1 test. + +On top of the standard `main` handler that the H1 server offers, the +H2 server also offers support for specific frame handlers in the Python +scripts. Currently there is support for for `handle_headers` and `handle_data`. +Unlike the `main` handler, these are run whenever the server receives a +HEADERS frame (RequestReceived event) or a DATA frame (DataReceived event). +`main` can still be used, but it will be run after the server has received +the request in its entirety. + +Here is what a Python script for a test might look like: +```python +def handle_headers(frame, request, response): + if request.headers["test"] == "pass": + response.status = 200 + response.headers.update([('test', 'passed')]) + response.write_status_headers() + else: + response.status = 403 + response.headers.update([('test', 'failed')]) + response.write_status_headers() + response.writer.end_stream() + +def handle_data(frame, request, response): + response.writer.write_data(frame.data[::-1]) + +def main(request, response): + response.writer.write_data('\nEnd of File', last=True) +``` + +The above script is fairly simple: +1. Upon receiving the HEADERS frame, `handle_headers` is run. + - This checks for a header called 'test' and checks if it is set to 'pass'. + If true, it will immediately send a response header, otherwise it responds + with a 403 and ends the stream. +2. Any DATA frames received will then be handled by `handle_data`. This will +simply reverse the data and send it back. +3. Once the request has been fully received, `main` is run which will send +one last DATA frame and signal its the end of the stream. + +## Response Writer API ## + +The H2Response API is pretty much the same as the H1 variant, the main API +difference lies in the H2ResponseWriter which is accessed through `response.writer` + +--- + +#### `write_headers(self, headers, status_code, status_message=None, stream_id=None, last=False):` +Write a HEADER frame using the H2 Connection object, will only work if the +stream is in a state to send HEADER frames. This will automatically format +the headers so that pseudo headers are at the start of the list and correctly +prefixed with ':'. Since this using the H2 Connection object, it requires that +the stream is in the correct state to be sending this frame. + +> Note: Will raise ProtocolErrors if pseudo headers are missing. + +- Parameters + + - headers: List of (header, value) tuples + - status_code: The HTTP status code of the response + - stream_id: Id of stream to send frame on. Will use the request stream ID if None + - last: Flag to signal if this is the last frame in stream. + +--- + +#### `write_data(self, item, last=False, stream_id=None):` +Write a DATA frame using the H2 Connection object, will only work if the +stream is in a state to send DATA frames. Uses flow control to split data +into multiple data frames if it exceeds the size that can be in a single frame. +Since this using the H2 Connection object, it requires that the stream is in +the correct state to be sending this frame. + +- Parameters + + - item: The content of the DATA frame + - last: Flag to signal if this is the last frame in stream. + - stream_id: Id of stream to send frame on. Will use the request stream ID if None + +--- + +#### `write_push(self, promise_headers, push_stream_id=None, status=None, response_headers=None, response_data=None):` +This will write a push promise to the request stream. If you do not provide +headers and data for the response, then no response will be pushed, and you +should send them yourself using the ID returned from this function. + +- Parameters + - promise_headers: A list of header tuples that matches what the client would use to + request the pushed response + - push_stream_id: The ID of the stream the response should be pushed to. If none given, will + use the next available id. + - status: The status code of the response, REQUIRED if response_headers given + - response_headers: The headers of the response + - response_data: The response data. + +- Returns: The ID of the push stream + +--- + +#### `write_raw_header_frame(self, headers, stream_id=None, end_stream=False, end_headers=False, frame_cls=HeadersFrame):` +Unlike `write_headers`, this does not check to see if a stream is in the +correct state to have HEADER frames sent through to it. It also won't force +the order of the headers or make sure pseudo headers are prefixed with ':'. +It will build a HEADER frame and send it without using the H2 Connection +object other than to HPACK encode the headers. + +> Note: The `frame_cls` parameter is so that this class can be reused +by `write_raw_continuation_frame`, as their construction is identical. + +- Parameters + - headers: List of (header, value) tuples + - stream_id: Id of stream to send frame on. Will use the request stream ID if None + - end_stream: Set to `True` to add END_STREAM flag to frame + - end_headers: Set to `True` to add END_HEADERS flag to frame + +--- + +#### `write_raw_data_frame(self, data, stream_id=None, end_stream=False):` +Unlike `write_data`, this does not check to see if a stream is in the correct +state to have DATA frames sent through to it. It will build a DATA frame and +send it without using the H2 Connection object. It will not perform any flow control checks. + +- Parameters + - data: The data to be sent in the frame + - stream_id: Id of stream to send frame on. Will use the request stream ID if None + - end_stream: Set to True to add END_STREAM flag to frame + +--- + +#### `write_raw_continuation_frame(self, headers, stream_id=None, end_headers=False):` +This provides the ability to create and write a CONTINUATION frame to the +stream, which is not exposed by `write_headers` as the h2 library handles +the split between HEADER and CONTINUATION internally. Will perform HPACK +encoding on the headers. It also ignores the state of the stream. + +This calls `write_raw_data_frame` with `frame_cls=ContinuationFrame` since +the HEADER and CONTINUATION frames are constructed in the same way. + +- Parameters: + - headers: List of (header, value) tuples + - stream_id: Id of stream to send frame on. Will use the request stream ID if None + - end_headers: Set to True to add END_HEADERS flag to frame + +--- + +#### `end_stream(self, stream_id=None):` +Ends the stream with the given ID, or the one that request was made on if no ID given. + +- Parameters + - stream_id: Id of stream to send frame on. Will use the request stream ID if None \ No newline at end of file diff --git a/docs/_writing-tests/server-features.md b/docs/_writing-tests/server-features.md index a3cd4174d2719f..8798c2e6bdd5d9 100644 --- a/docs/_writing-tests/server-features.md +++ b/docs/_writing-tests/server-features.md @@ -94,4 +94,17 @@ of the response. For details see the [wptserve documentation](https://wptserve.readthedocs.org). +### Writing tests for HTTP/2.0 + +The server now has a prototype HTTP/2.0 server which gives you access to +some of the HTTP/2.0 specific functionality. Currently, the server is off +by default and needs to be run using `./wpt serve --h2` in order to enable it. +The HTTP/2.0 server supports handlers that work per-frame; these, along with the +API are documented in [Writing H2 Tests][h2tests] + +> Important: The HTTP/2.0 server requires you to have Python 2.7.10+ +and OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the +[TLS ALPN](https://tools.ietf.org/html/rfc7301) extension, which is only supported in [OpenSSL 1.0.2](https://www.openssl.org/news/openssl-1.0.2-notes.html) and up. + [file names]: {{ site.baseurl }}{% link _writing-tests/file-names.md %} +[h2tests]: {{ site.baseurl }}{% link _writing-tests/h2tests.md %} From c32b960dfc4de300a842b312d49be07fc502743f Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Fri, 31 Mar 2017 16:38:44 +0200 Subject: [PATCH 036/235] Move all the unbuilt selectors tests into a subdirectory so they can build --- css/selectors/{ => built-tests}/CHANGES | 0 css/selectors/{ => built-tests}/Makefile | 0 css/selectors/{ => built-tests}/README | 0 css/selectors/{ => built-tests}/TODO | 0 css/selectors/{ => built-tests}/css3-modsel-1.xml | 0 css/selectors/{ => built-tests}/css3-modsel-10.xml | 0 css/selectors/{ => built-tests}/css3-modsel-100.xml | 0 css/selectors/{ => built-tests}/css3-modsel-100b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-101.xml | 0 css/selectors/{ => built-tests}/css3-modsel-101b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-102.xml | 0 css/selectors/{ => built-tests}/css3-modsel-102b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-103.xml | 0 css/selectors/{ => built-tests}/css3-modsel-103b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-104.xml | 0 css/selectors/{ => built-tests}/css3-modsel-104b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-105.xml | 0 css/selectors/{ => built-tests}/css3-modsel-105b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-106.xml | 0 css/selectors/{ => built-tests}/css3-modsel-106b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-107.xml | 0 css/selectors/{ => built-tests}/css3-modsel-107b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-108.xml | 0 css/selectors/{ => built-tests}/css3-modsel-108b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-109.xml | 0 css/selectors/{ => built-tests}/css3-modsel-109b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-11.xml | 0 css/selectors/{ => built-tests}/css3-modsel-110.xml | 0 css/selectors/{ => built-tests}/css3-modsel-110b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-111.xml | 0 css/selectors/{ => built-tests}/css3-modsel-111b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-112.xml | 0 css/selectors/{ => built-tests}/css3-modsel-112b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-113.xml | 0 css/selectors/{ => built-tests}/css3-modsel-113b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-114.xml | 0 css/selectors/{ => built-tests}/css3-modsel-114b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-115.xml | 0 css/selectors/{ => built-tests}/css3-modsel-115b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-116.xml | 0 css/selectors/{ => built-tests}/css3-modsel-116b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-117.xml | 0 css/selectors/{ => built-tests}/css3-modsel-117b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-118.xml | 0 css/selectors/{ => built-tests}/css3-modsel-119.xml | 0 css/selectors/{ => built-tests}/css3-modsel-12.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-120.xml | 0 css/selectors/{ => built-tests}/css3-modsel-121.xml | 0 css/selectors/{ => built-tests}/css3-modsel-122.xml | 0 css/selectors/{ => built-tests}/css3-modsel-123.xml | 0 css/selectors/{ => built-tests}/css3-modsel-123b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-124.xml | 0 css/selectors/{ => built-tests}/css3-modsel-124b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-125.xml | 0 css/selectors/{ => built-tests}/css3-modsel-125b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-126.xml | 0 css/selectors/{ => built-tests}/css3-modsel-126b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-127.xml | 0 css/selectors/{ => built-tests}/css3-modsel-127b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-128.xml | 0 css/selectors/{ => built-tests}/css3-modsel-128b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-129.xml | 0 css/selectors/{ => built-tests}/css3-modsel-129b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-13.xml | 0 css/selectors/{ => built-tests}/css3-modsel-130.xml | 0 css/selectors/{ => built-tests}/css3-modsel-130b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-131.xml | 0 css/selectors/{ => built-tests}/css3-modsel-131b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-132.xml | 0 css/selectors/{ => built-tests}/css3-modsel-132b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-133.xml | 0 css/selectors/{ => built-tests}/css3-modsel-133b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-134.xml | 0 css/selectors/{ => built-tests}/css3-modsel-134b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-135.xml | 0 css/selectors/{ => built-tests}/css3-modsel-135b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-136.xml | 0 css/selectors/{ => built-tests}/css3-modsel-136b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-137.xml | 0 css/selectors/{ => built-tests}/css3-modsel-137b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-138.xml | 0 css/selectors/{ => built-tests}/css3-modsel-138b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-139.xml | 0 css/selectors/{ => built-tests}/css3-modsel-139b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-14.xml | 0 css/selectors/{ => built-tests}/css3-modsel-140.xml | 0 css/selectors/{ => built-tests}/css3-modsel-140b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-141.xml | 0 css/selectors/{ => built-tests}/css3-modsel-141b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-142.xml | 0 css/selectors/{ => built-tests}/css3-modsel-142b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-143.xml | 0 css/selectors/{ => built-tests}/css3-modsel-143b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-144.xml | 0 css/selectors/{ => built-tests}/css3-modsel-145a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-145b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-146a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-146b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-147a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-147b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-148.xml | 0 css/selectors/{ => built-tests}/css3-modsel-149.xml | 0 css/selectors/{ => built-tests}/css3-modsel-149b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-14b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-14c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-14d.xml | 0 css/selectors/{ => built-tests}/css3-modsel-14e.xml | 0 css/selectors/{ => built-tests}/css3-modsel-15.xml | 0 css/selectors/{ => built-tests}/css3-modsel-150.xml | 0 css/selectors/{ => built-tests}/css3-modsel-151.xml | 0 css/selectors/{ => built-tests}/css3-modsel-152.xml | 0 css/selectors/{ => built-tests}/css3-modsel-153.xml | 0 css/selectors/{ => built-tests}/css3-modsel-154.xml | 0 css/selectors/{ => built-tests}/css3-modsel-155.xml | 0 css/selectors/{ => built-tests}/css3-modsel-155a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-155b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-155c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-155d.xml | 0 css/selectors/{ => built-tests}/css3-modsel-156.xml | 0 css/selectors/{ => built-tests}/css3-modsel-156b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-156c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-157.xml | 0 css/selectors/{ => built-tests}/css3-modsel-158.xml | 0 css/selectors/{ => built-tests}/css3-modsel-159.xml | 0 css/selectors/{ => built-tests}/css3-modsel-15b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-15c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-16.xml | 0 css/selectors/{ => built-tests}/css3-modsel-160.xml | 0 css/selectors/{ => built-tests}/css3-modsel-161.xml | 0 css/selectors/{ => built-tests}/css3-modsel-162.xml-removed | 0 .../css3-modsel-163.xml-disabled-contains-removed | 0 css/selectors/{ => built-tests}/css3-modsel-164.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-165.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-166.xml | 0 css/selectors/{ => built-tests}/css3-modsel-166a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-167.xml | 0 css/selectors/{ => built-tests}/css3-modsel-167a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-168.xml | 0 css/selectors/{ => built-tests}/css3-modsel-168a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-169.xml | 0 css/selectors/{ => built-tests}/css3-modsel-169a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-17.xml | 0 css/selectors/{ => built-tests}/css3-modsel-170.xml | 0 css/selectors/{ => built-tests}/css3-modsel-170a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-170b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-170c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-170d.xml | 0 css/selectors/{ => built-tests}/css3-modsel-171.xml | 0 css/selectors/{ => built-tests}/css3-modsel-172a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-172b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-173a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-173b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-174a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-174b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-175a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-175b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-175c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-176.xml | 0 css/selectors/{ => built-tests}/css3-modsel-177a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-177b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-178.xml | 0 css/selectors/{ => built-tests}/css3-modsel-179.xml | 0 css/selectors/{ => built-tests}/css3-modsel-179a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-18.xml | 0 ...modsel-180.xml-disabled-because-we-want-to-allow-for-expansion | 0 css/selectors/{ => built-tests}/css3-modsel-180a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-181.xml | 0 css/selectors/{ => built-tests}/css3-modsel-182.xml | 0 css/selectors/{ => built-tests}/css3-modsel-183.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184d.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184e.xml | 0 css/selectors/{ => built-tests}/css3-modsel-184f.xml | 0 css/selectors/{ => built-tests}/css3-modsel-18a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-18b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-18c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-19.xml | 0 css/selectors/{ => built-tests}/css3-modsel-19a.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-19b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-2.xml | 0 css/selectors/{ => built-tests}/css3-modsel-20.xml | 0 css/selectors/{ => built-tests}/css3-modsel-21.xml | 0 css/selectors/{ => built-tests}/css3-modsel-21b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-21c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-22.xml | 0 css/selectors/{ => built-tests}/css3-modsel-23.xml | 0 css/selectors/{ => built-tests}/css3-modsel-24.xml | 0 css/selectors/{ => built-tests}/css3-modsel-25.xml | 0 css/selectors/{ => built-tests}/css3-modsel-27.xml | 0 css/selectors/{ => built-tests}/css3-modsel-27a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-27b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-28.xml | 0 css/selectors/{ => built-tests}/css3-modsel-28b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-28c.pl-draft | 0 css/selectors/{ => built-tests}/css3-modsel-29.xml | 0 css/selectors/{ => built-tests}/css3-modsel-29b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-3.xml | 0 css/selectors/{ => built-tests}/css3-modsel-30.xml | 0 css/selectors/{ => built-tests}/css3-modsel-31.xml | 0 css/selectors/{ => built-tests}/css3-modsel-32.xml | 0 css/selectors/{ => built-tests}/css3-modsel-33.xml | 0 css/selectors/{ => built-tests}/css3-modsel-34.xml | 0 css/selectors/{ => built-tests}/css3-modsel-35.xml | 0 css/selectors/{ => built-tests}/css3-modsel-36.xml | 0 css/selectors/{ => built-tests}/css3-modsel-37.xml | 0 css/selectors/{ => built-tests}/css3-modsel-38.xml | 0 css/selectors/{ => built-tests}/css3-modsel-39.xml | 0 css/selectors/{ => built-tests}/css3-modsel-39a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-39b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-39c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-3a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-4.xml | 0 css/selectors/{ => built-tests}/css3-modsel-40.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-41.xml | 0 css/selectors/{ => built-tests}/css3-modsel-41a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-42.xml | 0 css/selectors/{ => built-tests}/css3-modsel-42a.xml | 0 css/selectors/{ => built-tests}/css3-modsel-43.xml | 0 css/selectors/{ => built-tests}/css3-modsel-43b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-44.xml | 0 css/selectors/{ => built-tests}/css3-modsel-44b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-44c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-44d.xml | 0 css/selectors/{ => built-tests}/css3-modsel-45.xml | 0 css/selectors/{ => built-tests}/css3-modsel-45b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-45c.xml | 0 css/selectors/{ => built-tests}/css3-modsel-46.xml | 0 css/selectors/{ => built-tests}/css3-modsel-46b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-47.xml | 0 css/selectors/{ => built-tests}/css3-modsel-48.xml | 0 css/selectors/{ => built-tests}/css3-modsel-49.xml | 0 css/selectors/{ => built-tests}/css3-modsel-5.xml | 0 css/selectors/{ => built-tests}/css3-modsel-50.xml | 0 css/selectors/{ => built-tests}/css3-modsel-51.xml | 0 css/selectors/{ => built-tests}/css3-modsel-52.xml | 0 css/selectors/{ => built-tests}/css3-modsel-53.xml | 0 css/selectors/{ => built-tests}/css3-modsel-54.xml | 0 css/selectors/{ => built-tests}/css3-modsel-55.xml | 0 css/selectors/{ => built-tests}/css3-modsel-56.xml | 0 css/selectors/{ => built-tests}/css3-modsel-57.xml | 0 css/selectors/{ => built-tests}/css3-modsel-57b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-58.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-59.xml | 0 css/selectors/{ => built-tests}/css3-modsel-6.xml | 0 css/selectors/{ => built-tests}/css3-modsel-60.xml | 0 css/selectors/{ => built-tests}/css3-modsel-61.xml | 0 css/selectors/{ => built-tests}/css3-modsel-62.xml | 0 css/selectors/{ => built-tests}/css3-modsel-63.xml | 0 css/selectors/{ => built-tests}/css3-modsel-64.xml | 0 css/selectors/{ => built-tests}/css3-modsel-65.xml | 0 css/selectors/{ => built-tests}/css3-modsel-66.xml | 0 css/selectors/{ => built-tests}/css3-modsel-66b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-67.xml | 0 css/selectors/{ => built-tests}/css3-modsel-68.xml | 0 css/selectors/{ => built-tests}/css3-modsel-69.xml | 0 css/selectors/{ => built-tests}/css3-modsel-7.xml | 0 css/selectors/{ => built-tests}/css3-modsel-70.xml | 0 css/selectors/{ => built-tests}/css3-modsel-72.xml | 0 css/selectors/{ => built-tests}/css3-modsel-72b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-73.xml | 0 css/selectors/{ => built-tests}/css3-modsel-73b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-74.xml | 0 css/selectors/{ => built-tests}/css3-modsel-74b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-75.xml | 0 css/selectors/{ => built-tests}/css3-modsel-75b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-76.xml | 0 css/selectors/{ => built-tests}/css3-modsel-76b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-77.xml | 0 css/selectors/{ => built-tests}/css3-modsel-77b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-78.xml | 0 css/selectors/{ => built-tests}/css3-modsel-78b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-79.xml | 0 css/selectors/{ => built-tests}/css3-modsel-7b.xml | 0 ...-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system | 0 ...-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system | 0 css/selectors/{ => built-tests}/css3-modsel-8.xml | 0 css/selectors/{ => built-tests}/css3-modsel-80.xml | 0 css/selectors/{ => built-tests}/css3-modsel-81.xml | 0 css/selectors/{ => built-tests}/css3-modsel-81b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-82.xml | 0 css/selectors/{ => built-tests}/css3-modsel-82b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-83.xml | 0 .../css3-modsel-84.xml-disabled-contains-removed | 0 .../css3-modsel-84b.xml-disabled-contains-removed | 0 .../css3-modsel-85.xml-disabled-contains-removed | 0 css/selectors/{ => built-tests}/css3-modsel-86.xml | 0 css/selectors/{ => built-tests}/css3-modsel-87.xml | 0 css/selectors/{ => built-tests}/css3-modsel-87b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-88.xml | 0 css/selectors/{ => built-tests}/css3-modsel-88b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-89.xml | 0 css/selectors/{ => built-tests}/css3-modsel-9.xml | 0 css/selectors/{ => built-tests}/css3-modsel-90.xml | 0 css/selectors/{ => built-tests}/css3-modsel-90b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-91.xml | 0 css/selectors/{ => built-tests}/css3-modsel-92.xml | 0 css/selectors/{ => built-tests}/css3-modsel-93.xml | 0 css/selectors/{ => built-tests}/css3-modsel-94.xml | 0 css/selectors/{ => built-tests}/css3-modsel-94b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-95.xml | 0 css/selectors/{ => built-tests}/css3-modsel-96.xml | 0 css/selectors/{ => built-tests}/css3-modsel-96b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-97.xml | 0 css/selectors/{ => built-tests}/css3-modsel-97b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-98.xml | 0 css/selectors/{ => built-tests}/css3-modsel-98b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-99.xml | 0 css/selectors/{ => built-tests}/css3-modsel-99b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d1.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d1b.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d2.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d3.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d4.xml | 0 css/selectors/{ => built-tests}/css3-modsel-d5.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-d5a.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-d5b.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-d5c.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-d5d.xml-removed | 0 css/selectors/{ => built-tests}/css3-modsel-d5e.xml-removed | 0 css/selectors/{ => built-tests}/generate.pl | 0 css/selectors/{ => built-tests}/htaccess | 0 css/selectors/{ => built-tests}/html-full.css | 0 css/selectors/{ => built-tests}/html-shell.css | 0 css/selectors/{ => built-tests}/tng.css | 0 css/selectors/{ => built-tests}/utils/generators.pm | 0 css/selectors/{ => built-tests}/utils/helpers.pm | 0 css/selectors/{ => built-tests}/utils/parser.pm | 0 css/selectors/{ => built-tests}/xhtml-full.css | 0 css/selectors/{ => built-tests}/xhtml-shell.css | 0 css/selectors/{ => built-tests}/xml-full.css | 0 css/selectors/{ => built-tests}/xml-shell.css | 0 333 files changed, 0 insertions(+), 0 deletions(-) rename css/selectors/{ => built-tests}/CHANGES (100%) rename css/selectors/{ => built-tests}/Makefile (100%) rename css/selectors/{ => built-tests}/README (100%) rename css/selectors/{ => built-tests}/TODO (100%) rename css/selectors/{ => built-tests}/css3-modsel-1.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-10.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-100.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-100b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-101.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-101b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-102.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-102b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-103.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-103b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-104.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-104b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-105.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-105b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-106.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-106b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-107.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-107b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-108.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-108b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-109.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-109b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-11.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-110.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-110b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-111.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-111b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-112.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-112b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-113.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-113b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-114.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-114b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-115.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-115b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-116.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-116b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-117.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-117b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-118.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-119.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-12.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-120.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-121.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-122.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-123.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-123b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-124.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-124b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-125.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-125b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-126.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-126b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-127.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-127b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-128.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-128b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-129.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-129b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-13.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-130.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-130b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-131.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-131b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-132.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-132b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-133.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-133b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-134.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-134b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-135.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-135b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-136.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-136b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-137.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-137b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-138.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-138b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-139.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-139b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-14.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-140.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-140b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-141.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-141b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-142.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-142b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-143.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-143b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-144.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-145a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-145b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-146a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-146b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-147a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-147b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-148.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-149.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-149b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-14b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-14c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-14d.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-14e.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-15.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-150.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-151.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-152.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-153.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-154.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-155.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-155a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-155b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-155c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-155d.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-156.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-156b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-156c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-157.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-158.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-159.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-15b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-15c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-16.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-160.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-161.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-162.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-163.xml-disabled-contains-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-164.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-165.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-166.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-166a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-167.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-167a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-168.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-168a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-169.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-169a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-17.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-170.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-170a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-170b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-170c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-170d.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-171.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-172a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-172b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-173a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-173b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-174a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-174b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-175a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-175b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-175c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-176.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-177a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-177b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-178.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-179.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-179a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-18.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion (100%) rename css/selectors/{ => built-tests}/css3-modsel-180a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-181.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-182.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-183.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184d.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184e.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-184f.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-18a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-18b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-18c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-19.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-19a.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-19b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-2.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-20.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-21.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-21b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-21c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-22.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-23.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-24.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-25.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-27.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-27a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-27b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-28.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-28b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-28c.pl-draft (100%) rename css/selectors/{ => built-tests}/css3-modsel-29.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-29b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-3.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-30.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-31.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-32.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-33.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-34.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-35.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-36.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-37.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-38.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-39.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-39a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-39b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-39c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-3a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-4.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-40.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-41.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-41a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-42.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-42a.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-43.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-43b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-44.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-44b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-44c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-44d.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-45.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-45b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-45c.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-46.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-46b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-47.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-48.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-49.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-5.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-50.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-51.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-52.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-53.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-54.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-55.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-56.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-57.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-57b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-58.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-59.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-6.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-60.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-61.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-62.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-63.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-64.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-65.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-66.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-66b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-67.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-68.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-69.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-7.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-70.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-72.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-72b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-73.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-73b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-74.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-74b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-75.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-75b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-76.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-76b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-77.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-77b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-78.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-78b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-79.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-7b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system (100%) rename css/selectors/{ => built-tests}/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system (100%) rename css/selectors/{ => built-tests}/css3-modsel-8.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-80.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-81.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-81b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-82.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-82b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-83.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-84.xml-disabled-contains-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-84b.xml-disabled-contains-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-85.xml-disabled-contains-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-86.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-87.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-87b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-88.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-88b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-89.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-9.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-90.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-90b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-91.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-92.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-93.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-94.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-94b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-95.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-96.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-96b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-97.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-97b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-98.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-98b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-99.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-99b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d1.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d1b.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d2.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d3.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d4.xml (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5a.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5b.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5c.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5d.xml-removed (100%) rename css/selectors/{ => built-tests}/css3-modsel-d5e.xml-removed (100%) rename css/selectors/{ => built-tests}/generate.pl (100%) rename css/selectors/{ => built-tests}/htaccess (100%) rename css/selectors/{ => built-tests}/html-full.css (100%) rename css/selectors/{ => built-tests}/html-shell.css (100%) rename css/selectors/{ => built-tests}/tng.css (100%) rename css/selectors/{ => built-tests}/utils/generators.pm (100%) rename css/selectors/{ => built-tests}/utils/helpers.pm (100%) rename css/selectors/{ => built-tests}/utils/parser.pm (100%) rename css/selectors/{ => built-tests}/xhtml-full.css (100%) rename css/selectors/{ => built-tests}/xhtml-shell.css (100%) rename css/selectors/{ => built-tests}/xml-full.css (100%) rename css/selectors/{ => built-tests}/xml-shell.css (100%) diff --git a/css/selectors/CHANGES b/css/selectors/built-tests/CHANGES similarity index 100% rename from css/selectors/CHANGES rename to css/selectors/built-tests/CHANGES diff --git a/css/selectors/Makefile b/css/selectors/built-tests/Makefile similarity index 100% rename from css/selectors/Makefile rename to css/selectors/built-tests/Makefile diff --git a/css/selectors/README b/css/selectors/built-tests/README similarity index 100% rename from css/selectors/README rename to css/selectors/built-tests/README diff --git a/css/selectors/TODO b/css/selectors/built-tests/TODO similarity index 100% rename from css/selectors/TODO rename to css/selectors/built-tests/TODO diff --git a/css/selectors/css3-modsel-1.xml b/css/selectors/built-tests/css3-modsel-1.xml similarity index 100% rename from css/selectors/css3-modsel-1.xml rename to css/selectors/built-tests/css3-modsel-1.xml diff --git a/css/selectors/css3-modsel-10.xml b/css/selectors/built-tests/css3-modsel-10.xml similarity index 100% rename from css/selectors/css3-modsel-10.xml rename to css/selectors/built-tests/css3-modsel-10.xml diff --git a/css/selectors/css3-modsel-100.xml b/css/selectors/built-tests/css3-modsel-100.xml similarity index 100% rename from css/selectors/css3-modsel-100.xml rename to css/selectors/built-tests/css3-modsel-100.xml diff --git a/css/selectors/css3-modsel-100b.xml b/css/selectors/built-tests/css3-modsel-100b.xml similarity index 100% rename from css/selectors/css3-modsel-100b.xml rename to css/selectors/built-tests/css3-modsel-100b.xml diff --git a/css/selectors/css3-modsel-101.xml b/css/selectors/built-tests/css3-modsel-101.xml similarity index 100% rename from css/selectors/css3-modsel-101.xml rename to css/selectors/built-tests/css3-modsel-101.xml diff --git a/css/selectors/css3-modsel-101b.xml b/css/selectors/built-tests/css3-modsel-101b.xml similarity index 100% rename from css/selectors/css3-modsel-101b.xml rename to css/selectors/built-tests/css3-modsel-101b.xml diff --git a/css/selectors/css3-modsel-102.xml b/css/selectors/built-tests/css3-modsel-102.xml similarity index 100% rename from css/selectors/css3-modsel-102.xml rename to css/selectors/built-tests/css3-modsel-102.xml diff --git a/css/selectors/css3-modsel-102b.xml b/css/selectors/built-tests/css3-modsel-102b.xml similarity index 100% rename from css/selectors/css3-modsel-102b.xml rename to css/selectors/built-tests/css3-modsel-102b.xml diff --git a/css/selectors/css3-modsel-103.xml b/css/selectors/built-tests/css3-modsel-103.xml similarity index 100% rename from css/selectors/css3-modsel-103.xml rename to css/selectors/built-tests/css3-modsel-103.xml diff --git a/css/selectors/css3-modsel-103b.xml b/css/selectors/built-tests/css3-modsel-103b.xml similarity index 100% rename from css/selectors/css3-modsel-103b.xml rename to css/selectors/built-tests/css3-modsel-103b.xml diff --git a/css/selectors/css3-modsel-104.xml b/css/selectors/built-tests/css3-modsel-104.xml similarity index 100% rename from css/selectors/css3-modsel-104.xml rename to css/selectors/built-tests/css3-modsel-104.xml diff --git a/css/selectors/css3-modsel-104b.xml b/css/selectors/built-tests/css3-modsel-104b.xml similarity index 100% rename from css/selectors/css3-modsel-104b.xml rename to css/selectors/built-tests/css3-modsel-104b.xml diff --git a/css/selectors/css3-modsel-105.xml b/css/selectors/built-tests/css3-modsel-105.xml similarity index 100% rename from css/selectors/css3-modsel-105.xml rename to css/selectors/built-tests/css3-modsel-105.xml diff --git a/css/selectors/css3-modsel-105b.xml b/css/selectors/built-tests/css3-modsel-105b.xml similarity index 100% rename from css/selectors/css3-modsel-105b.xml rename to css/selectors/built-tests/css3-modsel-105b.xml diff --git a/css/selectors/css3-modsel-106.xml b/css/selectors/built-tests/css3-modsel-106.xml similarity index 100% rename from css/selectors/css3-modsel-106.xml rename to css/selectors/built-tests/css3-modsel-106.xml diff --git a/css/selectors/css3-modsel-106b.xml b/css/selectors/built-tests/css3-modsel-106b.xml similarity index 100% rename from css/selectors/css3-modsel-106b.xml rename to css/selectors/built-tests/css3-modsel-106b.xml diff --git a/css/selectors/css3-modsel-107.xml b/css/selectors/built-tests/css3-modsel-107.xml similarity index 100% rename from css/selectors/css3-modsel-107.xml rename to css/selectors/built-tests/css3-modsel-107.xml diff --git a/css/selectors/css3-modsel-107b.xml b/css/selectors/built-tests/css3-modsel-107b.xml similarity index 100% rename from css/selectors/css3-modsel-107b.xml rename to css/selectors/built-tests/css3-modsel-107b.xml diff --git a/css/selectors/css3-modsel-108.xml b/css/selectors/built-tests/css3-modsel-108.xml similarity index 100% rename from css/selectors/css3-modsel-108.xml rename to css/selectors/built-tests/css3-modsel-108.xml diff --git a/css/selectors/css3-modsel-108b.xml b/css/selectors/built-tests/css3-modsel-108b.xml similarity index 100% rename from css/selectors/css3-modsel-108b.xml rename to css/selectors/built-tests/css3-modsel-108b.xml diff --git a/css/selectors/css3-modsel-109.xml b/css/selectors/built-tests/css3-modsel-109.xml similarity index 100% rename from css/selectors/css3-modsel-109.xml rename to css/selectors/built-tests/css3-modsel-109.xml diff --git a/css/selectors/css3-modsel-109b.xml b/css/selectors/built-tests/css3-modsel-109b.xml similarity index 100% rename from css/selectors/css3-modsel-109b.xml rename to css/selectors/built-tests/css3-modsel-109b.xml diff --git a/css/selectors/css3-modsel-11.xml b/css/selectors/built-tests/css3-modsel-11.xml similarity index 100% rename from css/selectors/css3-modsel-11.xml rename to css/selectors/built-tests/css3-modsel-11.xml diff --git a/css/selectors/css3-modsel-110.xml b/css/selectors/built-tests/css3-modsel-110.xml similarity index 100% rename from css/selectors/css3-modsel-110.xml rename to css/selectors/built-tests/css3-modsel-110.xml diff --git a/css/selectors/css3-modsel-110b.xml b/css/selectors/built-tests/css3-modsel-110b.xml similarity index 100% rename from css/selectors/css3-modsel-110b.xml rename to css/selectors/built-tests/css3-modsel-110b.xml diff --git a/css/selectors/css3-modsel-111.xml b/css/selectors/built-tests/css3-modsel-111.xml similarity index 100% rename from css/selectors/css3-modsel-111.xml rename to css/selectors/built-tests/css3-modsel-111.xml diff --git a/css/selectors/css3-modsel-111b.xml b/css/selectors/built-tests/css3-modsel-111b.xml similarity index 100% rename from css/selectors/css3-modsel-111b.xml rename to css/selectors/built-tests/css3-modsel-111b.xml diff --git a/css/selectors/css3-modsel-112.xml b/css/selectors/built-tests/css3-modsel-112.xml similarity index 100% rename from css/selectors/css3-modsel-112.xml rename to css/selectors/built-tests/css3-modsel-112.xml diff --git a/css/selectors/css3-modsel-112b.xml b/css/selectors/built-tests/css3-modsel-112b.xml similarity index 100% rename from css/selectors/css3-modsel-112b.xml rename to css/selectors/built-tests/css3-modsel-112b.xml diff --git a/css/selectors/css3-modsel-113.xml b/css/selectors/built-tests/css3-modsel-113.xml similarity index 100% rename from css/selectors/css3-modsel-113.xml rename to css/selectors/built-tests/css3-modsel-113.xml diff --git a/css/selectors/css3-modsel-113b.xml b/css/selectors/built-tests/css3-modsel-113b.xml similarity index 100% rename from css/selectors/css3-modsel-113b.xml rename to css/selectors/built-tests/css3-modsel-113b.xml diff --git a/css/selectors/css3-modsel-114.xml b/css/selectors/built-tests/css3-modsel-114.xml similarity index 100% rename from css/selectors/css3-modsel-114.xml rename to css/selectors/built-tests/css3-modsel-114.xml diff --git a/css/selectors/css3-modsel-114b.xml b/css/selectors/built-tests/css3-modsel-114b.xml similarity index 100% rename from css/selectors/css3-modsel-114b.xml rename to css/selectors/built-tests/css3-modsel-114b.xml diff --git a/css/selectors/css3-modsel-115.xml b/css/selectors/built-tests/css3-modsel-115.xml similarity index 100% rename from css/selectors/css3-modsel-115.xml rename to css/selectors/built-tests/css3-modsel-115.xml diff --git a/css/selectors/css3-modsel-115b.xml b/css/selectors/built-tests/css3-modsel-115b.xml similarity index 100% rename from css/selectors/css3-modsel-115b.xml rename to css/selectors/built-tests/css3-modsel-115b.xml diff --git a/css/selectors/css3-modsel-116.xml b/css/selectors/built-tests/css3-modsel-116.xml similarity index 100% rename from css/selectors/css3-modsel-116.xml rename to css/selectors/built-tests/css3-modsel-116.xml diff --git a/css/selectors/css3-modsel-116b.xml b/css/selectors/built-tests/css3-modsel-116b.xml similarity index 100% rename from css/selectors/css3-modsel-116b.xml rename to css/selectors/built-tests/css3-modsel-116b.xml diff --git a/css/selectors/css3-modsel-117.xml b/css/selectors/built-tests/css3-modsel-117.xml similarity index 100% rename from css/selectors/css3-modsel-117.xml rename to css/selectors/built-tests/css3-modsel-117.xml diff --git a/css/selectors/css3-modsel-117b.xml b/css/selectors/built-tests/css3-modsel-117b.xml similarity index 100% rename from css/selectors/css3-modsel-117b.xml rename to css/selectors/built-tests/css3-modsel-117b.xml diff --git a/css/selectors/css3-modsel-118.xml b/css/selectors/built-tests/css3-modsel-118.xml similarity index 100% rename from css/selectors/css3-modsel-118.xml rename to css/selectors/built-tests/css3-modsel-118.xml diff --git a/css/selectors/css3-modsel-119.xml b/css/selectors/built-tests/css3-modsel-119.xml similarity index 100% rename from css/selectors/css3-modsel-119.xml rename to css/selectors/built-tests/css3-modsel-119.xml diff --git a/css/selectors/css3-modsel-12.xml-removed b/css/selectors/built-tests/css3-modsel-12.xml-removed similarity index 100% rename from css/selectors/css3-modsel-12.xml-removed rename to css/selectors/built-tests/css3-modsel-12.xml-removed diff --git a/css/selectors/css3-modsel-120.xml b/css/selectors/built-tests/css3-modsel-120.xml similarity index 100% rename from css/selectors/css3-modsel-120.xml rename to css/selectors/built-tests/css3-modsel-120.xml diff --git a/css/selectors/css3-modsel-121.xml b/css/selectors/built-tests/css3-modsel-121.xml similarity index 100% rename from css/selectors/css3-modsel-121.xml rename to css/selectors/built-tests/css3-modsel-121.xml diff --git a/css/selectors/css3-modsel-122.xml b/css/selectors/built-tests/css3-modsel-122.xml similarity index 100% rename from css/selectors/css3-modsel-122.xml rename to css/selectors/built-tests/css3-modsel-122.xml diff --git a/css/selectors/css3-modsel-123.xml b/css/selectors/built-tests/css3-modsel-123.xml similarity index 100% rename from css/selectors/css3-modsel-123.xml rename to css/selectors/built-tests/css3-modsel-123.xml diff --git a/css/selectors/css3-modsel-123b.xml b/css/selectors/built-tests/css3-modsel-123b.xml similarity index 100% rename from css/selectors/css3-modsel-123b.xml rename to css/selectors/built-tests/css3-modsel-123b.xml diff --git a/css/selectors/css3-modsel-124.xml b/css/selectors/built-tests/css3-modsel-124.xml similarity index 100% rename from css/selectors/css3-modsel-124.xml rename to css/selectors/built-tests/css3-modsel-124.xml diff --git a/css/selectors/css3-modsel-124b.xml b/css/selectors/built-tests/css3-modsel-124b.xml similarity index 100% rename from css/selectors/css3-modsel-124b.xml rename to css/selectors/built-tests/css3-modsel-124b.xml diff --git a/css/selectors/css3-modsel-125.xml b/css/selectors/built-tests/css3-modsel-125.xml similarity index 100% rename from css/selectors/css3-modsel-125.xml rename to css/selectors/built-tests/css3-modsel-125.xml diff --git a/css/selectors/css3-modsel-125b.xml b/css/selectors/built-tests/css3-modsel-125b.xml similarity index 100% rename from css/selectors/css3-modsel-125b.xml rename to css/selectors/built-tests/css3-modsel-125b.xml diff --git a/css/selectors/css3-modsel-126.xml b/css/selectors/built-tests/css3-modsel-126.xml similarity index 100% rename from css/selectors/css3-modsel-126.xml rename to css/selectors/built-tests/css3-modsel-126.xml diff --git a/css/selectors/css3-modsel-126b.xml b/css/selectors/built-tests/css3-modsel-126b.xml similarity index 100% rename from css/selectors/css3-modsel-126b.xml rename to css/selectors/built-tests/css3-modsel-126b.xml diff --git a/css/selectors/css3-modsel-127.xml b/css/selectors/built-tests/css3-modsel-127.xml similarity index 100% rename from css/selectors/css3-modsel-127.xml rename to css/selectors/built-tests/css3-modsel-127.xml diff --git a/css/selectors/css3-modsel-127b.xml b/css/selectors/built-tests/css3-modsel-127b.xml similarity index 100% rename from css/selectors/css3-modsel-127b.xml rename to css/selectors/built-tests/css3-modsel-127b.xml diff --git a/css/selectors/css3-modsel-128.xml b/css/selectors/built-tests/css3-modsel-128.xml similarity index 100% rename from css/selectors/css3-modsel-128.xml rename to css/selectors/built-tests/css3-modsel-128.xml diff --git a/css/selectors/css3-modsel-128b.xml b/css/selectors/built-tests/css3-modsel-128b.xml similarity index 100% rename from css/selectors/css3-modsel-128b.xml rename to css/selectors/built-tests/css3-modsel-128b.xml diff --git a/css/selectors/css3-modsel-129.xml b/css/selectors/built-tests/css3-modsel-129.xml similarity index 100% rename from css/selectors/css3-modsel-129.xml rename to css/selectors/built-tests/css3-modsel-129.xml diff --git a/css/selectors/css3-modsel-129b.xml b/css/selectors/built-tests/css3-modsel-129b.xml similarity index 100% rename from css/selectors/css3-modsel-129b.xml rename to css/selectors/built-tests/css3-modsel-129b.xml diff --git a/css/selectors/css3-modsel-13.xml b/css/selectors/built-tests/css3-modsel-13.xml similarity index 100% rename from css/selectors/css3-modsel-13.xml rename to css/selectors/built-tests/css3-modsel-13.xml diff --git a/css/selectors/css3-modsel-130.xml b/css/selectors/built-tests/css3-modsel-130.xml similarity index 100% rename from css/selectors/css3-modsel-130.xml rename to css/selectors/built-tests/css3-modsel-130.xml diff --git a/css/selectors/css3-modsel-130b.xml b/css/selectors/built-tests/css3-modsel-130b.xml similarity index 100% rename from css/selectors/css3-modsel-130b.xml rename to css/selectors/built-tests/css3-modsel-130b.xml diff --git a/css/selectors/css3-modsel-131.xml b/css/selectors/built-tests/css3-modsel-131.xml similarity index 100% rename from css/selectors/css3-modsel-131.xml rename to css/selectors/built-tests/css3-modsel-131.xml diff --git a/css/selectors/css3-modsel-131b.xml b/css/selectors/built-tests/css3-modsel-131b.xml similarity index 100% rename from css/selectors/css3-modsel-131b.xml rename to css/selectors/built-tests/css3-modsel-131b.xml diff --git a/css/selectors/css3-modsel-132.xml b/css/selectors/built-tests/css3-modsel-132.xml similarity index 100% rename from css/selectors/css3-modsel-132.xml rename to css/selectors/built-tests/css3-modsel-132.xml diff --git a/css/selectors/css3-modsel-132b.xml b/css/selectors/built-tests/css3-modsel-132b.xml similarity index 100% rename from css/selectors/css3-modsel-132b.xml rename to css/selectors/built-tests/css3-modsel-132b.xml diff --git a/css/selectors/css3-modsel-133.xml b/css/selectors/built-tests/css3-modsel-133.xml similarity index 100% rename from css/selectors/css3-modsel-133.xml rename to css/selectors/built-tests/css3-modsel-133.xml diff --git a/css/selectors/css3-modsel-133b.xml b/css/selectors/built-tests/css3-modsel-133b.xml similarity index 100% rename from css/selectors/css3-modsel-133b.xml rename to css/selectors/built-tests/css3-modsel-133b.xml diff --git a/css/selectors/css3-modsel-134.xml b/css/selectors/built-tests/css3-modsel-134.xml similarity index 100% rename from css/selectors/css3-modsel-134.xml rename to css/selectors/built-tests/css3-modsel-134.xml diff --git a/css/selectors/css3-modsel-134b.xml b/css/selectors/built-tests/css3-modsel-134b.xml similarity index 100% rename from css/selectors/css3-modsel-134b.xml rename to css/selectors/built-tests/css3-modsel-134b.xml diff --git a/css/selectors/css3-modsel-135.xml b/css/selectors/built-tests/css3-modsel-135.xml similarity index 100% rename from css/selectors/css3-modsel-135.xml rename to css/selectors/built-tests/css3-modsel-135.xml diff --git a/css/selectors/css3-modsel-135b.xml b/css/selectors/built-tests/css3-modsel-135b.xml similarity index 100% rename from css/selectors/css3-modsel-135b.xml rename to css/selectors/built-tests/css3-modsel-135b.xml diff --git a/css/selectors/css3-modsel-136.xml b/css/selectors/built-tests/css3-modsel-136.xml similarity index 100% rename from css/selectors/css3-modsel-136.xml rename to css/selectors/built-tests/css3-modsel-136.xml diff --git a/css/selectors/css3-modsel-136b.xml b/css/selectors/built-tests/css3-modsel-136b.xml similarity index 100% rename from css/selectors/css3-modsel-136b.xml rename to css/selectors/built-tests/css3-modsel-136b.xml diff --git a/css/selectors/css3-modsel-137.xml b/css/selectors/built-tests/css3-modsel-137.xml similarity index 100% rename from css/selectors/css3-modsel-137.xml rename to css/selectors/built-tests/css3-modsel-137.xml diff --git a/css/selectors/css3-modsel-137b.xml b/css/selectors/built-tests/css3-modsel-137b.xml similarity index 100% rename from css/selectors/css3-modsel-137b.xml rename to css/selectors/built-tests/css3-modsel-137b.xml diff --git a/css/selectors/css3-modsel-138.xml b/css/selectors/built-tests/css3-modsel-138.xml similarity index 100% rename from css/selectors/css3-modsel-138.xml rename to css/selectors/built-tests/css3-modsel-138.xml diff --git a/css/selectors/css3-modsel-138b.xml b/css/selectors/built-tests/css3-modsel-138b.xml similarity index 100% rename from css/selectors/css3-modsel-138b.xml rename to css/selectors/built-tests/css3-modsel-138b.xml diff --git a/css/selectors/css3-modsel-139.xml b/css/selectors/built-tests/css3-modsel-139.xml similarity index 100% rename from css/selectors/css3-modsel-139.xml rename to css/selectors/built-tests/css3-modsel-139.xml diff --git a/css/selectors/css3-modsel-139b.xml b/css/selectors/built-tests/css3-modsel-139b.xml similarity index 100% rename from css/selectors/css3-modsel-139b.xml rename to css/selectors/built-tests/css3-modsel-139b.xml diff --git a/css/selectors/css3-modsel-14.xml b/css/selectors/built-tests/css3-modsel-14.xml similarity index 100% rename from css/selectors/css3-modsel-14.xml rename to css/selectors/built-tests/css3-modsel-14.xml diff --git a/css/selectors/css3-modsel-140.xml b/css/selectors/built-tests/css3-modsel-140.xml similarity index 100% rename from css/selectors/css3-modsel-140.xml rename to css/selectors/built-tests/css3-modsel-140.xml diff --git a/css/selectors/css3-modsel-140b.xml b/css/selectors/built-tests/css3-modsel-140b.xml similarity index 100% rename from css/selectors/css3-modsel-140b.xml rename to css/selectors/built-tests/css3-modsel-140b.xml diff --git a/css/selectors/css3-modsel-141.xml b/css/selectors/built-tests/css3-modsel-141.xml similarity index 100% rename from css/selectors/css3-modsel-141.xml rename to css/selectors/built-tests/css3-modsel-141.xml diff --git a/css/selectors/css3-modsel-141b.xml b/css/selectors/built-tests/css3-modsel-141b.xml similarity index 100% rename from css/selectors/css3-modsel-141b.xml rename to css/selectors/built-tests/css3-modsel-141b.xml diff --git a/css/selectors/css3-modsel-142.xml b/css/selectors/built-tests/css3-modsel-142.xml similarity index 100% rename from css/selectors/css3-modsel-142.xml rename to css/selectors/built-tests/css3-modsel-142.xml diff --git a/css/selectors/css3-modsel-142b.xml b/css/selectors/built-tests/css3-modsel-142b.xml similarity index 100% rename from css/selectors/css3-modsel-142b.xml rename to css/selectors/built-tests/css3-modsel-142b.xml diff --git a/css/selectors/css3-modsel-143.xml b/css/selectors/built-tests/css3-modsel-143.xml similarity index 100% rename from css/selectors/css3-modsel-143.xml rename to css/selectors/built-tests/css3-modsel-143.xml diff --git a/css/selectors/css3-modsel-143b.xml b/css/selectors/built-tests/css3-modsel-143b.xml similarity index 100% rename from css/selectors/css3-modsel-143b.xml rename to css/selectors/built-tests/css3-modsel-143b.xml diff --git a/css/selectors/css3-modsel-144.xml b/css/selectors/built-tests/css3-modsel-144.xml similarity index 100% rename from css/selectors/css3-modsel-144.xml rename to css/selectors/built-tests/css3-modsel-144.xml diff --git a/css/selectors/css3-modsel-145a.xml b/css/selectors/built-tests/css3-modsel-145a.xml similarity index 100% rename from css/selectors/css3-modsel-145a.xml rename to css/selectors/built-tests/css3-modsel-145a.xml diff --git a/css/selectors/css3-modsel-145b.xml b/css/selectors/built-tests/css3-modsel-145b.xml similarity index 100% rename from css/selectors/css3-modsel-145b.xml rename to css/selectors/built-tests/css3-modsel-145b.xml diff --git a/css/selectors/css3-modsel-146a.xml b/css/selectors/built-tests/css3-modsel-146a.xml similarity index 100% rename from css/selectors/css3-modsel-146a.xml rename to css/selectors/built-tests/css3-modsel-146a.xml diff --git a/css/selectors/css3-modsel-146b.xml b/css/selectors/built-tests/css3-modsel-146b.xml similarity index 100% rename from css/selectors/css3-modsel-146b.xml rename to css/selectors/built-tests/css3-modsel-146b.xml diff --git a/css/selectors/css3-modsel-147a.xml b/css/selectors/built-tests/css3-modsel-147a.xml similarity index 100% rename from css/selectors/css3-modsel-147a.xml rename to css/selectors/built-tests/css3-modsel-147a.xml diff --git a/css/selectors/css3-modsel-147b.xml b/css/selectors/built-tests/css3-modsel-147b.xml similarity index 100% rename from css/selectors/css3-modsel-147b.xml rename to css/selectors/built-tests/css3-modsel-147b.xml diff --git a/css/selectors/css3-modsel-148.xml b/css/selectors/built-tests/css3-modsel-148.xml similarity index 100% rename from css/selectors/css3-modsel-148.xml rename to css/selectors/built-tests/css3-modsel-148.xml diff --git a/css/selectors/css3-modsel-149.xml b/css/selectors/built-tests/css3-modsel-149.xml similarity index 100% rename from css/selectors/css3-modsel-149.xml rename to css/selectors/built-tests/css3-modsel-149.xml diff --git a/css/selectors/css3-modsel-149b.xml b/css/selectors/built-tests/css3-modsel-149b.xml similarity index 100% rename from css/selectors/css3-modsel-149b.xml rename to css/selectors/built-tests/css3-modsel-149b.xml diff --git a/css/selectors/css3-modsel-14b.xml b/css/selectors/built-tests/css3-modsel-14b.xml similarity index 100% rename from css/selectors/css3-modsel-14b.xml rename to css/selectors/built-tests/css3-modsel-14b.xml diff --git a/css/selectors/css3-modsel-14c.xml b/css/selectors/built-tests/css3-modsel-14c.xml similarity index 100% rename from css/selectors/css3-modsel-14c.xml rename to css/selectors/built-tests/css3-modsel-14c.xml diff --git a/css/selectors/css3-modsel-14d.xml b/css/selectors/built-tests/css3-modsel-14d.xml similarity index 100% rename from css/selectors/css3-modsel-14d.xml rename to css/selectors/built-tests/css3-modsel-14d.xml diff --git a/css/selectors/css3-modsel-14e.xml b/css/selectors/built-tests/css3-modsel-14e.xml similarity index 100% rename from css/selectors/css3-modsel-14e.xml rename to css/selectors/built-tests/css3-modsel-14e.xml diff --git a/css/selectors/css3-modsel-15.xml b/css/selectors/built-tests/css3-modsel-15.xml similarity index 100% rename from css/selectors/css3-modsel-15.xml rename to css/selectors/built-tests/css3-modsel-15.xml diff --git a/css/selectors/css3-modsel-150.xml b/css/selectors/built-tests/css3-modsel-150.xml similarity index 100% rename from css/selectors/css3-modsel-150.xml rename to css/selectors/built-tests/css3-modsel-150.xml diff --git a/css/selectors/css3-modsel-151.xml b/css/selectors/built-tests/css3-modsel-151.xml similarity index 100% rename from css/selectors/css3-modsel-151.xml rename to css/selectors/built-tests/css3-modsel-151.xml diff --git a/css/selectors/css3-modsel-152.xml b/css/selectors/built-tests/css3-modsel-152.xml similarity index 100% rename from css/selectors/css3-modsel-152.xml rename to css/selectors/built-tests/css3-modsel-152.xml diff --git a/css/selectors/css3-modsel-153.xml b/css/selectors/built-tests/css3-modsel-153.xml similarity index 100% rename from css/selectors/css3-modsel-153.xml rename to css/selectors/built-tests/css3-modsel-153.xml diff --git a/css/selectors/css3-modsel-154.xml b/css/selectors/built-tests/css3-modsel-154.xml similarity index 100% rename from css/selectors/css3-modsel-154.xml rename to css/selectors/built-tests/css3-modsel-154.xml diff --git a/css/selectors/css3-modsel-155.xml b/css/selectors/built-tests/css3-modsel-155.xml similarity index 100% rename from css/selectors/css3-modsel-155.xml rename to css/selectors/built-tests/css3-modsel-155.xml diff --git a/css/selectors/css3-modsel-155a.xml b/css/selectors/built-tests/css3-modsel-155a.xml similarity index 100% rename from css/selectors/css3-modsel-155a.xml rename to css/selectors/built-tests/css3-modsel-155a.xml diff --git a/css/selectors/css3-modsel-155b.xml b/css/selectors/built-tests/css3-modsel-155b.xml similarity index 100% rename from css/selectors/css3-modsel-155b.xml rename to css/selectors/built-tests/css3-modsel-155b.xml diff --git a/css/selectors/css3-modsel-155c.xml b/css/selectors/built-tests/css3-modsel-155c.xml similarity index 100% rename from css/selectors/css3-modsel-155c.xml rename to css/selectors/built-tests/css3-modsel-155c.xml diff --git a/css/selectors/css3-modsel-155d.xml b/css/selectors/built-tests/css3-modsel-155d.xml similarity index 100% rename from css/selectors/css3-modsel-155d.xml rename to css/selectors/built-tests/css3-modsel-155d.xml diff --git a/css/selectors/css3-modsel-156.xml b/css/selectors/built-tests/css3-modsel-156.xml similarity index 100% rename from css/selectors/css3-modsel-156.xml rename to css/selectors/built-tests/css3-modsel-156.xml diff --git a/css/selectors/css3-modsel-156b.xml b/css/selectors/built-tests/css3-modsel-156b.xml similarity index 100% rename from css/selectors/css3-modsel-156b.xml rename to css/selectors/built-tests/css3-modsel-156b.xml diff --git a/css/selectors/css3-modsel-156c.xml b/css/selectors/built-tests/css3-modsel-156c.xml similarity index 100% rename from css/selectors/css3-modsel-156c.xml rename to css/selectors/built-tests/css3-modsel-156c.xml diff --git a/css/selectors/css3-modsel-157.xml b/css/selectors/built-tests/css3-modsel-157.xml similarity index 100% rename from css/selectors/css3-modsel-157.xml rename to css/selectors/built-tests/css3-modsel-157.xml diff --git a/css/selectors/css3-modsel-158.xml b/css/selectors/built-tests/css3-modsel-158.xml similarity index 100% rename from css/selectors/css3-modsel-158.xml rename to css/selectors/built-tests/css3-modsel-158.xml diff --git a/css/selectors/css3-modsel-159.xml b/css/selectors/built-tests/css3-modsel-159.xml similarity index 100% rename from css/selectors/css3-modsel-159.xml rename to css/selectors/built-tests/css3-modsel-159.xml diff --git a/css/selectors/css3-modsel-15b.xml b/css/selectors/built-tests/css3-modsel-15b.xml similarity index 100% rename from css/selectors/css3-modsel-15b.xml rename to css/selectors/built-tests/css3-modsel-15b.xml diff --git a/css/selectors/css3-modsel-15c.xml b/css/selectors/built-tests/css3-modsel-15c.xml similarity index 100% rename from css/selectors/css3-modsel-15c.xml rename to css/selectors/built-tests/css3-modsel-15c.xml diff --git a/css/selectors/css3-modsel-16.xml b/css/selectors/built-tests/css3-modsel-16.xml similarity index 100% rename from css/selectors/css3-modsel-16.xml rename to css/selectors/built-tests/css3-modsel-16.xml diff --git a/css/selectors/css3-modsel-160.xml b/css/selectors/built-tests/css3-modsel-160.xml similarity index 100% rename from css/selectors/css3-modsel-160.xml rename to css/selectors/built-tests/css3-modsel-160.xml diff --git a/css/selectors/css3-modsel-161.xml b/css/selectors/built-tests/css3-modsel-161.xml similarity index 100% rename from css/selectors/css3-modsel-161.xml rename to css/selectors/built-tests/css3-modsel-161.xml diff --git a/css/selectors/css3-modsel-162.xml-removed b/css/selectors/built-tests/css3-modsel-162.xml-removed similarity index 100% rename from css/selectors/css3-modsel-162.xml-removed rename to css/selectors/built-tests/css3-modsel-162.xml-removed diff --git a/css/selectors/css3-modsel-163.xml-disabled-contains-removed b/css/selectors/built-tests/css3-modsel-163.xml-disabled-contains-removed similarity index 100% rename from css/selectors/css3-modsel-163.xml-disabled-contains-removed rename to css/selectors/built-tests/css3-modsel-163.xml-disabled-contains-removed diff --git a/css/selectors/css3-modsel-164.xml-removed b/css/selectors/built-tests/css3-modsel-164.xml-removed similarity index 100% rename from css/selectors/css3-modsel-164.xml-removed rename to css/selectors/built-tests/css3-modsel-164.xml-removed diff --git a/css/selectors/css3-modsel-165.xml-removed b/css/selectors/built-tests/css3-modsel-165.xml-removed similarity index 100% rename from css/selectors/css3-modsel-165.xml-removed rename to css/selectors/built-tests/css3-modsel-165.xml-removed diff --git a/css/selectors/css3-modsel-166.xml b/css/selectors/built-tests/css3-modsel-166.xml similarity index 100% rename from css/selectors/css3-modsel-166.xml rename to css/selectors/built-tests/css3-modsel-166.xml diff --git a/css/selectors/css3-modsel-166a.xml b/css/selectors/built-tests/css3-modsel-166a.xml similarity index 100% rename from css/selectors/css3-modsel-166a.xml rename to css/selectors/built-tests/css3-modsel-166a.xml diff --git a/css/selectors/css3-modsel-167.xml b/css/selectors/built-tests/css3-modsel-167.xml similarity index 100% rename from css/selectors/css3-modsel-167.xml rename to css/selectors/built-tests/css3-modsel-167.xml diff --git a/css/selectors/css3-modsel-167a.xml b/css/selectors/built-tests/css3-modsel-167a.xml similarity index 100% rename from css/selectors/css3-modsel-167a.xml rename to css/selectors/built-tests/css3-modsel-167a.xml diff --git a/css/selectors/css3-modsel-168.xml b/css/selectors/built-tests/css3-modsel-168.xml similarity index 100% rename from css/selectors/css3-modsel-168.xml rename to css/selectors/built-tests/css3-modsel-168.xml diff --git a/css/selectors/css3-modsel-168a.xml b/css/selectors/built-tests/css3-modsel-168a.xml similarity index 100% rename from css/selectors/css3-modsel-168a.xml rename to css/selectors/built-tests/css3-modsel-168a.xml diff --git a/css/selectors/css3-modsel-169.xml b/css/selectors/built-tests/css3-modsel-169.xml similarity index 100% rename from css/selectors/css3-modsel-169.xml rename to css/selectors/built-tests/css3-modsel-169.xml diff --git a/css/selectors/css3-modsel-169a.xml b/css/selectors/built-tests/css3-modsel-169a.xml similarity index 100% rename from css/selectors/css3-modsel-169a.xml rename to css/selectors/built-tests/css3-modsel-169a.xml diff --git a/css/selectors/css3-modsel-17.xml b/css/selectors/built-tests/css3-modsel-17.xml similarity index 100% rename from css/selectors/css3-modsel-17.xml rename to css/selectors/built-tests/css3-modsel-17.xml diff --git a/css/selectors/css3-modsel-170.xml b/css/selectors/built-tests/css3-modsel-170.xml similarity index 100% rename from css/selectors/css3-modsel-170.xml rename to css/selectors/built-tests/css3-modsel-170.xml diff --git a/css/selectors/css3-modsel-170a.xml b/css/selectors/built-tests/css3-modsel-170a.xml similarity index 100% rename from css/selectors/css3-modsel-170a.xml rename to css/selectors/built-tests/css3-modsel-170a.xml diff --git a/css/selectors/css3-modsel-170b.xml b/css/selectors/built-tests/css3-modsel-170b.xml similarity index 100% rename from css/selectors/css3-modsel-170b.xml rename to css/selectors/built-tests/css3-modsel-170b.xml diff --git a/css/selectors/css3-modsel-170c.xml b/css/selectors/built-tests/css3-modsel-170c.xml similarity index 100% rename from css/selectors/css3-modsel-170c.xml rename to css/selectors/built-tests/css3-modsel-170c.xml diff --git a/css/selectors/css3-modsel-170d.xml b/css/selectors/built-tests/css3-modsel-170d.xml similarity index 100% rename from css/selectors/css3-modsel-170d.xml rename to css/selectors/built-tests/css3-modsel-170d.xml diff --git a/css/selectors/css3-modsel-171.xml b/css/selectors/built-tests/css3-modsel-171.xml similarity index 100% rename from css/selectors/css3-modsel-171.xml rename to css/selectors/built-tests/css3-modsel-171.xml diff --git a/css/selectors/css3-modsel-172a.xml b/css/selectors/built-tests/css3-modsel-172a.xml similarity index 100% rename from css/selectors/css3-modsel-172a.xml rename to css/selectors/built-tests/css3-modsel-172a.xml diff --git a/css/selectors/css3-modsel-172b.xml b/css/selectors/built-tests/css3-modsel-172b.xml similarity index 100% rename from css/selectors/css3-modsel-172b.xml rename to css/selectors/built-tests/css3-modsel-172b.xml diff --git a/css/selectors/css3-modsel-173a.xml b/css/selectors/built-tests/css3-modsel-173a.xml similarity index 100% rename from css/selectors/css3-modsel-173a.xml rename to css/selectors/built-tests/css3-modsel-173a.xml diff --git a/css/selectors/css3-modsel-173b.xml b/css/selectors/built-tests/css3-modsel-173b.xml similarity index 100% rename from css/selectors/css3-modsel-173b.xml rename to css/selectors/built-tests/css3-modsel-173b.xml diff --git a/css/selectors/css3-modsel-174a.xml b/css/selectors/built-tests/css3-modsel-174a.xml similarity index 100% rename from css/selectors/css3-modsel-174a.xml rename to css/selectors/built-tests/css3-modsel-174a.xml diff --git a/css/selectors/css3-modsel-174b.xml b/css/selectors/built-tests/css3-modsel-174b.xml similarity index 100% rename from css/selectors/css3-modsel-174b.xml rename to css/selectors/built-tests/css3-modsel-174b.xml diff --git a/css/selectors/css3-modsel-175a.xml b/css/selectors/built-tests/css3-modsel-175a.xml similarity index 100% rename from css/selectors/css3-modsel-175a.xml rename to css/selectors/built-tests/css3-modsel-175a.xml diff --git a/css/selectors/css3-modsel-175b.xml b/css/selectors/built-tests/css3-modsel-175b.xml similarity index 100% rename from css/selectors/css3-modsel-175b.xml rename to css/selectors/built-tests/css3-modsel-175b.xml diff --git a/css/selectors/css3-modsel-175c.xml b/css/selectors/built-tests/css3-modsel-175c.xml similarity index 100% rename from css/selectors/css3-modsel-175c.xml rename to css/selectors/built-tests/css3-modsel-175c.xml diff --git a/css/selectors/css3-modsel-176.xml b/css/selectors/built-tests/css3-modsel-176.xml similarity index 100% rename from css/selectors/css3-modsel-176.xml rename to css/selectors/built-tests/css3-modsel-176.xml diff --git a/css/selectors/css3-modsel-177a.xml b/css/selectors/built-tests/css3-modsel-177a.xml similarity index 100% rename from css/selectors/css3-modsel-177a.xml rename to css/selectors/built-tests/css3-modsel-177a.xml diff --git a/css/selectors/css3-modsel-177b.xml b/css/selectors/built-tests/css3-modsel-177b.xml similarity index 100% rename from css/selectors/css3-modsel-177b.xml rename to css/selectors/built-tests/css3-modsel-177b.xml diff --git a/css/selectors/css3-modsel-178.xml b/css/selectors/built-tests/css3-modsel-178.xml similarity index 100% rename from css/selectors/css3-modsel-178.xml rename to css/selectors/built-tests/css3-modsel-178.xml diff --git a/css/selectors/css3-modsel-179.xml b/css/selectors/built-tests/css3-modsel-179.xml similarity index 100% rename from css/selectors/css3-modsel-179.xml rename to css/selectors/built-tests/css3-modsel-179.xml diff --git a/css/selectors/css3-modsel-179a.xml b/css/selectors/built-tests/css3-modsel-179a.xml similarity index 100% rename from css/selectors/css3-modsel-179a.xml rename to css/selectors/built-tests/css3-modsel-179a.xml diff --git a/css/selectors/css3-modsel-18.xml b/css/selectors/built-tests/css3-modsel-18.xml similarity index 100% rename from css/selectors/css3-modsel-18.xml rename to css/selectors/built-tests/css3-modsel-18.xml diff --git a/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion b/css/selectors/built-tests/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion similarity index 100% rename from css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion rename to css/selectors/built-tests/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion diff --git a/css/selectors/css3-modsel-180a.xml b/css/selectors/built-tests/css3-modsel-180a.xml similarity index 100% rename from css/selectors/css3-modsel-180a.xml rename to css/selectors/built-tests/css3-modsel-180a.xml diff --git a/css/selectors/css3-modsel-181.xml b/css/selectors/built-tests/css3-modsel-181.xml similarity index 100% rename from css/selectors/css3-modsel-181.xml rename to css/selectors/built-tests/css3-modsel-181.xml diff --git a/css/selectors/css3-modsel-182.xml b/css/selectors/built-tests/css3-modsel-182.xml similarity index 100% rename from css/selectors/css3-modsel-182.xml rename to css/selectors/built-tests/css3-modsel-182.xml diff --git a/css/selectors/css3-modsel-183.xml b/css/selectors/built-tests/css3-modsel-183.xml similarity index 100% rename from css/selectors/css3-modsel-183.xml rename to css/selectors/built-tests/css3-modsel-183.xml diff --git a/css/selectors/css3-modsel-184a.xml b/css/selectors/built-tests/css3-modsel-184a.xml similarity index 100% rename from css/selectors/css3-modsel-184a.xml rename to css/selectors/built-tests/css3-modsel-184a.xml diff --git a/css/selectors/css3-modsel-184b.xml b/css/selectors/built-tests/css3-modsel-184b.xml similarity index 100% rename from css/selectors/css3-modsel-184b.xml rename to css/selectors/built-tests/css3-modsel-184b.xml diff --git a/css/selectors/css3-modsel-184c.xml b/css/selectors/built-tests/css3-modsel-184c.xml similarity index 100% rename from css/selectors/css3-modsel-184c.xml rename to css/selectors/built-tests/css3-modsel-184c.xml diff --git a/css/selectors/css3-modsel-184d.xml b/css/selectors/built-tests/css3-modsel-184d.xml similarity index 100% rename from css/selectors/css3-modsel-184d.xml rename to css/selectors/built-tests/css3-modsel-184d.xml diff --git a/css/selectors/css3-modsel-184e.xml b/css/selectors/built-tests/css3-modsel-184e.xml similarity index 100% rename from css/selectors/css3-modsel-184e.xml rename to css/selectors/built-tests/css3-modsel-184e.xml diff --git a/css/selectors/css3-modsel-184f.xml b/css/selectors/built-tests/css3-modsel-184f.xml similarity index 100% rename from css/selectors/css3-modsel-184f.xml rename to css/selectors/built-tests/css3-modsel-184f.xml diff --git a/css/selectors/css3-modsel-18a.xml b/css/selectors/built-tests/css3-modsel-18a.xml similarity index 100% rename from css/selectors/css3-modsel-18a.xml rename to css/selectors/built-tests/css3-modsel-18a.xml diff --git a/css/selectors/css3-modsel-18b.xml b/css/selectors/built-tests/css3-modsel-18b.xml similarity index 100% rename from css/selectors/css3-modsel-18b.xml rename to css/selectors/built-tests/css3-modsel-18b.xml diff --git a/css/selectors/css3-modsel-18c.xml b/css/selectors/built-tests/css3-modsel-18c.xml similarity index 100% rename from css/selectors/css3-modsel-18c.xml rename to css/selectors/built-tests/css3-modsel-18c.xml diff --git a/css/selectors/css3-modsel-19.xml b/css/selectors/built-tests/css3-modsel-19.xml similarity index 100% rename from css/selectors/css3-modsel-19.xml rename to css/selectors/built-tests/css3-modsel-19.xml diff --git a/css/selectors/css3-modsel-19a.xml-removed b/css/selectors/built-tests/css3-modsel-19a.xml-removed similarity index 100% rename from css/selectors/css3-modsel-19a.xml-removed rename to css/selectors/built-tests/css3-modsel-19a.xml-removed diff --git a/css/selectors/css3-modsel-19b.xml b/css/selectors/built-tests/css3-modsel-19b.xml similarity index 100% rename from css/selectors/css3-modsel-19b.xml rename to css/selectors/built-tests/css3-modsel-19b.xml diff --git a/css/selectors/css3-modsel-2.xml b/css/selectors/built-tests/css3-modsel-2.xml similarity index 100% rename from css/selectors/css3-modsel-2.xml rename to css/selectors/built-tests/css3-modsel-2.xml diff --git a/css/selectors/css3-modsel-20.xml b/css/selectors/built-tests/css3-modsel-20.xml similarity index 100% rename from css/selectors/css3-modsel-20.xml rename to css/selectors/built-tests/css3-modsel-20.xml diff --git a/css/selectors/css3-modsel-21.xml b/css/selectors/built-tests/css3-modsel-21.xml similarity index 100% rename from css/selectors/css3-modsel-21.xml rename to css/selectors/built-tests/css3-modsel-21.xml diff --git a/css/selectors/css3-modsel-21b.xml b/css/selectors/built-tests/css3-modsel-21b.xml similarity index 100% rename from css/selectors/css3-modsel-21b.xml rename to css/selectors/built-tests/css3-modsel-21b.xml diff --git a/css/selectors/css3-modsel-21c.xml b/css/selectors/built-tests/css3-modsel-21c.xml similarity index 100% rename from css/selectors/css3-modsel-21c.xml rename to css/selectors/built-tests/css3-modsel-21c.xml diff --git a/css/selectors/css3-modsel-22.xml b/css/selectors/built-tests/css3-modsel-22.xml similarity index 100% rename from css/selectors/css3-modsel-22.xml rename to css/selectors/built-tests/css3-modsel-22.xml diff --git a/css/selectors/css3-modsel-23.xml b/css/selectors/built-tests/css3-modsel-23.xml similarity index 100% rename from css/selectors/css3-modsel-23.xml rename to css/selectors/built-tests/css3-modsel-23.xml diff --git a/css/selectors/css3-modsel-24.xml b/css/selectors/built-tests/css3-modsel-24.xml similarity index 100% rename from css/selectors/css3-modsel-24.xml rename to css/selectors/built-tests/css3-modsel-24.xml diff --git a/css/selectors/css3-modsel-25.xml b/css/selectors/built-tests/css3-modsel-25.xml similarity index 100% rename from css/selectors/css3-modsel-25.xml rename to css/selectors/built-tests/css3-modsel-25.xml diff --git a/css/selectors/css3-modsel-27.xml b/css/selectors/built-tests/css3-modsel-27.xml similarity index 100% rename from css/selectors/css3-modsel-27.xml rename to css/selectors/built-tests/css3-modsel-27.xml diff --git a/css/selectors/css3-modsel-27a.xml b/css/selectors/built-tests/css3-modsel-27a.xml similarity index 100% rename from css/selectors/css3-modsel-27a.xml rename to css/selectors/built-tests/css3-modsel-27a.xml diff --git a/css/selectors/css3-modsel-27b.xml b/css/selectors/built-tests/css3-modsel-27b.xml similarity index 100% rename from css/selectors/css3-modsel-27b.xml rename to css/selectors/built-tests/css3-modsel-27b.xml diff --git a/css/selectors/css3-modsel-28.xml b/css/selectors/built-tests/css3-modsel-28.xml similarity index 100% rename from css/selectors/css3-modsel-28.xml rename to css/selectors/built-tests/css3-modsel-28.xml diff --git a/css/selectors/css3-modsel-28b.xml b/css/selectors/built-tests/css3-modsel-28b.xml similarity index 100% rename from css/selectors/css3-modsel-28b.xml rename to css/selectors/built-tests/css3-modsel-28b.xml diff --git a/css/selectors/css3-modsel-28c.pl-draft b/css/selectors/built-tests/css3-modsel-28c.pl-draft similarity index 100% rename from css/selectors/css3-modsel-28c.pl-draft rename to css/selectors/built-tests/css3-modsel-28c.pl-draft diff --git a/css/selectors/css3-modsel-29.xml b/css/selectors/built-tests/css3-modsel-29.xml similarity index 100% rename from css/selectors/css3-modsel-29.xml rename to css/selectors/built-tests/css3-modsel-29.xml diff --git a/css/selectors/css3-modsel-29b.xml b/css/selectors/built-tests/css3-modsel-29b.xml similarity index 100% rename from css/selectors/css3-modsel-29b.xml rename to css/selectors/built-tests/css3-modsel-29b.xml diff --git a/css/selectors/css3-modsel-3.xml b/css/selectors/built-tests/css3-modsel-3.xml similarity index 100% rename from css/selectors/css3-modsel-3.xml rename to css/selectors/built-tests/css3-modsel-3.xml diff --git a/css/selectors/css3-modsel-30.xml b/css/selectors/built-tests/css3-modsel-30.xml similarity index 100% rename from css/selectors/css3-modsel-30.xml rename to css/selectors/built-tests/css3-modsel-30.xml diff --git a/css/selectors/css3-modsel-31.xml b/css/selectors/built-tests/css3-modsel-31.xml similarity index 100% rename from css/selectors/css3-modsel-31.xml rename to css/selectors/built-tests/css3-modsel-31.xml diff --git a/css/selectors/css3-modsel-32.xml b/css/selectors/built-tests/css3-modsel-32.xml similarity index 100% rename from css/selectors/css3-modsel-32.xml rename to css/selectors/built-tests/css3-modsel-32.xml diff --git a/css/selectors/css3-modsel-33.xml b/css/selectors/built-tests/css3-modsel-33.xml similarity index 100% rename from css/selectors/css3-modsel-33.xml rename to css/selectors/built-tests/css3-modsel-33.xml diff --git a/css/selectors/css3-modsel-34.xml b/css/selectors/built-tests/css3-modsel-34.xml similarity index 100% rename from css/selectors/css3-modsel-34.xml rename to css/selectors/built-tests/css3-modsel-34.xml diff --git a/css/selectors/css3-modsel-35.xml b/css/selectors/built-tests/css3-modsel-35.xml similarity index 100% rename from css/selectors/css3-modsel-35.xml rename to css/selectors/built-tests/css3-modsel-35.xml diff --git a/css/selectors/css3-modsel-36.xml b/css/selectors/built-tests/css3-modsel-36.xml similarity index 100% rename from css/selectors/css3-modsel-36.xml rename to css/selectors/built-tests/css3-modsel-36.xml diff --git a/css/selectors/css3-modsel-37.xml b/css/selectors/built-tests/css3-modsel-37.xml similarity index 100% rename from css/selectors/css3-modsel-37.xml rename to css/selectors/built-tests/css3-modsel-37.xml diff --git a/css/selectors/css3-modsel-38.xml b/css/selectors/built-tests/css3-modsel-38.xml similarity index 100% rename from css/selectors/css3-modsel-38.xml rename to css/selectors/built-tests/css3-modsel-38.xml diff --git a/css/selectors/css3-modsel-39.xml b/css/selectors/built-tests/css3-modsel-39.xml similarity index 100% rename from css/selectors/css3-modsel-39.xml rename to css/selectors/built-tests/css3-modsel-39.xml diff --git a/css/selectors/css3-modsel-39a.xml b/css/selectors/built-tests/css3-modsel-39a.xml similarity index 100% rename from css/selectors/css3-modsel-39a.xml rename to css/selectors/built-tests/css3-modsel-39a.xml diff --git a/css/selectors/css3-modsel-39b.xml b/css/selectors/built-tests/css3-modsel-39b.xml similarity index 100% rename from css/selectors/css3-modsel-39b.xml rename to css/selectors/built-tests/css3-modsel-39b.xml diff --git a/css/selectors/css3-modsel-39c.xml b/css/selectors/built-tests/css3-modsel-39c.xml similarity index 100% rename from css/selectors/css3-modsel-39c.xml rename to css/selectors/built-tests/css3-modsel-39c.xml diff --git a/css/selectors/css3-modsel-3a.xml b/css/selectors/built-tests/css3-modsel-3a.xml similarity index 100% rename from css/selectors/css3-modsel-3a.xml rename to css/selectors/built-tests/css3-modsel-3a.xml diff --git a/css/selectors/css3-modsel-4.xml b/css/selectors/built-tests/css3-modsel-4.xml similarity index 100% rename from css/selectors/css3-modsel-4.xml rename to css/selectors/built-tests/css3-modsel-4.xml diff --git a/css/selectors/css3-modsel-40.xml-removed b/css/selectors/built-tests/css3-modsel-40.xml-removed similarity index 100% rename from css/selectors/css3-modsel-40.xml-removed rename to css/selectors/built-tests/css3-modsel-40.xml-removed diff --git a/css/selectors/css3-modsel-41.xml b/css/selectors/built-tests/css3-modsel-41.xml similarity index 100% rename from css/selectors/css3-modsel-41.xml rename to css/selectors/built-tests/css3-modsel-41.xml diff --git a/css/selectors/css3-modsel-41a.xml b/css/selectors/built-tests/css3-modsel-41a.xml similarity index 100% rename from css/selectors/css3-modsel-41a.xml rename to css/selectors/built-tests/css3-modsel-41a.xml diff --git a/css/selectors/css3-modsel-42.xml b/css/selectors/built-tests/css3-modsel-42.xml similarity index 100% rename from css/selectors/css3-modsel-42.xml rename to css/selectors/built-tests/css3-modsel-42.xml diff --git a/css/selectors/css3-modsel-42a.xml b/css/selectors/built-tests/css3-modsel-42a.xml similarity index 100% rename from css/selectors/css3-modsel-42a.xml rename to css/selectors/built-tests/css3-modsel-42a.xml diff --git a/css/selectors/css3-modsel-43.xml b/css/selectors/built-tests/css3-modsel-43.xml similarity index 100% rename from css/selectors/css3-modsel-43.xml rename to css/selectors/built-tests/css3-modsel-43.xml diff --git a/css/selectors/css3-modsel-43b.xml b/css/selectors/built-tests/css3-modsel-43b.xml similarity index 100% rename from css/selectors/css3-modsel-43b.xml rename to css/selectors/built-tests/css3-modsel-43b.xml diff --git a/css/selectors/css3-modsel-44.xml b/css/selectors/built-tests/css3-modsel-44.xml similarity index 100% rename from css/selectors/css3-modsel-44.xml rename to css/selectors/built-tests/css3-modsel-44.xml diff --git a/css/selectors/css3-modsel-44b.xml b/css/selectors/built-tests/css3-modsel-44b.xml similarity index 100% rename from css/selectors/css3-modsel-44b.xml rename to css/selectors/built-tests/css3-modsel-44b.xml diff --git a/css/selectors/css3-modsel-44c.xml b/css/selectors/built-tests/css3-modsel-44c.xml similarity index 100% rename from css/selectors/css3-modsel-44c.xml rename to css/selectors/built-tests/css3-modsel-44c.xml diff --git a/css/selectors/css3-modsel-44d.xml b/css/selectors/built-tests/css3-modsel-44d.xml similarity index 100% rename from css/selectors/css3-modsel-44d.xml rename to css/selectors/built-tests/css3-modsel-44d.xml diff --git a/css/selectors/css3-modsel-45.xml b/css/selectors/built-tests/css3-modsel-45.xml similarity index 100% rename from css/selectors/css3-modsel-45.xml rename to css/selectors/built-tests/css3-modsel-45.xml diff --git a/css/selectors/css3-modsel-45b.xml b/css/selectors/built-tests/css3-modsel-45b.xml similarity index 100% rename from css/selectors/css3-modsel-45b.xml rename to css/selectors/built-tests/css3-modsel-45b.xml diff --git a/css/selectors/css3-modsel-45c.xml b/css/selectors/built-tests/css3-modsel-45c.xml similarity index 100% rename from css/selectors/css3-modsel-45c.xml rename to css/selectors/built-tests/css3-modsel-45c.xml diff --git a/css/selectors/css3-modsel-46.xml b/css/selectors/built-tests/css3-modsel-46.xml similarity index 100% rename from css/selectors/css3-modsel-46.xml rename to css/selectors/built-tests/css3-modsel-46.xml diff --git a/css/selectors/css3-modsel-46b.xml b/css/selectors/built-tests/css3-modsel-46b.xml similarity index 100% rename from css/selectors/css3-modsel-46b.xml rename to css/selectors/built-tests/css3-modsel-46b.xml diff --git a/css/selectors/css3-modsel-47.xml b/css/selectors/built-tests/css3-modsel-47.xml similarity index 100% rename from css/selectors/css3-modsel-47.xml rename to css/selectors/built-tests/css3-modsel-47.xml diff --git a/css/selectors/css3-modsel-48.xml b/css/selectors/built-tests/css3-modsel-48.xml similarity index 100% rename from css/selectors/css3-modsel-48.xml rename to css/selectors/built-tests/css3-modsel-48.xml diff --git a/css/selectors/css3-modsel-49.xml b/css/selectors/built-tests/css3-modsel-49.xml similarity index 100% rename from css/selectors/css3-modsel-49.xml rename to css/selectors/built-tests/css3-modsel-49.xml diff --git a/css/selectors/css3-modsel-5.xml b/css/selectors/built-tests/css3-modsel-5.xml similarity index 100% rename from css/selectors/css3-modsel-5.xml rename to css/selectors/built-tests/css3-modsel-5.xml diff --git a/css/selectors/css3-modsel-50.xml b/css/selectors/built-tests/css3-modsel-50.xml similarity index 100% rename from css/selectors/css3-modsel-50.xml rename to css/selectors/built-tests/css3-modsel-50.xml diff --git a/css/selectors/css3-modsel-51.xml b/css/selectors/built-tests/css3-modsel-51.xml similarity index 100% rename from css/selectors/css3-modsel-51.xml rename to css/selectors/built-tests/css3-modsel-51.xml diff --git a/css/selectors/css3-modsel-52.xml b/css/selectors/built-tests/css3-modsel-52.xml similarity index 100% rename from css/selectors/css3-modsel-52.xml rename to css/selectors/built-tests/css3-modsel-52.xml diff --git a/css/selectors/css3-modsel-53.xml b/css/selectors/built-tests/css3-modsel-53.xml similarity index 100% rename from css/selectors/css3-modsel-53.xml rename to css/selectors/built-tests/css3-modsel-53.xml diff --git a/css/selectors/css3-modsel-54.xml b/css/selectors/built-tests/css3-modsel-54.xml similarity index 100% rename from css/selectors/css3-modsel-54.xml rename to css/selectors/built-tests/css3-modsel-54.xml diff --git a/css/selectors/css3-modsel-55.xml b/css/selectors/built-tests/css3-modsel-55.xml similarity index 100% rename from css/selectors/css3-modsel-55.xml rename to css/selectors/built-tests/css3-modsel-55.xml diff --git a/css/selectors/css3-modsel-56.xml b/css/selectors/built-tests/css3-modsel-56.xml similarity index 100% rename from css/selectors/css3-modsel-56.xml rename to css/selectors/built-tests/css3-modsel-56.xml diff --git a/css/selectors/css3-modsel-57.xml b/css/selectors/built-tests/css3-modsel-57.xml similarity index 100% rename from css/selectors/css3-modsel-57.xml rename to css/selectors/built-tests/css3-modsel-57.xml diff --git a/css/selectors/css3-modsel-57b.xml b/css/selectors/built-tests/css3-modsel-57b.xml similarity index 100% rename from css/selectors/css3-modsel-57b.xml rename to css/selectors/built-tests/css3-modsel-57b.xml diff --git a/css/selectors/css3-modsel-58.xml-removed b/css/selectors/built-tests/css3-modsel-58.xml-removed similarity index 100% rename from css/selectors/css3-modsel-58.xml-removed rename to css/selectors/built-tests/css3-modsel-58.xml-removed diff --git a/css/selectors/css3-modsel-59.xml b/css/selectors/built-tests/css3-modsel-59.xml similarity index 100% rename from css/selectors/css3-modsel-59.xml rename to css/selectors/built-tests/css3-modsel-59.xml diff --git a/css/selectors/css3-modsel-6.xml b/css/selectors/built-tests/css3-modsel-6.xml similarity index 100% rename from css/selectors/css3-modsel-6.xml rename to css/selectors/built-tests/css3-modsel-6.xml diff --git a/css/selectors/css3-modsel-60.xml b/css/selectors/built-tests/css3-modsel-60.xml similarity index 100% rename from css/selectors/css3-modsel-60.xml rename to css/selectors/built-tests/css3-modsel-60.xml diff --git a/css/selectors/css3-modsel-61.xml b/css/selectors/built-tests/css3-modsel-61.xml similarity index 100% rename from css/selectors/css3-modsel-61.xml rename to css/selectors/built-tests/css3-modsel-61.xml diff --git a/css/selectors/css3-modsel-62.xml b/css/selectors/built-tests/css3-modsel-62.xml similarity index 100% rename from css/selectors/css3-modsel-62.xml rename to css/selectors/built-tests/css3-modsel-62.xml diff --git a/css/selectors/css3-modsel-63.xml b/css/selectors/built-tests/css3-modsel-63.xml similarity index 100% rename from css/selectors/css3-modsel-63.xml rename to css/selectors/built-tests/css3-modsel-63.xml diff --git a/css/selectors/css3-modsel-64.xml b/css/selectors/built-tests/css3-modsel-64.xml similarity index 100% rename from css/selectors/css3-modsel-64.xml rename to css/selectors/built-tests/css3-modsel-64.xml diff --git a/css/selectors/css3-modsel-65.xml b/css/selectors/built-tests/css3-modsel-65.xml similarity index 100% rename from css/selectors/css3-modsel-65.xml rename to css/selectors/built-tests/css3-modsel-65.xml diff --git a/css/selectors/css3-modsel-66.xml b/css/selectors/built-tests/css3-modsel-66.xml similarity index 100% rename from css/selectors/css3-modsel-66.xml rename to css/selectors/built-tests/css3-modsel-66.xml diff --git a/css/selectors/css3-modsel-66b.xml b/css/selectors/built-tests/css3-modsel-66b.xml similarity index 100% rename from css/selectors/css3-modsel-66b.xml rename to css/selectors/built-tests/css3-modsel-66b.xml diff --git a/css/selectors/css3-modsel-67.xml b/css/selectors/built-tests/css3-modsel-67.xml similarity index 100% rename from css/selectors/css3-modsel-67.xml rename to css/selectors/built-tests/css3-modsel-67.xml diff --git a/css/selectors/css3-modsel-68.xml b/css/selectors/built-tests/css3-modsel-68.xml similarity index 100% rename from css/selectors/css3-modsel-68.xml rename to css/selectors/built-tests/css3-modsel-68.xml diff --git a/css/selectors/css3-modsel-69.xml b/css/selectors/built-tests/css3-modsel-69.xml similarity index 100% rename from css/selectors/css3-modsel-69.xml rename to css/selectors/built-tests/css3-modsel-69.xml diff --git a/css/selectors/css3-modsel-7.xml b/css/selectors/built-tests/css3-modsel-7.xml similarity index 100% rename from css/selectors/css3-modsel-7.xml rename to css/selectors/built-tests/css3-modsel-7.xml diff --git a/css/selectors/css3-modsel-70.xml b/css/selectors/built-tests/css3-modsel-70.xml similarity index 100% rename from css/selectors/css3-modsel-70.xml rename to css/selectors/built-tests/css3-modsel-70.xml diff --git a/css/selectors/css3-modsel-72.xml b/css/selectors/built-tests/css3-modsel-72.xml similarity index 100% rename from css/selectors/css3-modsel-72.xml rename to css/selectors/built-tests/css3-modsel-72.xml diff --git a/css/selectors/css3-modsel-72b.xml b/css/selectors/built-tests/css3-modsel-72b.xml similarity index 100% rename from css/selectors/css3-modsel-72b.xml rename to css/selectors/built-tests/css3-modsel-72b.xml diff --git a/css/selectors/css3-modsel-73.xml b/css/selectors/built-tests/css3-modsel-73.xml similarity index 100% rename from css/selectors/css3-modsel-73.xml rename to css/selectors/built-tests/css3-modsel-73.xml diff --git a/css/selectors/css3-modsel-73b.xml b/css/selectors/built-tests/css3-modsel-73b.xml similarity index 100% rename from css/selectors/css3-modsel-73b.xml rename to css/selectors/built-tests/css3-modsel-73b.xml diff --git a/css/selectors/css3-modsel-74.xml b/css/selectors/built-tests/css3-modsel-74.xml similarity index 100% rename from css/selectors/css3-modsel-74.xml rename to css/selectors/built-tests/css3-modsel-74.xml diff --git a/css/selectors/css3-modsel-74b.xml b/css/selectors/built-tests/css3-modsel-74b.xml similarity index 100% rename from css/selectors/css3-modsel-74b.xml rename to css/selectors/built-tests/css3-modsel-74b.xml diff --git a/css/selectors/css3-modsel-75.xml b/css/selectors/built-tests/css3-modsel-75.xml similarity index 100% rename from css/selectors/css3-modsel-75.xml rename to css/selectors/built-tests/css3-modsel-75.xml diff --git a/css/selectors/css3-modsel-75b.xml b/css/selectors/built-tests/css3-modsel-75b.xml similarity index 100% rename from css/selectors/css3-modsel-75b.xml rename to css/selectors/built-tests/css3-modsel-75b.xml diff --git a/css/selectors/css3-modsel-76.xml b/css/selectors/built-tests/css3-modsel-76.xml similarity index 100% rename from css/selectors/css3-modsel-76.xml rename to css/selectors/built-tests/css3-modsel-76.xml diff --git a/css/selectors/css3-modsel-76b.xml b/css/selectors/built-tests/css3-modsel-76b.xml similarity index 100% rename from css/selectors/css3-modsel-76b.xml rename to css/selectors/built-tests/css3-modsel-76b.xml diff --git a/css/selectors/css3-modsel-77.xml b/css/selectors/built-tests/css3-modsel-77.xml similarity index 100% rename from css/selectors/css3-modsel-77.xml rename to css/selectors/built-tests/css3-modsel-77.xml diff --git a/css/selectors/css3-modsel-77b.xml b/css/selectors/built-tests/css3-modsel-77b.xml similarity index 100% rename from css/selectors/css3-modsel-77b.xml rename to css/selectors/built-tests/css3-modsel-77b.xml diff --git a/css/selectors/css3-modsel-78.xml b/css/selectors/built-tests/css3-modsel-78.xml similarity index 100% rename from css/selectors/css3-modsel-78.xml rename to css/selectors/built-tests/css3-modsel-78.xml diff --git a/css/selectors/css3-modsel-78b.xml b/css/selectors/built-tests/css3-modsel-78b.xml similarity index 100% rename from css/selectors/css3-modsel-78b.xml rename to css/selectors/built-tests/css3-modsel-78b.xml diff --git a/css/selectors/css3-modsel-79.xml b/css/selectors/built-tests/css3-modsel-79.xml similarity index 100% rename from css/selectors/css3-modsel-79.xml rename to css/selectors/built-tests/css3-modsel-79.xml diff --git a/css/selectors/css3-modsel-7b.xml b/css/selectors/built-tests/css3-modsel-7b.xml similarity index 100% rename from css/selectors/css3-modsel-7b.xml rename to css/selectors/built-tests/css3-modsel-7b.xml diff --git a/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system b/css/selectors/built-tests/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system similarity index 100% rename from css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system rename to css/selectors/built-tests/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system diff --git a/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system b/css/selectors/built-tests/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system similarity index 100% rename from css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system rename to css/selectors/built-tests/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system diff --git a/css/selectors/css3-modsel-8.xml b/css/selectors/built-tests/css3-modsel-8.xml similarity index 100% rename from css/selectors/css3-modsel-8.xml rename to css/selectors/built-tests/css3-modsel-8.xml diff --git a/css/selectors/css3-modsel-80.xml b/css/selectors/built-tests/css3-modsel-80.xml similarity index 100% rename from css/selectors/css3-modsel-80.xml rename to css/selectors/built-tests/css3-modsel-80.xml diff --git a/css/selectors/css3-modsel-81.xml b/css/selectors/built-tests/css3-modsel-81.xml similarity index 100% rename from css/selectors/css3-modsel-81.xml rename to css/selectors/built-tests/css3-modsel-81.xml diff --git a/css/selectors/css3-modsel-81b.xml b/css/selectors/built-tests/css3-modsel-81b.xml similarity index 100% rename from css/selectors/css3-modsel-81b.xml rename to css/selectors/built-tests/css3-modsel-81b.xml diff --git a/css/selectors/css3-modsel-82.xml b/css/selectors/built-tests/css3-modsel-82.xml similarity index 100% rename from css/selectors/css3-modsel-82.xml rename to css/selectors/built-tests/css3-modsel-82.xml diff --git a/css/selectors/css3-modsel-82b.xml b/css/selectors/built-tests/css3-modsel-82b.xml similarity index 100% rename from css/selectors/css3-modsel-82b.xml rename to css/selectors/built-tests/css3-modsel-82b.xml diff --git a/css/selectors/css3-modsel-83.xml b/css/selectors/built-tests/css3-modsel-83.xml similarity index 100% rename from css/selectors/css3-modsel-83.xml rename to css/selectors/built-tests/css3-modsel-83.xml diff --git a/css/selectors/css3-modsel-84.xml-disabled-contains-removed b/css/selectors/built-tests/css3-modsel-84.xml-disabled-contains-removed similarity index 100% rename from css/selectors/css3-modsel-84.xml-disabled-contains-removed rename to css/selectors/built-tests/css3-modsel-84.xml-disabled-contains-removed diff --git a/css/selectors/css3-modsel-84b.xml-disabled-contains-removed b/css/selectors/built-tests/css3-modsel-84b.xml-disabled-contains-removed similarity index 100% rename from css/selectors/css3-modsel-84b.xml-disabled-contains-removed rename to css/selectors/built-tests/css3-modsel-84b.xml-disabled-contains-removed diff --git a/css/selectors/css3-modsel-85.xml-disabled-contains-removed b/css/selectors/built-tests/css3-modsel-85.xml-disabled-contains-removed similarity index 100% rename from css/selectors/css3-modsel-85.xml-disabled-contains-removed rename to css/selectors/built-tests/css3-modsel-85.xml-disabled-contains-removed diff --git a/css/selectors/css3-modsel-86.xml b/css/selectors/built-tests/css3-modsel-86.xml similarity index 100% rename from css/selectors/css3-modsel-86.xml rename to css/selectors/built-tests/css3-modsel-86.xml diff --git a/css/selectors/css3-modsel-87.xml b/css/selectors/built-tests/css3-modsel-87.xml similarity index 100% rename from css/selectors/css3-modsel-87.xml rename to css/selectors/built-tests/css3-modsel-87.xml diff --git a/css/selectors/css3-modsel-87b.xml b/css/selectors/built-tests/css3-modsel-87b.xml similarity index 100% rename from css/selectors/css3-modsel-87b.xml rename to css/selectors/built-tests/css3-modsel-87b.xml diff --git a/css/selectors/css3-modsel-88.xml b/css/selectors/built-tests/css3-modsel-88.xml similarity index 100% rename from css/selectors/css3-modsel-88.xml rename to css/selectors/built-tests/css3-modsel-88.xml diff --git a/css/selectors/css3-modsel-88b.xml b/css/selectors/built-tests/css3-modsel-88b.xml similarity index 100% rename from css/selectors/css3-modsel-88b.xml rename to css/selectors/built-tests/css3-modsel-88b.xml diff --git a/css/selectors/css3-modsel-89.xml b/css/selectors/built-tests/css3-modsel-89.xml similarity index 100% rename from css/selectors/css3-modsel-89.xml rename to css/selectors/built-tests/css3-modsel-89.xml diff --git a/css/selectors/css3-modsel-9.xml b/css/selectors/built-tests/css3-modsel-9.xml similarity index 100% rename from css/selectors/css3-modsel-9.xml rename to css/selectors/built-tests/css3-modsel-9.xml diff --git a/css/selectors/css3-modsel-90.xml b/css/selectors/built-tests/css3-modsel-90.xml similarity index 100% rename from css/selectors/css3-modsel-90.xml rename to css/selectors/built-tests/css3-modsel-90.xml diff --git a/css/selectors/css3-modsel-90b.xml b/css/selectors/built-tests/css3-modsel-90b.xml similarity index 100% rename from css/selectors/css3-modsel-90b.xml rename to css/selectors/built-tests/css3-modsel-90b.xml diff --git a/css/selectors/css3-modsel-91.xml b/css/selectors/built-tests/css3-modsel-91.xml similarity index 100% rename from css/selectors/css3-modsel-91.xml rename to css/selectors/built-tests/css3-modsel-91.xml diff --git a/css/selectors/css3-modsel-92.xml b/css/selectors/built-tests/css3-modsel-92.xml similarity index 100% rename from css/selectors/css3-modsel-92.xml rename to css/selectors/built-tests/css3-modsel-92.xml diff --git a/css/selectors/css3-modsel-93.xml b/css/selectors/built-tests/css3-modsel-93.xml similarity index 100% rename from css/selectors/css3-modsel-93.xml rename to css/selectors/built-tests/css3-modsel-93.xml diff --git a/css/selectors/css3-modsel-94.xml b/css/selectors/built-tests/css3-modsel-94.xml similarity index 100% rename from css/selectors/css3-modsel-94.xml rename to css/selectors/built-tests/css3-modsel-94.xml diff --git a/css/selectors/css3-modsel-94b.xml b/css/selectors/built-tests/css3-modsel-94b.xml similarity index 100% rename from css/selectors/css3-modsel-94b.xml rename to css/selectors/built-tests/css3-modsel-94b.xml diff --git a/css/selectors/css3-modsel-95.xml b/css/selectors/built-tests/css3-modsel-95.xml similarity index 100% rename from css/selectors/css3-modsel-95.xml rename to css/selectors/built-tests/css3-modsel-95.xml diff --git a/css/selectors/css3-modsel-96.xml b/css/selectors/built-tests/css3-modsel-96.xml similarity index 100% rename from css/selectors/css3-modsel-96.xml rename to css/selectors/built-tests/css3-modsel-96.xml diff --git a/css/selectors/css3-modsel-96b.xml b/css/selectors/built-tests/css3-modsel-96b.xml similarity index 100% rename from css/selectors/css3-modsel-96b.xml rename to css/selectors/built-tests/css3-modsel-96b.xml diff --git a/css/selectors/css3-modsel-97.xml b/css/selectors/built-tests/css3-modsel-97.xml similarity index 100% rename from css/selectors/css3-modsel-97.xml rename to css/selectors/built-tests/css3-modsel-97.xml diff --git a/css/selectors/css3-modsel-97b.xml b/css/selectors/built-tests/css3-modsel-97b.xml similarity index 100% rename from css/selectors/css3-modsel-97b.xml rename to css/selectors/built-tests/css3-modsel-97b.xml diff --git a/css/selectors/css3-modsel-98.xml b/css/selectors/built-tests/css3-modsel-98.xml similarity index 100% rename from css/selectors/css3-modsel-98.xml rename to css/selectors/built-tests/css3-modsel-98.xml diff --git a/css/selectors/css3-modsel-98b.xml b/css/selectors/built-tests/css3-modsel-98b.xml similarity index 100% rename from css/selectors/css3-modsel-98b.xml rename to css/selectors/built-tests/css3-modsel-98b.xml diff --git a/css/selectors/css3-modsel-99.xml b/css/selectors/built-tests/css3-modsel-99.xml similarity index 100% rename from css/selectors/css3-modsel-99.xml rename to css/selectors/built-tests/css3-modsel-99.xml diff --git a/css/selectors/css3-modsel-99b.xml b/css/selectors/built-tests/css3-modsel-99b.xml similarity index 100% rename from css/selectors/css3-modsel-99b.xml rename to css/selectors/built-tests/css3-modsel-99b.xml diff --git a/css/selectors/css3-modsel-d1.xml b/css/selectors/built-tests/css3-modsel-d1.xml similarity index 100% rename from css/selectors/css3-modsel-d1.xml rename to css/selectors/built-tests/css3-modsel-d1.xml diff --git a/css/selectors/css3-modsel-d1b.xml b/css/selectors/built-tests/css3-modsel-d1b.xml similarity index 100% rename from css/selectors/css3-modsel-d1b.xml rename to css/selectors/built-tests/css3-modsel-d1b.xml diff --git a/css/selectors/css3-modsel-d2.xml b/css/selectors/built-tests/css3-modsel-d2.xml similarity index 100% rename from css/selectors/css3-modsel-d2.xml rename to css/selectors/built-tests/css3-modsel-d2.xml diff --git a/css/selectors/css3-modsel-d3.xml b/css/selectors/built-tests/css3-modsel-d3.xml similarity index 100% rename from css/selectors/css3-modsel-d3.xml rename to css/selectors/built-tests/css3-modsel-d3.xml diff --git a/css/selectors/css3-modsel-d4.xml b/css/selectors/built-tests/css3-modsel-d4.xml similarity index 100% rename from css/selectors/css3-modsel-d4.xml rename to css/selectors/built-tests/css3-modsel-d4.xml diff --git a/css/selectors/css3-modsel-d5.xml-removed b/css/selectors/built-tests/css3-modsel-d5.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5.xml-removed rename to css/selectors/built-tests/css3-modsel-d5.xml-removed diff --git a/css/selectors/css3-modsel-d5a.xml-removed b/css/selectors/built-tests/css3-modsel-d5a.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5a.xml-removed rename to css/selectors/built-tests/css3-modsel-d5a.xml-removed diff --git a/css/selectors/css3-modsel-d5b.xml-removed b/css/selectors/built-tests/css3-modsel-d5b.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5b.xml-removed rename to css/selectors/built-tests/css3-modsel-d5b.xml-removed diff --git a/css/selectors/css3-modsel-d5c.xml-removed b/css/selectors/built-tests/css3-modsel-d5c.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5c.xml-removed rename to css/selectors/built-tests/css3-modsel-d5c.xml-removed diff --git a/css/selectors/css3-modsel-d5d.xml-removed b/css/selectors/built-tests/css3-modsel-d5d.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5d.xml-removed rename to css/selectors/built-tests/css3-modsel-d5d.xml-removed diff --git a/css/selectors/css3-modsel-d5e.xml-removed b/css/selectors/built-tests/css3-modsel-d5e.xml-removed similarity index 100% rename from css/selectors/css3-modsel-d5e.xml-removed rename to css/selectors/built-tests/css3-modsel-d5e.xml-removed diff --git a/css/selectors/generate.pl b/css/selectors/built-tests/generate.pl similarity index 100% rename from css/selectors/generate.pl rename to css/selectors/built-tests/generate.pl diff --git a/css/selectors/htaccess b/css/selectors/built-tests/htaccess similarity index 100% rename from css/selectors/htaccess rename to css/selectors/built-tests/htaccess diff --git a/css/selectors/html-full.css b/css/selectors/built-tests/html-full.css similarity index 100% rename from css/selectors/html-full.css rename to css/selectors/built-tests/html-full.css diff --git a/css/selectors/html-shell.css b/css/selectors/built-tests/html-shell.css similarity index 100% rename from css/selectors/html-shell.css rename to css/selectors/built-tests/html-shell.css diff --git a/css/selectors/tng.css b/css/selectors/built-tests/tng.css similarity index 100% rename from css/selectors/tng.css rename to css/selectors/built-tests/tng.css diff --git a/css/selectors/utils/generators.pm b/css/selectors/built-tests/utils/generators.pm similarity index 100% rename from css/selectors/utils/generators.pm rename to css/selectors/built-tests/utils/generators.pm diff --git a/css/selectors/utils/helpers.pm b/css/selectors/built-tests/utils/helpers.pm similarity index 100% rename from css/selectors/utils/helpers.pm rename to css/selectors/built-tests/utils/helpers.pm diff --git a/css/selectors/utils/parser.pm b/css/selectors/built-tests/utils/parser.pm similarity index 100% rename from css/selectors/utils/parser.pm rename to css/selectors/built-tests/utils/parser.pm diff --git a/css/selectors/xhtml-full.css b/css/selectors/built-tests/xhtml-full.css similarity index 100% rename from css/selectors/xhtml-full.css rename to css/selectors/built-tests/xhtml-full.css diff --git a/css/selectors/xhtml-shell.css b/css/selectors/built-tests/xhtml-shell.css similarity index 100% rename from css/selectors/xhtml-shell.css rename to css/selectors/built-tests/xhtml-shell.css diff --git a/css/selectors/xml-full.css b/css/selectors/built-tests/xml-full.css similarity index 100% rename from css/selectors/xml-full.css rename to css/selectors/built-tests/xml-full.css diff --git a/css/selectors/xml-shell.css b/css/selectors/built-tests/xml-shell.css similarity index 100% rename from css/selectors/xml-shell.css rename to css/selectors/built-tests/xml-shell.css From 258680cc7f41341bfbbd748859392f5e42160fe6 Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Fri, 31 Mar 2017 17:12:00 +0200 Subject: [PATCH 037/235] Strip selectors3 build system back to only generate XHTML unadorned tests This makes us generate ~350 files instead of ~18k --- css/selectors/built-tests/generate.pl | 21 +------------------ css/selectors/built-tests/utils/generators.pm | 14 ------------- css/selectors/built-tests/utils/helpers.pm | 14 ++----------- 3 files changed, 3 insertions(+), 46 deletions(-) diff --git a/css/selectors/built-tests/generate.pl b/css/selectors/built-tests/generate.pl index 812dd7a1126cce..c8a49e7f0a4b8c 100644 --- a/css/selectors/built-tests/generate.pl +++ b/css/selectors/built-tests/generate.pl @@ -76,26 +76,7 @@ package main; # generate mini test and CSS if needed &utils::generators::generateMiniTest($destinationType, \@destinationTests, \%cache, $testIndex); } - # generate flat tests and shells - foreach my $testType (split ' ', $utils::helpers::types{'TEST_TYPES'}) { - my @finalTestList = &utils::helpers::shortlistTestsForTypes($testType, \@destinationTests, \%cache); - # generate test type index - &utils::generators::generateTestTypeIndex($destinationType, $testType, \@finalTestList, \%cache); # points to flat test index and each shell index - # generate flat test index - &utils::generators::generateFlatTestIndex($destinationType, $testType, \@finalTestList, \%cache); # points to flat tests - foreach my $shell (split ' ', $utils::helpers::types{'SHELL_TYPES'}) { - # generate shell index - &utils::generators::generateShellTestIndex($destinationType, $testType, $shell, \@finalTestList, \%cache); # points to shell tests - } - foreach my $testIndex (0..$#finalTestList) { - # generate flat test - &utils::generators::generateFlatTest($destinationType, $testType, \@finalTestList, \%cache, $testIndex); - foreach my $shell (split ' ', $utils::helpers::types{'SHELL_TYPES'}) { - # generate shell - &utils::generators::generateShell($destinationType, $testType, $shell, \@finalTestList, \%cache, $testIndex); - } - } - } + } # generate latest changes log foreach my $test (sort { $a->{date} cmp $b->{date} } values %cache) { diff --git a/css/selectors/built-tests/utils/generators.pm b/css/selectors/built-tests/utils/generators.pm index 987fcddd101341..4dc47e3ac03c87 100644 --- a/css/selectors/built-tests/utils/generators.pm +++ b/css/selectors/built-tests/utils/generators.pm @@ -113,20 +113,6 @@ sub generateSubIndex { # points to mini test index and all indexes for this test

'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Test Index

The '.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' tests are available in several variants.

-

Tests With Navigation Aids

-

Each category of test is available using several different harnesses. The name of the harness describes how the test markup is contained within it, for example the Xlink embed case uses an XLink with the show axis set to embed.

- -

Unadorned Tests

    '; foreach my $test (@$testList) { print FILE "\n
  • '.&utils::helpers::escape($testDatabase->{$test}->{'def'})." (#".&utils::helpers::escape($testDatabase->{$test}->{'number'}).")
  • "; diff --git a/css/selectors/built-tests/utils/helpers.pm b/css/selectors/built-tests/utils/helpers.pm index 30c35d3425a07e..00e91d28750098 100644 --- a/css/selectors/built-tests/utils/helpers.pm +++ b/css/selectors/built-tests/utils/helpers.pm @@ -7,27 +7,17 @@ use strict; # add code to the Makefile, the parser, the shortlist functions in # this file, and the generators in the generator.pm module. %utils::helpers::types = ( - 'DESTINATION_TYPES' => 'xhtml html xml', # explicitly listed in Makefile, shortlister and generator - 'SHELL_TYPES' => 'xhtml_iframe xhtml_object xhtml_frames html_iframe html_object html_frames xlink_embed tng', # explicitly listed in generator and just below + 'DESTINATION_TYPES' => 'xhtml', # explicitly listed in Makefile, shortlister and generator + 'SHELL_TYPES' => '', # explicitly listed in generator and just below 'TEST_TYPES' => 'full static history interactive', # explicitly listed in shortlister, generator, and just below 'TEST_TYPES' => 'full static history interactive dynamic', # explicitly listed in shortlister, generator, and just below ); %utils::helpers::DestinationTypeTitles = ( 'xhtml' => 'XHTML', - 'html' => 'HTML', - 'xml' => 'XML', ); %utils::helpers::ShellTypeTitles = ( - 'xhtml_iframe' => 'XHTML - diff --git a/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js new file mode 100644 index 00000000000000..0134da24f07bb4 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js @@ -0,0 +1,29 @@ +// Historically, document.open() created an entry in the session history so +// that the original page could be seen by going back. Test that this behavior +// no longer occurs. +// +// This test uses window.open() for variety, as most other tests in this +// directory use document.open(). An diff --git a/wasm/serialization/resources/nested-iframe-2.html b/wasm/serialization/resources/nested-iframe-2.html new file mode 100644 index 00000000000000..fad52ce9de3977 --- /dev/null +++ b/wasm/serialization/resources/nested-iframe-2.html @@ -0,0 +1,5 @@ + + +Nesting level 2 + + diff --git a/wasm/serialization/resources/nested-iframe-3.html b/wasm/serialization/resources/nested-iframe-3.html new file mode 100644 index 00000000000000..7971022b2cdc31 --- /dev/null +++ b/wasm/serialization/resources/nested-iframe-3.html @@ -0,0 +1,5 @@ + + +Nesting level 3 + + diff --git a/wasm/serialization/resources/nested-iframe-4-incrementer.html b/wasm/serialization/resources/nested-iframe-4-incrementer.html new file mode 100644 index 00000000000000..f419f4bc36cdff --- /dev/null +++ b/wasm/serialization/resources/nested-iframe-4-incrementer.html @@ -0,0 +1,11 @@ + + +A test page that is sent a WebAssembly Module, nested 4 levels deep in iframes + + + + diff --git a/wasm/serialization/resources/serviceworker-failure.js b/wasm/serialization/resources/serviceworker-failure.js new file mode 100644 index 00000000000000..39796f9d94a39d --- /dev/null +++ b/wasm/serialization/resources/serviceworker-failure.js @@ -0,0 +1,34 @@ +// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/. +"use strict"; +self.importScripts("/resources/testharness.js"); +self.importScripts("./create-empty-wasm-module.js"); + +let state = "start in worker"; + +self.onmessage = e => { + if (e.data === "start in window") { + assert_equals(state, "start in worker"); + e.source.postMessage(state); + state = "we are expecting a messageerror due to the window sending us a WebAssembly.Module"; + } else if (e.data === "we are expecting a messageerror due to the worker sending us a WebAssembly.Module") { + assert_equals(state, "onmessageerror was received in worker"); + e.source.postMessage(createEmptyWasmModule()); + state = "done in worker"; + } else { + e.source.postMessage(`worker onmessage was reached when in state "${state}" and data ${e.data}`); + } +}; + +self.onmessageerror = e => { + if (state === "we are expecting a messageerror due to the window sending us a WebAssembly.Module") { + assert_equals(e.data, null, "data"); + assert_equals(e.origin, self.origin, "origin"); + assert_not_equals(e.source, null, "source"); + assert_equals(e.ports.length, 0, "ports length"); + + state = "onmessageerror was received in worker"; + e.source.postMessage(state); + } else { + e.source.postMessage(`worker onmessageerror was reached when in state "${state}" and data ${e.data}`); + } +}; diff --git a/wasm/serialization/resources/sharedworker-failure.js b/wasm/serialization/resources/sharedworker-failure.js new file mode 100644 index 00000000000000..854c70b9e84e6e --- /dev/null +++ b/wasm/serialization/resources/sharedworker-failure.js @@ -0,0 +1,21 @@ +importScripts("./test-incrementer.js"); +importScripts("./create-empty-wasm-module.js"); + +let state = "send-sw-failure" +onconnect = initialE => { + let port = initialE.source; + port.postMessage(state) + port.onmessage = e => { + if(state === "" && e.data === "send-window-failure") { + port.postMessage(createEmptyWasmModule()) + } else { + port.postMessage("failure") + } + } + port.onmessageerror = e => { + if(state === "send-sw-failure") { + port.postMessage("send-sw-failure-success") + state = "" + } + } +} diff --git a/wasm/serialization/resources/test-incrementer.js b/wasm/serialization/resources/test-incrementer.js new file mode 100644 index 00000000000000..65cb33227a3737 --- /dev/null +++ b/wasm/serialization/resources/test-incrementer.js @@ -0,0 +1,57 @@ +// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/. +// +// This file is simplified from the one there, because it only tests that the +// module can be passed and that functions can be run. The SharedArrayBuffer +// version also tests that the memory is shared between the agents. + +"use strict"; + +function createWasmModule() { + return fetch('incrementer.wasm') + .then(response => { + if (!response.ok) + throw new Error(response.statusText); + return response.arrayBuffer(); + }) + .then(WebAssembly.compile); +} + +function testModule(module) { + let instance = new WebAssembly.Instance(module); + let increment = instance.exports["increment"]; + assert_equals(typeof increment, "function", `The type of the increment export should be "function", got ${typeof increment}`); + let result = increment(42); + assert_equals(result, 43, `increment(42) should be 43, got ${result}`); +} + +self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin) => { + return createWasmModule().then(module => { + return new Promise(resolve => { + + whereToListen.onmessage = t.step_func(({ data }) => { + switch (data.message) { + case "module received": { + testModule(data.module); + resolve(); + break; + } + } + }); + + whereToSend.postMessage({ message: "send module", module }, origin); + }); + }); +}; + +self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { + whereToListen.onmessage = ({ data }) => { + switch (data.message) { + case "send module": { + let module = data.module; + testModule(data.module); + whereToSendBackTo.postMessage({ message: "module received", module }, origin); + break; + } + } + }; +}; diff --git a/wasm/serialization/serialization-via-history.html b/wasm/serialization/serialization-via-history.html new file mode 100644 index 00000000000000..35dc17b6701fad --- /dev/null +++ b/wasm/serialization/serialization-via-history.html @@ -0,0 +1,34 @@ + + + +WebAssembly.Module cloning via history's methods invoking StructuredSerializeForStorage + + + + + diff --git a/wasm/serialization/serialization-via-idb.any.js b/wasm/serialization/serialization-via-idb.any.js new file mode 100644 index 00000000000000..1d861c3d3aa107 --- /dev/null +++ b/wasm/serialization/serialization-via-idb.any.js @@ -0,0 +1,45 @@ +// META: script=/IndexedDB/support.js +"use strict"; + +function createEmptyWasmModule() { + return new WebAssembly.Module( + new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00])); +} + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: createEmptyWasmModule() }); + }); + t.done(); + }; +}, "WebAssembly.Module cloning via IndexedDB: basic case"); + +async_test(t => { + const openReq = createdb(t); + + openReq.onupgradeneeded = e => { + const db = e.target.result; + const store = db.createObjectStore("store", { keyPath: "key" }); + + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + store.put({ key: 1, property: [ + { get x() { getter1Called = true; return 5; } }, + createEmptyWasmModule(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called"); + assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called"); + t.done(); + }; +}, "WebAssembly.Module cloning via the IndexedDB: is interleaved correctly"); diff --git a/wasm/serialization/serialization-via-notifications-api.any.js b/wasm/serialization/serialization-via-notifications-api.any.js new file mode 100644 index 00000000000000..84105651d3b531 --- /dev/null +++ b/wasm/serialization/serialization-via-notifications-api.any.js @@ -0,0 +1,28 @@ +"use strict"; + +function createEmptyWasmModule() { + return new WebAssembly.Module( + new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00])); +} + +test(() => { + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: createEmptyWasmModule() }); + }) +}, "WebAssembly.Module cloning via the Notifications API's data member: basic case"); + +test(() => { + let getter1Called = false; + let getter2Called = false; + + assert_throws("DataCloneError", () => { + new Notification("Bob: Hi", { data: [ + { get x() { getter1Called = true; return 5; } }, + createEmptyWasmModule(), + { get x() { getter2Called = true; return 5; } } + ]}); + }); + + assert_true(getter1Called, "The getter before the SAB must have been called"); + assert_false(getter2Called, "The getter after the SAB must not have been called"); +}, "WebAssembly.Module cloning via the Notifications API's data member: is interleaved correctly"); diff --git a/wasm/serialization/window-domain-success.sub.html b/wasm/serialization/window-domain-success.sub.html new file mode 100644 index 00000000000000..51d4c5cb0ea0c0 --- /dev/null +++ b/wasm/serialization/window-domain-success.sub.html @@ -0,0 +1,26 @@ + + + +Structured cloning of WebAssembly.Module into same-origin-domain windows + + + + +
    + + diff --git a/wasm/serialization/window-messagechannel-success.html b/wasm/serialization/window-messagechannel-success.html new file mode 100644 index 00000000000000..e686c8113561d9 --- /dev/null +++ b/wasm/serialization/window-messagechannel-success.html @@ -0,0 +1,21 @@ + + + +Structured cloning of WebAssembly.Module using MessageChannel + + + + +
    + + diff --git a/wasm/serialization/window-serviceworker-failure.https.html b/wasm/serialization/window-serviceworker-failure.https.html new file mode 100644 index 00000000000000..97c5a1decdb853 --- /dev/null +++ b/wasm/serialization/window-serviceworker-failure.https.html @@ -0,0 +1,54 @@ + + + +WebAssembly.Module cannot cross agent clusters, service worker edition + + + + + + diff --git a/wasm/serialization/window-sharedworker-failure.html b/wasm/serialization/window-sharedworker-failure.html new file mode 100644 index 00000000000000..667e985a30b53c --- /dev/null +++ b/wasm/serialization/window-sharedworker-failure.html @@ -0,0 +1,33 @@ + + +WebAssembly.Modules cannot cross agent clusters, shared worker edition + + + + diff --git a/wasm/serialization/window-similar-but-cross-origin-success.sub.html b/wasm/serialization/window-similar-but-cross-origin-success.sub.html new file mode 100644 index 00000000000000..070cf0a49a8f0c --- /dev/null +++ b/wasm/serialization/window-similar-but-cross-origin-success.sub.html @@ -0,0 +1,25 @@ + + + +Structured cloning of WebAssembly.Module to similar-origin, but not same-origin, windows + + + + +
    + + diff --git a/wasm/serialization/window-simple-success.html b/wasm/serialization/window-simple-success.html new file mode 100644 index 00000000000000..6f2ccf465e93a1 --- /dev/null +++ b/wasm/serialization/window-simple-success.html @@ -0,0 +1,57 @@ + + + +Structured cloning of WebAssembly.Module: simple success cases that don't need dedicated files + + + + +
    + + diff --git a/wasm/wasm_local_iframe_test.html b/wasm/wasm_local_iframe_test.html deleted file mode 100644 index 0f4fbd0c7191ec..00000000000000 --- a/wasm/wasm_local_iframe_test.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/wasm/wasm_serialization_tests.html b/wasm/wasm_serialization_tests.html deleted file mode 100644 index 49766c770525bc..00000000000000 --- a/wasm/wasm_serialization_tests.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/wasm/wasm_serialization_tests.js b/wasm/wasm_serialization_tests.js deleted file mode 100644 index 3cc4166168b08f..00000000000000 --- a/wasm/wasm_serialization_tests.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -function TestInstantiateInWorker() { - return createWasmModule() - .then((mod) => { - var worker = new Worker("wasm_serialization_worker.js"); - return new Promise((resolve, reject) => { - worker.postMessage(mod); - worker.onmessage = function(event) { - resolve(event.data); - } - }); - }) - .then(data => assert_equals(data, 43)) - .catch(error => assert_unreached(error)); -} diff --git a/wasm/wasm_serialization_worker.js b/wasm/wasm_serialization_worker.js deleted file mode 100644 index 3361ed73951770..00000000000000 --- a/wasm/wasm_serialization_worker.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -onmessage = function(e) { - var compiled_module = e.data; - var instance = new WebAssembly.Instance(compiled_module); - if (instance === undefined) { - postMessage("error!"); - return; - } - var entrypoint = instance.exports["increment"]; - - if (typeof entrypoint !== "function") { - postMessage("error!"); - return; - } - - var ret = entrypoint(42); - postMessage(ret); -} diff --git a/wasm/wasm_service_worker_test.https.html b/wasm/wasm_service_worker_test.https.html deleted file mode 100644 index cced4b8f6ecdaa..00000000000000 --- a/wasm/wasm_service_worker_test.https.html +++ /dev/null @@ -1,23 +0,0 @@ - -Service Worker: postMessage with wasm - - - - - From a76462c2d6aa64cd5af8623c787205f0ee8bdc10 Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Tue, 28 Aug 2018 13:57:49 +0000 Subject: [PATCH 090/235] [wdspec] Add basic tests for "Get Element rect". bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1486456 gecko-commit: 4c623a756c06017d341d956ce5a8633baf3f7fc8 gecko-integration-branch: mozilla-inbound gecko-reviewers: ato --- webdriver/tests/get_element_rect/__init__.py | 10 ++ webdriver/tests/get_element_rect/get.py | 41 ++++++ .../tests/get_element_rect/user_prompts.py | 122 ++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 webdriver/tests/get_element_rect/__init__.py create mode 100644 webdriver/tests/get_element_rect/get.py create mode 100644 webdriver/tests/get_element_rect/user_prompts.py diff --git a/webdriver/tests/get_element_rect/__init__.py b/webdriver/tests/get_element_rect/__init__.py new file mode 100644 index 00000000000000..abf1a913675171 --- /dev/null +++ b/webdriver/tests/get_element_rect/__init__.py @@ -0,0 +1,10 @@ +def retrieve_element_rect(session, element): + return session.execute_script(""" + let rect = arguments[0].getBoundingClientRect(); + return { + x: rect.left + window.pageXOffset, + y: rect.top + window.pageYOffset, + width: rect.width, + height: rect.height, + }; + """, args=(element,)) diff --git a/webdriver/tests/get_element_rect/get.py b/webdriver/tests/get_element_rect/get.py new file mode 100644 index 00000000000000..433e2f6bf8b428 --- /dev/null +++ b/webdriver/tests/get_element_rect/get.py @@ -0,0 +1,41 @@ +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + +from . import retrieve_element_rect + + +def get_element_rect(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/rect".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = get_element_rect(session, "foo") + assert_error(response, "no such window") + + +def test_element_not_found(session): + result = get_element_rect(session, "foo") + assert_error(result, "no such element") + + +def test_element_stale(session): + session.url = inline("") + element = session.find.css("input", all=False) + session.refresh() + + result = get_element_rect(session, element.id) + assert_error(result, "stale element reference") + + +def test_basic(session): + session.url = inline("") + element = session.find.css("input", all=False) + + result = get_element_rect(session, element.id) + assert_success(result, retrieve_element_rect(session, element)) diff --git a/webdriver/tests/get_element_rect/user_prompts.py b/webdriver/tests/get_element_rect/user_prompts.py new file mode 100644 index 00000000000000..ec1047bd3893d5 --- /dev/null +++ b/webdriver/tests/get_element_rect/user_prompts.py @@ -0,0 +1,122 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_error, assert_success, assert_dialog_handled +from tests.support.inline import inline + +from . import retrieve_element_rect + + +def get_element_rect(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/rect".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +@pytest.fixture +def check_user_prompt_closed_without_exception(session, create_dialog): + def check_user_prompt_closed_without_exception(dialog_type, retval): + session.url = inline("") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_success(response, retrieve_element_rect(session, element)) + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_without_exception + + +@pytest.fixture +def check_user_prompt_closed_with_exception(session, create_dialog): + def check_user_prompt_closed_with_exception(dialog_type, retval): + session.url = inline("") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_error(response, "unexpected alert open") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_with_exception + + +@pytest.fixture +def check_user_prompt_not_closed_but_exception(session, create_dialog): + def check_user_prompt_not_closed_but_exception(dialog_type): + session.url = inline("") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_rect(session, element.id) + assert_error(response, "unexpected alert open") + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_but_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type): + check_user_prompt_not_closed_but_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_default(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) From 2c03d31aa004fd31cf1e66589c5f96d2ec83c485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Tue, 28 Aug 2018 16:45:04 +0000 Subject: [PATCH 091/235] Clip filter effects at the stacking context level. Much like mask images. This is the easy fix, for now. We need to override the ASR clips with Nothing() because we don't really want children of this display item to get the parent filter applied. It's not only redundant, but also may be incorrect if the mask image is not opaque for example (maybe WR should prevent that?). This was caught by layout/reftests/w3c-css/submitted/masking/mask-opacity-1a.html Differential Revision: https://phabricator.services.mozilla.com/D4351 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1459065 gecko-commit: ccf47d95dc9b3b9bd08dec0b0123480cfe4a18ca gecko-integration-branch: autoland gecko-reviewers: mstange --- .../blur-clip-stacking-context-001.html | 35 +++++++++++++++++++ .../blur-clip-stacking-context-002.html | 28 +++++++++++++++ .../blur-clip-stacking-context-ref.html | 14 ++++++++ 3 files changed, 77 insertions(+) create mode 100644 css/css-filter/blur-clip-stacking-context-001.html create mode 100644 css/css-filter/blur-clip-stacking-context-002.html create mode 100644 css/css-filter/blur-clip-stacking-context-ref.html diff --git a/css/css-filter/blur-clip-stacking-context-001.html b/css/css-filter/blur-clip-stacking-context-001.html new file mode 100644 index 00000000000000..a96994a8afe126 --- /dev/null +++ b/css/css-filter/blur-clip-stacking-context-001.html @@ -0,0 +1,35 @@ + +CSS Test: Blurs are correctly clipped by an overflow: hidden ancestor + + + + + + +
    +
    diff --git a/css/css-filter/blur-clip-stacking-context-002.html b/css/css-filter/blur-clip-stacking-context-002.html new file mode 100644 index 00000000000000..0473f12949446d --- /dev/null +++ b/css/css-filter/blur-clip-stacking-context-002.html @@ -0,0 +1,28 @@ + +CSS Test: Blurs on an overflow: hidden element are correctly not-clipped to the padding box + + + + + + +
    +
    diff --git a/css/css-filter/blur-clip-stacking-context-ref.html b/css/css-filter/blur-clip-stacking-context-ref.html new file mode 100644 index 00000000000000..82b907334fd717 --- /dev/null +++ b/css/css-filter/blur-clip-stacking-context-ref.html @@ -0,0 +1,14 @@ + +CSS Test Reference + + +
    From 66f7d1eaeb4b4bf6dcce2cec0d730a3a16f44985 Mon Sep 17 00:00:00 2001 From: Ovidio Henriquez Date: Tue, 28 Aug 2018 16:41:08 -0700 Subject: [PATCH 092/235] Improve Code Coverage for WebUSB This change improves the code coverage for the sources files under //third_party/blink/renderer/modules/webusb. The affected files are: * usb.cc * usb_alternate_interface.cc * usb_configuration.cc * usb_device.cc * usb_endpoint.cc * usb_interface.cc Bug: 854831 Change-Id: Ie67533ece27f1c944b0e9186d01a61219a30f805 Reviewed-on: https://chromium-review.googlesource.com/1183789 Commit-Queue: Ovidio Henriquez Reviewed-by: Reilly Grant Cr-Commit-Position: refs/heads/master@{#586930} --- ...-disabled-by-feature-policy.https.sub.html | 17 +- webusb/usb.https.window.js | 6 +- webusb/usbAlternateInterface.https.any.js | 33 ++ webusb/usbConfiguration.https.any.js | 23 ++ webusb/usbDevice.https.any.js | 345 ++++++++++++++---- webusb/usbEndpoint.https.any.js | 45 +++ webusb/usbInterface.https.any.js | 53 +++ 7 files changed, 453 insertions(+), 69 deletions(-) create mode 100644 webusb/usbAlternateInterface.https.any.js create mode 100644 webusb/usbConfiguration.https.any.js create mode 100644 webusb/usbEndpoint.https.any.js create mode 100644 webusb/usbInterface.https.any.js diff --git a/webusb/usb-disabled-by-feature-policy.https.sub.html b/webusb/usb-disabled-by-feature-policy.https.sub.html index 3a8a9183591605..97e66b2a373f73 100644 --- a/webusb/usb-disabled-by-feature-policy.https.sub.html +++ b/webusb/usb-disabled-by-feature-policy.https.sub.html @@ -1,8 +1,8 @@ - - - + + + diff --git a/webusb/usbDevice-worker.https.html b/webusb/usbDevice-worker.https.html new file mode 100644 index 00000000000000..119f5d6688235e --- /dev/null +++ b/webusb/usbDevice-worker.https.html @@ -0,0 +1,35 @@ + + + + + + From e520aedaadd9682ec9ee375068216609cb02c6cb Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Tue, 28 Aug 2018 20:31:27 -0700 Subject: [PATCH 094/235] Enable FP reporting for document-write violations. This queues a report through the Reporting API whenever the dynamic markup insertion methods (document.open, close, write, writeln) are called from a frame in which document-write is not allowed according to feature policy. Bug: 867471 Change-Id: I08bc1c8e96f45a7c8c544df2f9a718880680dc01 Reviewed-on: https://chromium-review.googlesource.com/1191533 Reviewed-by: Kent Tamura Commit-Queue: Ian Clelland Cr-Commit-Position: refs/heads/master@{#587003} --- .../reporting/document-write-reporting.html | 32 +++++++++++++++++++ .../document-write-reporting.html.headers | 1 + 2 files changed, 33 insertions(+) create mode 100644 feature-policy/reporting/document-write-reporting.html create mode 100644 feature-policy/reporting/document-write-reporting.html.headers diff --git a/feature-policy/reporting/document-write-reporting.html b/feature-policy/reporting/document-write-reporting.html new file mode 100644 index 00000000000000..cb08b8d72d1851 --- /dev/null +++ b/feature-policy/reporting/document-write-reporting.html @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/feature-policy/reporting/document-write-reporting.html.headers b/feature-policy/reporting/document-write-reporting.html.headers new file mode 100644 index 00000000000000..57102d5ee7c072 --- /dev/null +++ b/feature-policy/reporting/document-write-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: document-write 'none' From d2cffc6c5ec316e0269cf2809cba090153ea29ba Mon Sep 17 00:00:00 2001 From: Anne van Kesteren Date: Wed, 29 Aug 2018 09:28:20 +0200 Subject: [PATCH 095/235] HTML: document.open() and document's URL (with fragments) For https://github.com/whatwg/html/pull/3970. Co-authored-by: Timothy Gu --- .../resources/url-frame.html | 9 +++++++ .../url-fragment.window.js | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html create mode 100644 html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js diff --git a/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html new file mode 100644 index 00000000000000..be483ff0aea456 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html @@ -0,0 +1,9 @@ + diff --git a/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js new file mode 100644 index 00000000000000..0c528935b52db9 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js @@ -0,0 +1,26 @@ +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")), + urlSansHash = document.URL; + t.add_cleanup(() => { frame.remove(); }); + assert_equals(frame.contentDocument.URL, "about:blank"); + assert_equals(frame.contentWindow.location.href, "about:blank"); + self.onhashchange = t.step_func_done(() => { + frame.contentDocument.open(); + assert_equals(frame.contentDocument.URL, urlSansHash); + assert_equals(frame.contentWindow.location.href, urlSansHash); + }); + self.location.hash = "heya"; +}, "document.open() and document's URL containing a fragment (entry is not relevant)"); + +window.testDone = undefined; +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")) + t.add_cleanup(() => { frame.remove(); }); + frame.src = "resources/url-frame.html#heya"; + window.testDone = t.step_func_done((beforeURL, afterURL) => { + assert_equals(beforeURL, frame.src); + assert_equals(afterURL, frame.src); + assert_equals(frame.contentDocument.URL, frame.src); + assert_equals(frame.contentWindow.location.href, frame.src); + }); +}, "document.open() and document's URL containing a fragment (entry is relevant)"); From 160ef65ae7d2a200dca1b073355273b1e10b2c0c Mon Sep 17 00:00:00 2001 From: "Michael[tm] Smith" Date: Wed, 29 Aug 2018 03:36:35 -0400 Subject: [PATCH 096/235] Remove sideshowbarker from html/META.yml --- html/META.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/html/META.yml b/html/META.yml index d491c94e30c344..636b42b68c1046 100644 --- a/html/META.yml +++ b/html/META.yml @@ -5,6 +5,5 @@ suggested_reviewers: - foolip - jdm - jgraham - - sideshowbarker - zcorpan - zqzhang From 09687126c58ea199485a336a6637e3b6f723c7ea Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Tue, 28 Aug 2018 12:53:14 +0000 Subject: [PATCH 097/235] [wdspec] Create basic tests for "Get Element CSS Value" command. bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1486495 gecko-commit: 1132c5e406a2a6220f71f54668401a22e6eff3a5 gecko-integration-branch: mozilla-inbound --- .../tests/get_element_attribute/__init__.py | 0 .../tests/get_element_css_value/__init__.py | 0 webdriver/tests/get_element_css_value/get.py | 48 +++++++ .../get_element_css_value/user_prompts.py | 121 ++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 webdriver/tests/get_element_attribute/__init__.py create mode 100644 webdriver/tests/get_element_css_value/__init__.py create mode 100644 webdriver/tests/get_element_css_value/get.py create mode 100644 webdriver/tests/get_element_css_value/user_prompts.py diff --git a/webdriver/tests/get_element_attribute/__init__.py b/webdriver/tests/get_element_attribute/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/webdriver/tests/get_element_css_value/__init__.py b/webdriver/tests/get_element_css_value/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/webdriver/tests/get_element_css_value/get.py b/webdriver/tests/get_element_css_value/get.py new file mode 100644 index 00000000000000..88a56e1ad45f90 --- /dev/null +++ b/webdriver/tests/get_element_css_value/get.py @@ -0,0 +1,48 @@ +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def get_element_css_value(session, element_id, prop): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/css/{prop}".format( + session_id=session.session_id, + element_id=element_id, + prop=prop + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = get_element_css_value(session, "foo", "bar") + assert_error(response, "no such window") + + +def test_element_not_found(session): + result = get_element_css_value(session, "foo", "display") + assert_error(result, "no such element") + + +def test_element_stale(session): + session.url = inline("") + element = session.find.css("input", all=False) + session.refresh() + + result = get_element_css_value(session, element.id, "display") + assert_error(result, "stale element reference") + + +def test_property_name_value(session): + session.url = inline("""""") + element = session.find.css("input", all=False) + + result = get_element_css_value(session, element.id, "display") + assert_success(result, "block") + + +def test_property_name_not_existent(session): + session.url = inline("") + element = session.find.css("input", all=False) + + result = get_element_css_value(session, element.id, "foo") + assert_success(result, "") diff --git a/webdriver/tests/get_element_css_value/user_prompts.py b/webdriver/tests/get_element_css_value/user_prompts.py new file mode 100644 index 00000000000000..529b6ae9183d3c --- /dev/null +++ b/webdriver/tests/get_element_css_value/user_prompts.py @@ -0,0 +1,121 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_error, assert_success, assert_dialog_handled +from tests.support.inline import inline + + +def get_element_css_value(session, element_id, prop): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/css/{prop}".format( + session_id=session.session_id, + element_id=element_id, + prop=prop + ) + ) + + +@pytest.fixture +def check_user_prompt_closed_without_exception(session, create_dialog): + def check_user_prompt_closed_without_exception(dialog_type, retval): + session.url = inline("""""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_success(response, "block") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_without_exception + + +@pytest.fixture +def check_user_prompt_closed_with_exception(session, create_dialog): + def check_user_prompt_closed_with_exception(dialog_type, retval): + session.url = inline("""""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_error(response, "unexpected alert open") + + assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval) + + return check_user_prompt_closed_with_exception + + +@pytest.fixture +def check_user_prompt_not_closed_but_exception(session, create_dialog): + def check_user_prompt_not_closed_but_exception(dialog_type): + session.url = inline("""""") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = get_element_css_value(session, element.id, "display") + assert_error(response, "unexpected alert open") + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_but_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", True), + ("prompt", ""), +]) +def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval): + check_user_prompt_closed_without_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type): + check_user_prompt_not_closed_but_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type, retval", [ + ("alert", None), + ("confirm", False), + ("prompt", None), +]) +def test_default(check_user_prompt_closed_with_exception, dialog_type, retval): + check_user_prompt_closed_with_exception(dialog_type, retval) From d895bcc8a38776b13f6004108a0fec0c4c0e7a2b Mon Sep 17 00:00:00 2001 From: Arnaud Bienner Date: Tue, 28 Aug 2018 19:44:38 +0000 Subject: [PATCH 098/235] Add AudioWorklet tests to WPT. Differential Revision: https://phabricator.services.mozilla.com/D4205 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1481676 gecko-commit: 4e424820681656fc761059f904427b7f6c7fe4e7 gecko-integration-branch: autoland gecko-reviewers: karlt --- worklets/audio-worklet-credentials.https.html | 15 +++++++++++++++ worklets/audio-worklet-csp.https.html | 15 +++++++++++++++ worklets/audio-worklet-import.https.html | 15 +++++++++++++++ worklets/audio-worklet-referrer.https.html | 15 +++++++++++++++ ...worklet-service-worker-interception.https.html | 15 +++++++++++++++ worklets/resources/worklet-test-utils.js | 2 ++ 6 files changed, 77 insertions(+) create mode 100644 worklets/audio-worklet-credentials.https.html create mode 100644 worklets/audio-worklet-csp.https.html create mode 100644 worklets/audio-worklet-import.https.html create mode 100644 worklets/audio-worklet-referrer.https.html create mode 100644 worklets/audio-worklet-service-worker-interception.https.html diff --git a/worklets/audio-worklet-credentials.https.html b/worklets/audio-worklet-credentials.https.html new file mode 100644 index 00000000000000..9d867db7ce0a67 --- /dev/null +++ b/worklets/audio-worklet-credentials.https.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/worklets/audio-worklet-csp.https.html b/worklets/audio-worklet-csp.https.html new file mode 100644 index 00000000000000..ef148a4a098472 --- /dev/null +++ b/worklets/audio-worklet-csp.https.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/worklets/audio-worklet-import.https.html b/worklets/audio-worklet-import.https.html new file mode 100644 index 00000000000000..cff063a4361bd0 --- /dev/null +++ b/worklets/audio-worklet-import.https.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/worklets/audio-worklet-referrer.https.html b/worklets/audio-worklet-referrer.https.html new file mode 100644 index 00000000000000..f258cd5a452d57 --- /dev/null +++ b/worklets/audio-worklet-referrer.https.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/worklets/audio-worklet-service-worker-interception.https.html b/worklets/audio-worklet-service-worker-interception.https.html new file mode 100644 index 00000000000000..479ae176f9d4a2 --- /dev/null +++ b/worklets/audio-worklet-service-worker-interception.https.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/worklets/resources/worklet-test-utils.js b/worklets/resources/worklet-test-utils.js index 499999f22df3aa..797edc9e563a7e 100644 --- a/worklets/resources/worklet-test-utils.js +++ b/worklets/resources/worklet-test-utils.js @@ -6,5 +6,7 @@ function get_worklet(type) { return CSS.layoutWorklet; if (type == 'paint') return CSS.paintWorklet; + if (type == 'audio') + return new OfflineAudioContext(2,44100*40,44100).audioWorklet; return undefined; } From 3ede6629030918b00941c2fb7d176a18cbea16ea Mon Sep 17 00:00:00 2001 From: Adam Rice Date: Wed, 29 Aug 2018 19:14:14 +0900 Subject: [PATCH 099/235] Encoding: TextEncoderStream and TextDecoderStream The standard change that adds these classes is https://github.com/whatwg/encoding/pull/149. --- encoding/streams/backpressure.any.js | 60 +++ encoding/streams/decode-bad-chunks.any.js | 72 ++++ encoding/streams/decode-ignore-bom.any.js | 38 ++ .../streams/decode-incomplete-input.any.js | 24 ++ encoding/streams/decode-non-utf8.any.js | 77 ++++ .../streams/decode-split-character.any.js | 50 +++ encoding/streams/decode-utf8.any.js | 41 +++ encoding/streams/encode-bad-chunks.any.js | 63 ++++ encoding/streams/encode-utf8.any.js | 144 ++++++++ .../readable-writable-properties.any.js | 22 ++ encoding/streams/realms.window.js | 347 ++++++++++++++++++ .../resources/readable-stream-from-array.js | 12 + .../resources/readable-stream-to-array.js | 11 + interfaces/encoding.idl | 36 +- 14 files changed, 993 insertions(+), 4 deletions(-) create mode 100644 encoding/streams/backpressure.any.js create mode 100644 encoding/streams/decode-bad-chunks.any.js create mode 100644 encoding/streams/decode-ignore-bom.any.js create mode 100644 encoding/streams/decode-incomplete-input.any.js create mode 100644 encoding/streams/decode-non-utf8.any.js create mode 100644 encoding/streams/decode-split-character.any.js create mode 100644 encoding/streams/decode-utf8.any.js create mode 100644 encoding/streams/encode-bad-chunks.any.js create mode 100644 encoding/streams/encode-utf8.any.js create mode 100644 encoding/streams/readable-writable-properties.any.js create mode 100644 encoding/streams/realms.window.js create mode 100644 encoding/streams/resources/readable-stream-from-array.js create mode 100644 encoding/streams/resources/readable-stream-to-array.js diff --git a/encoding/streams/backpressure.any.js b/encoding/streams/backpressure.any.js new file mode 100644 index 00000000000000..f17e149ed9e5b9 --- /dev/null +++ b/encoding/streams/backpressure.any.js @@ -0,0 +1,60 @@ +// META: global=worker + +'use strict'; + +const classes = [ + { + constructor: TextDecoderStream, + input: new Uint8Array([65]) + }, + { + constructor: TextEncoderStream, + input: 'A' + } +]; + +const microtasksRun = () => new Promise(resolve => step_timeout(resolve, 0)); + +for (const streamClass of classes) { + promise_test(async () => { + const stream = new streamClass.constructor(); + const writer = stream.writable.getWriter(); + const reader = stream.readable.getReader(); + const events = []; + await microtasksRun(); + const writePromise = writer.write(streamClass.input); + writePromise.then(() => events.push('write')); + await microtasksRun(); + events.push('paused'); + await reader.read(); + events.push('read'); + await writePromise; + assert_array_equals(events, ['paused', 'read', 'write'], + 'write should happen after read'); + }, 'write() should not complete until read relieves backpressure for ' + + `${streamClass.constructor.name}`); + + promise_test(async () => { + const stream = new streamClass.constructor(); + const writer = stream.writable.getWriter(); + const reader = stream.readable.getReader(); + const events = []; + await microtasksRun(); + const readPromise1 = reader.read(); + readPromise1.then(() => events.push('read1')); + const writePromise1 = writer.write(streamClass.input); + const writePromise2 = writer.write(streamClass.input); + writePromise1.then(() => events.push('write1')); + writePromise2.then(() => events.push('write2')); + await microtasksRun(); + events.push('paused'); + const readPromise2 = reader.read(); + readPromise2.then(() => events.push('read2')); + await Promise.all([writePromise1, writePromise2, + readPromise1, readPromise2]); + assert_array_equals(events, ['read1', 'write1', 'paused', 'read2', + 'write2'], + 'writes should not happen before read2'); + }, 'additional writes should wait for backpressure to be relieved for ' + + `class ${streamClass.constructor.name}`); +} diff --git a/encoding/streams/decode-bad-chunks.any.js b/encoding/streams/decode-bad-chunks.any.js new file mode 100644 index 00000000000000..101fb3aeb614cf --- /dev/null +++ b/encoding/streams/decode-bad-chunks.any.js @@ -0,0 +1,72 @@ +// META: global=worker + +'use strict'; + +const badChunks = [ + { + name: 'undefined', + value: undefined + }, + { + name: 'null', + value: null + }, + { + name: 'numeric', + value: 3.14 + }, + { + name: 'object, not BufferSource', + value: {} + }, + { + name: 'array', + value: [65] + }, + { + name: 'detached ArrayBufferView', + value: (() => { + const u8 = new Uint8Array([65]); + const ab = u8.buffer; + const mc = new MessageChannel(); + mc.port1.postMessage(ab, [ab]); + return u8; + })() + }, + { + name: 'detached ArrayBuffer', + value: (() => { + const u8 = new Uint8Array([65]); + const ab = u8.buffer; + const mc = new MessageChannel(); + mc.port1.postMessage(ab, [ab]); + return ab; + })() + }, + { + name: 'SharedArrayBuffer', + // Use a getter to postpone construction so that all tests don't fail where + // SharedArrayBuffer is not yet implemented. + get value() { + return new SharedArrayBuffer(); + } + }, + { + name: 'shared Uint8Array', + get value() { + new Uint8Array(new SharedArrayBuffer()) + } + } +]; + +for (const chunk of badChunks) { + promise_test(async t => { + const tds = new TextDecoderStream(); + const reader = tds.readable.getReader(); + const writer = tds.writable.getWriter(); + const writePromise = writer.write(chunk.value); + const readPromise = reader.read(); + await promise_rejects(t, new TypeError(), writePromise, 'write should reject'); + await promise_rejects(t, new TypeError(), readPromise, 'read should reject'); + }, `chunk of type ${chunk.name} should error the stream`); +} diff --git a/encoding/streams/decode-ignore-bom.any.js b/encoding/streams/decode-ignore-bom.any.js new file mode 100644 index 00000000000000..cbe26d71b13557 --- /dev/null +++ b/encoding/streams/decode-ignore-bom.any.js @@ -0,0 +1,38 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +const cases = [ + {encoding: 'utf-8', bytes: [0xEF, 0xBB, 0xBF, 0x61, 0x62, 0x63]}, + {encoding: 'utf-16le', bytes: [0xFF, 0xFE, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00]}, + {encoding: 'utf-16be', bytes: [0xFE, 0xFF, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63]} +]; +const BOM = '\uFEFF'; + +// |inputChunks| is an array of chunks, each represented by an array of +// integers. |ignoreBOM| is true or false. The result value is the output of the +// pipe, concatenated into a single string. +async function pipeAndAssemble(inputChunks, encoding, ignoreBOM) { + const chunksAsUint8 = inputChunks.map(values => new Uint8Array(values)); + const readable = readableStreamFromArray(chunksAsUint8); + const outputArray = await readableStreamToArray(readable.pipeThrough( + new TextDecoderStream(encoding, {ignoreBOM}))); + return outputArray.join(''); +} + +for (const testCase of cases) { + for (let splitPoint = 0; splitPoint < 4; ++splitPoint) { + promise_test(async () => { + const inputChunks = [testCase.bytes.slice(0, splitPoint), + testCase.bytes.slice(splitPoint)]; + const withIgnoreBOM = + await pipeAndAssemble(inputChunks, testCase.encoding, true); + assert_equals(withIgnoreBOM, BOM + 'abc', 'BOM should be preserved'); + + const withoutIgnoreBOM = + await pipeAndAssemble(inputChunks, testCase.encoding, false); + assert_equals(withoutIgnoreBOM, 'abc', 'BOM should be stripped') + }, `ignoreBOM should work for encoding ${testCase.encoding}, split at ` + + `character ${splitPoint}`); + } +} diff --git a/encoding/streams/decode-incomplete-input.any.js b/encoding/streams/decode-incomplete-input.any.js new file mode 100644 index 00000000000000..80dd016d4918da --- /dev/null +++ b/encoding/streams/decode-incomplete-input.any.js @@ -0,0 +1,24 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const inputBytes = [229]; + +promise_test(async () => { + const input = readableStreamFromArray([new Uint8Array(inputBytes)]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, ['\uFFFD'], 'array should have one element'); +}, 'incomplete input with error mode "replacement" should end with a ' + + 'replacement character'); + +promise_test(async t => { + const input = readableStreamFromArray([new Uint8Array(inputBytes)]); + const output = input.pipeThrough(new TextDecoderStream( + 'utf-8', {fatal: true})); + const reader = output.getReader(); + await promise_rejects(t, new TypeError(), reader.read(), + 'read should reject'); +}, 'incomplete input with error mode "fatal" should error the stream'); diff --git a/encoding/streams/decode-non-utf8.any.js b/encoding/streams/decode-non-utf8.any.js new file mode 100644 index 00000000000000..7f39cdc04ca76b --- /dev/null +++ b/encoding/streams/decode-non-utf8.any.js @@ -0,0 +1,77 @@ +// META: global=worker + +'use strict'; + +// The browser is assumed to use the same implementation as for TextDecoder, so +// this file don't replicate the exhaustive checks it has. It is just a smoke +// test that non-UTF-8 encodings work at all. + +const encodings = [ + { + name: 'UTF-16BE', + value: [108, 52], + expected: "\u{6c34}", + invalid: [0xD8, 0x00] + }, + { + name: 'UTF-16LE', + value: [52, 108], + expected: "\u{6c34}", + invalid: [0x00, 0xD8] + }, + { + name: 'Shift_JIS', + value: [144, 133], + expected: "\u{6c34}", + invalid: [255] + }, + { + name: 'ISO-8859-14', + value: [100, 240, 114], + expected: "d\u{0175}r", + invalid: undefined // all bytes are treated as valid + } +]; + +for (const encoding of encodings) { + promise_test(async () => { + const stream = new TextDecoderStream(encoding.name); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.value)); + const {value, done} = await reader.read(); + assert_false(done, 'readable should not be closed'); + assert_equals(value, encoding.expected, 'chunk should match expected'); + await writePromise; + }, `TextDecoderStream should be able to decode ${encoding.name}`); + + if (!encoding.invalid) + continue; + + promise_test(async t => { + const stream = new TextDecoderStream(encoding.name); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.invalid)); + const closePromise = writer.close(); + const {value, done} = await reader.read(); + assert_false(done, 'readable should not be closed'); + assert_equals(value, '\u{FFFD}', 'output should be replacement character'); + await Promise.all([writePromise, closePromise]); + }, `TextDecoderStream should be able to decode invalid sequences in ` + + `${encoding.name}`); + + promise_test(async t => { + const stream = new TextDecoderStream(encoding.name, {fatal: true}); + const reader = stream.readable.getReader(); + const writer = stream.writable.getWriter(); + const writePromise = writer.write(new Uint8Array(encoding.invalid)); + const closePromise = writer.close(); + await promise_rejects(t, new TypeError(), reader.read(), + 'readable should be errored'); + await promise_rejects(t, new TypeError(), + Promise.all([writePromise, closePromise]), + 'writable should be errored'); + }, `TextDecoderStream should be able to reject invalid sequences in ` + + `${encoding.name}`); +} diff --git a/encoding/streams/decode-split-character.any.js b/encoding/streams/decode-split-character.any.js new file mode 100644 index 00000000000000..6c022697da65ea --- /dev/null +++ b/encoding/streams/decode-split-character.any.js @@ -0,0 +1,50 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const inputBytes = [73, 32, 240, 159, 146, 153, 32, 115, 116, 114, 101, + 97, 109, 115]; +for (const splitPoint of [2, 3, 4, 5]) { + promise_test(async () => { + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array(inputBytes.slice(splitPoint))]); + const expectedOutput = ['I ', '\u{1F499} streams']; + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, expectedOutput, + 'the split code point should be in the second chunk ' + + 'of the output'); + }, 'a code point split between chunks should not be emitted until all ' + + 'bytes are available; split point = ' + splitPoint); +} + +promise_test(async () => { + const splitPoint = 6; + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array(inputBytes.slice(splitPoint))]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, ['I \u{1F499}', ' streams'], + 'the multibyte character should be in the first chunk ' + + 'of the output'); +}, 'a code point should be emitted as soon as all bytes are available'); + +for (let splitPoint = 1; splitPoint < 7; ++splitPoint) { + promise_test(async () => { + const input = readableStreamFromArray( + [new Uint8Array(inputBytes.slice(0, splitPoint)), + new Uint8Array([]), + new Uint8Array(inputBytes.slice(splitPoint))]); + const concatenatedOutput = 'I \u{1F499} streams'; + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_equals(array.length, 2, 'two chunks should be output'); + assert_equals(array[0].concat(array[1]), concatenatedOutput, + 'output should be unchanged by the empty chunk'); + }, 'an empty chunk inside a code point split between chunks should not ' + + 'change the output; split point = ' + splitPoint); +} diff --git a/encoding/streams/decode-utf8.any.js b/encoding/streams/decode-utf8.any.js new file mode 100644 index 00000000000000..34fa764bf0a682 --- /dev/null +++ b/encoding/streams/decode-utf8.any.js @@ -0,0 +1,41 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const emptyChunk = new Uint8Array([]); +const inputChunk = new Uint8Array([73, 32, 240, 159, 146, 153, 32, 115, 116, + 114, 101, 97, 109, 115]); +const expectedOutputString = 'I \u{1F499} streams'; + +promise_test(async () => { + const input = readableStreamFromArray([inputChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'decoding one UTF-8 chunk should give one output string'); + +promise_test(async () => { + const input = readableStreamFromArray([emptyChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [], 'no chunks should be output'); +}, 'decoding an empty chunk should give no output chunks'); + +promise_test(async () => { + const input = readableStreamFromArray([emptyChunk, inputChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'an initial empty chunk should be ignored'); + +promise_test(async () => { + const input = readableStreamFromArray([inputChunk, emptyChunk]); + const output = input.pipeThrough(new TextDecoderStream()); + const array = await readableStreamToArray(output); + assert_array_equals(array, [expectedOutputString], + 'the output should be in one chunk'); +}, 'a trailing empty chunk should be ignored'); diff --git a/encoding/streams/encode-bad-chunks.any.js b/encoding/streams/encode-bad-chunks.any.js new file mode 100644 index 00000000000000..868e34b7342969 --- /dev/null +++ b/encoding/streams/encode-bad-chunks.any.js @@ -0,0 +1,63 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; + +const error1 = new Error('error1'); +error1.name = 'error1'; + +promise_test(t => { + const ts = new TextEncoderStream(); + const writer = ts.writable.getWriter(); + const reader = ts.readable.getReader(); + const writePromise = writer.write({ + toString() { throw error1; } + }); + const readPromise = reader.read(); + return Promise.all([ + promise_rejects(t, error1, readPromise, 'read should reject with error1'), + promise_rejects(t, error1, writePromise, 'write should reject with error1'), + promise_rejects(t, error1, reader.closed, 'readable should be errored with error1'), + promise_rejects(t, error1, writer.closed, 'writable should be errored with error1'), + ]); +}, 'a chunk that cannot be converted to a string should error the streams'); + +const oddInputs = [ + { + name: 'undefined', + value: undefined, + expected: 'undefined' + }, + { + name: 'null', + value: null, + expected: 'null' + }, + { + name: 'numeric', + value: 3.14, + expected: '3.14' + }, + { + name: 'object', + value: {}, + expected: '[object Object]' + }, + { + name: 'array', + value: ['hi'], + expected: 'hi' + } +]; + +for (const input of oddInputs) { + promise_test(async () => { + const outputReadable = readableStreamFromArray([input.value]) + .pipeThrough(new TextEncoderStream()) + .pipeThrough(new TextDecoderStream()); + const output = await readableStreamToArray(outputReadable); + assert_equals(output.length, 1, 'output should contain one chunk'); + assert_equals(output[0], input.expected, 'output should be correct'); + }, `input of type ${input.name} should be converted correctly to string`); +} diff --git a/encoding/streams/encode-utf8.any.js b/encoding/streams/encode-utf8.any.js new file mode 100644 index 00000000000000..74d1860e82b185 --- /dev/null +++ b/encoding/streams/encode-utf8.any.js @@ -0,0 +1,144 @@ +// META: global=worker +// META: script=resources/readable-stream-from-array.js +// META: script=resources/readable-stream-to-array.js + +'use strict'; +const inputString = 'I \u{1F499} streams'; +const expectedOutputBytes = [0x49, 0x20, 0xf0, 0x9f, 0x92, 0x99, 0x20, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73]; +// This is a character that must be represented in two code units in a string, +// ie. it is not in the Basic Multilingual Plane. +const astralCharacter = '\u{1F499}'; // BLUE HEART +const astralCharacterEncoded = [0xf0, 0x9f, 0x92, 0x99]; +const leading = astralCharacter[0]; +const trailing = astralCharacter[1]; +const replacementEncoded = [0xef, 0xbf, 0xbd]; + +// These tests assume that the implementation correctly classifies leading and +// trailing surrogates and treats all the code units in each set equivalently. + +const testCases = [ + { + input: [inputString], + output: [expectedOutputBytes], + description: 'encoding one string of UTF-8 should give one complete chunk' + }, + { + input: [leading, trailing], + output: [astralCharacterEncoded], + description: 'a character split between chunks should be correctly encoded' + }, + { + input: [leading, trailing + astralCharacter], + output: [astralCharacterEncoded.concat(astralCharacterEncoded)], + description: 'a character following one split between chunks should be ' + + 'correctly encoded' + }, + { + input: [leading, trailing + leading, trailing], + output: [astralCharacterEncoded, astralCharacterEncoded], + description: 'two consecutive astral characters each split down the ' + + 'middle should be correctly reassembled' + }, + { + input: [leading, trailing + leading + leading, trailing], + output: [astralCharacterEncoded.concat(replacementEncoded), astralCharacterEncoded], + description: 'two consecutive astral characters each split down the ' + + 'middle with an invalid surrogate in the middle should be correctly ' + + 'encoded' + }, + { + input: [leading], + output: [replacementEncoded], + description: 'a stream ending in a leading surrogate should emit a ' + + 'replacement character as a final chunk' + }, + { + input: [leading, astralCharacter], + output: [replacementEncoded.concat(astralCharacterEncoded)], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'an astral character in the next chunk should be replaced with ' + + 'the replacement character at the start of the next output chunk' + }, + { + input: [leading, 'A'], + output: [replacementEncoded.concat([65])], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'an ascii character in the next chunk should be replaced with ' + + 'the replacement character at the start of the next output chunk' + }, + { + input: [leading, leading, trailing], + output: [replacementEncoded, astralCharacterEncoded], + description: 'an unmatched surrogate at the end of a chunk followed by ' + + 'a plane 1 character split into two chunks should result in ' + + 'the encoded plane 1 character appearing in the last output chunk' + }, + { + input: [leading, leading], + output: [replacementEncoded, replacementEncoded], + description: 'two leading chunks should result in two replacement ' + + 'characters' + }, + { + input: [leading + leading, trailing], + output: [replacementEncoded, astralCharacterEncoded], + description: 'a non-terminal unpaired leading surrogate should ' + + 'immediately be replaced' + }, + { + input: [trailing, astralCharacter], + output: [replacementEncoded, astralCharacterEncoded], + description: 'a terminal unpaired trailing surrogate should ' + + 'immediately be replaced' + }, + { + input: [leading, '', trailing], + output: [astralCharacterEncoded], + description: 'a leading surrogate chunk should be carried past empty chunks' + }, + { + input: [leading, ''], + output: [replacementEncoded], + description: 'a leading surrogate chunk should error when it is clear ' + + 'it didn\'t form a pair' + }, + { + input: [''], + output: [], + description: 'an empty string should result in no output chunk' + }, + { + input: ['', inputString], + output: [expectedOutputBytes], + description: 'a leading empty chunk should be ignored' + }, + { + input: [inputString, ''], + output: [expectedOutputBytes], + description: 'a trailing empty chunk should be ignored' + }, + { + input: ['A'], + output: [[65]], + description: 'a plain ASCII chunk should be converted' + }, + { + input: ['\xff'], + output: [[195, 191]], + description: 'characters in the ISO-8859-1 range should be encoded correctly' + }, +]; + +for (const {input, output, description} of testCases) { + promise_test(async () => { + const inputStream = readableStreamFromArray(input); + const outputStream = inputStream.pipeThrough(new TextEncoderStream()); + const chunkArray = await readableStreamToArray(outputStream); + assert_equals(chunkArray.length, output.length, + 'number of chunks should match'); + for (let i = 0; i < output.length; ++i) { + assert_array_equals(chunkArray[i], output[i], `chunk ${i} should match`); + } + }, description); +} diff --git a/encoding/streams/readable-writable-properties.any.js b/encoding/streams/readable-writable-properties.any.js new file mode 100644 index 00000000000000..ad7cde32f68892 --- /dev/null +++ b/encoding/streams/readable-writable-properties.any.js @@ -0,0 +1,22 @@ +// META: global=worker + +// This just tests that the "readable" and "writable" properties pass the brand +// checks. All other relevant attributes are covered by the IDL tests. + +'use strict'; + +test(() => { + const te = new TextEncoderStream(); + assert_equals(typeof ReadableStream.prototype.getReader.call(te.readable), + 'object', 'readable property must pass brand check'); + assert_equals(typeof WritableStream.prototype.getWriter.call(te.writable), + 'object', 'writable property must pass brand check'); +}, 'TextEncoderStream readable and writable properties must pass brand checks'); + +test(() => { + const td = new TextDecoderStream(); + assert_equals(typeof ReadableStream.prototype.getReader.call(td.readable), + 'object', 'readable property must pass brand check'); + assert_equals(typeof WritableStream.prototype.getWriter.call(td.writable), + 'object', 'writable property must pass brand check'); +}, 'TextDecoderStream readable and writable properties must pass brand checks'); diff --git a/encoding/streams/realms.window.js b/encoding/streams/realms.window.js new file mode 100644 index 00000000000000..b1cc13e0b80653 --- /dev/null +++ b/encoding/streams/realms.window.js @@ -0,0 +1,347 @@ +'use strict'; + +// Test that objects created by the TextEncoderStream and TextDecoderStream APIs +// are created in the correct realm. The tests work by creating an iframe for +// each realm and then posting Javascript to them to be evaluated. Inputs and +// outputs are passed around via global variables in each realm's scope. + +// Async setup is required before creating any tests, so require done() to be +// called. +setup({explicit_done: true}); + +function createRealm() { + let iframe = document.createElement('iframe'); + const scriptEndTag = '<' + '/script>'; + iframe.srcdoc = ` + + + + +
    + + + From 1f17212bcf60503f494af8707787a09541750cc9 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 17 Aug 2018 13:26:44 -0400 Subject: [PATCH 102/235] [serve] Quit on sub-process failure The correctness of the WPT server is dependent on the availability of all server sub-processes. If any sub-process dies, the server is no longer capable of performing its role. Allow the process to exit in this case. Introduce a test for this behavior. --- tools/serve/serve.py | 2 +- tools/serve/test_functional.py | 77 ++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tools/serve/test_functional.py diff --git a/tools/serve/serve.py b/tools/serve/serve.py index 97a5063c1b9a3e..3b07dedc59706d 100644 --- a/tools/serve/serve.py +++ b/tools/serve/serve.py @@ -828,7 +828,7 @@ def run(**kwargs): servers = start(config, build_routes(config["aliases"]), **kwargs) try: - while any(item.is_alive() for item in iter_procs(servers)): + while all(item.is_alive() for item in iter_procs(servers)): for item in iter_procs(servers): item.join(1) except KeyboardInterrupt: diff --git a/tools/serve/test_functional.py b/tools/serve/test_functional.py new file mode 100644 index 00000000000000..87268ffc00d45f --- /dev/null +++ b/tools/serve/test_functional.py @@ -0,0 +1,77 @@ +try: + from importlib import reload +except ImportError: + pass +import json +import os +try: + import Queue as queue +except ImportError: + import queue +import tempfile +import threading + +import pytest + +from . import serve +from wptserve import logger + + +class ServerProcSpy(serve.ServerProc): + instances = None + + def start(self, *args, **kwargs): + result = super(ServerProcSpy, self).start(*args, **kwargs) + + if ServerProcSpy.instances is not None: + ServerProcSpy.instances.put(self) + + return result + +serve.ServerProc = ServerProcSpy + +@pytest.fixture() +def server_subprocesses(): + ServerProcSpy.instances = queue.Queue() + yield ServerProcSpy.instances + ServerProcSpy.instances = None + +@pytest.fixture() +def tempfile_name(): + name = tempfile.mkstemp()[1] + yield name + os.remove(name) + + +def test_subprocess_exit(server_subprocesses, tempfile_name): + timeout = 30 + + def target(): + # By default, the server initially creates a child process to validate + # local system configuration. That process is unrelated to the behavior + # under test, but at the time of this writing, the parent uses the same + # constructor that is also used to create the long-running processes + # which are relevant to this functionality. Disable the check so that + # the constructor is only used to create relevant processes. + with open(tempfile_name, 'w') as handle: + json.dump({"check_subdomains": False}, handle) + + # The `logger` module from the wptserver package uses a singleton + # pattern which resists testing. In order to avoid conflicting with + # other tests which rely on that module, pre-existing state is + # discarded through an explicit "reload" operation. + reload(logger) + + serve.run(config_path=tempfile_name) + + thread = threading.Thread(target=target) + + thread.start() + + server_subprocesses.get(True, timeout) + subprocess = server_subprocesses.get(True, timeout) + subprocess.kill() + + thread.join(timeout) + + assert not thread.is_alive() From 91e3f8d02477314172a3c3f0e681d250900d7a9b Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 17 Aug 2018 17:42:33 -0400 Subject: [PATCH 103/235] [serve] Log state of subprocesses during shutdown --- tools/serve/serve.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/serve/serve.py b/tools/serve/serve.py index 3b07dedc59706d..968b837979ed3d 100644 --- a/tools/serve/serve.py +++ b/tools/serve/serve.py @@ -378,15 +378,17 @@ def build_routes(aliases): class ServerProc(object): - def __init__(self): + def __init__(self, scheme=None): self.proc = None self.daemon = None self.stop = Event() + self.scheme = scheme def start(self, init_func, host, port, paths, routes, bind_address, config, **kwargs): self.proc = Process(target=self.create_daemon, args=(init_func, host, port, paths, routes, bind_address, config), + name='%s on port %s' % (self.scheme, port), kwargs=kwargs) self.proc.daemon = True self.proc.start() @@ -507,7 +509,7 @@ def start_servers(host, ports, paths, routes, bind_address, config, **kwargs): "ws":start_ws_server, "wss":start_wss_server}[scheme] - server_proc = ServerProc() + server_proc = ServerProc(scheme=scheme) server_proc.start(init_func, host, port, paths, routes, bind_address, config, **kwargs) servers[scheme].append((port, server_proc)) @@ -831,6 +833,13 @@ def run(**kwargs): while all(item.is_alive() for item in iter_procs(servers)): for item in iter_procs(servers): item.join(1) + exited = [item for item in iter_procs(servers) if not item.is_alive()] + subject = "subprocess" if len(exited) == 1 else "subprocesses" + + logger.info("%s %s exited:" % (len(exited), subject)) + + for item in iter_procs(servers): + logger.info("Status of %s:\t%s" % (item.name, "running" if item.is_alive() else "not running")) except KeyboardInterrupt: logger.info("Shutting down") From 01d6bfdd049082b2287007107a67f5fd012ac83b Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Wed, 29 Aug 2018 08:24:41 -0700 Subject: [PATCH 104/235] Enable FP reporting for fullscreen violations. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This queues a report through the Reporting API whenever [webkit]RequestFullscreen is called from a frame in which fullscreen is not allowed according to feature policy. Checking [webkit]fullscreenAllowed does not trigger reports. Bug: 867471 Change-Id: I4e7077aea66246d712e549b79b6154c1a596d74c Reviewed-on: https://chromium-review.googlesource.com/1191482 Commit-Queue: Ian Clelland Reviewed-by: Philip Jägenstedt Cr-Commit-Position: refs/heads/master@{#587109} --- .../reporting/fullscreen-reporting.html | 29 +++++++++++++++++++ .../fullscreen-reporting.html.headers | 1 + 2 files changed, 30 insertions(+) create mode 100644 feature-policy/reporting/fullscreen-reporting.html create mode 100644 feature-policy/reporting/fullscreen-reporting.html.headers diff --git a/feature-policy/reporting/fullscreen-reporting.html b/feature-policy/reporting/fullscreen-reporting.html new file mode 100644 index 00000000000000..83d97c91fab60e --- /dev/null +++ b/feature-policy/reporting/fullscreen-reporting.html @@ -0,0 +1,29 @@ + + + + + + + +
    + + + diff --git a/feature-policy/reporting/fullscreen-reporting.html.headers b/feature-policy/reporting/fullscreen-reporting.html.headers new file mode 100644 index 00000000000000..d35e48ba40dc65 --- /dev/null +++ b/feature-policy/reporting/fullscreen-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: fullscreen 'none' From d82155b15751d138df88e35b1a40b6317e1b73a4 Mon Sep 17 00:00:00 2001 From: Dave Tapuska Date: Wed, 29 Aug 2018 08:24:49 -0700 Subject: [PATCH 105/235] Avoid scrolling when entering fullscreen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When entering fullscreen we shouldn't need to set scroll to 0,0. This fixes fullscreening an element that has scroll offset. BUG=693075,684920 Change-Id: I2acf27eb2641731d580865d38e1a1495f6aee7de Reviewed-on: https://chromium-review.googlesource.com/1191664 Commit-Queue: Dave Tapuska Reviewed-by: Philip Jägenstedt Cr-Commit-Position: refs/heads/master@{#587120} --- .../fullscreen-root-block-scroll-manual.html | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 fullscreen/rendering/fullscreen-root-block-scroll-manual.html diff --git a/fullscreen/rendering/fullscreen-root-block-scroll-manual.html b/fullscreen/rendering/fullscreen-root-block-scroll-manual.html new file mode 100644 index 00000000000000..ae57d8a9f238c0 --- /dev/null +++ b/fullscreen/rendering/fullscreen-root-block-scroll-manual.html @@ -0,0 +1,26 @@ + + +fullscreen root block scrolling + + + + +
    This page tests that entering fullscreen doesn't adjust the scroll offset
    + From fb8c0bf1a5d299f48b3dcce52c60ed0cd605fa47 Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Wed, 29 Aug 2018 08:44:51 -0700 Subject: [PATCH 106/235] Enable FP reporting for camera and microphone violations. This queues a report through the Reporting API whenever camera or microphone access are requested through getUserMedia, in a frame in which either the 'camera' or 'microphone' features are not allowed according to feature policy. Bug: 867471 Change-Id: Id54caf385f710f02b94010e642c7eb395e6a831f Reviewed-on: https://chromium-review.googlesource.com/1191417 Reviewed-by: Guido Urdaneta Commit-Queue: Ian Clelland Cr-Commit-Position: refs/heads/master@{#587127} --- .../reporting/camera-reporting.https.html | 30 +++++++++++++++++++ .../camera-reporting.https.html.headers | 1 + .../reporting/microphone-reporting.https.html | 30 +++++++++++++++++++ .../microphone-reporting.https.html.headers | 1 + 4 files changed, 62 insertions(+) create mode 100644 feature-policy/reporting/camera-reporting.https.html create mode 100644 feature-policy/reporting/camera-reporting.https.html.headers create mode 100644 feature-policy/reporting/microphone-reporting.https.html create mode 100644 feature-policy/reporting/microphone-reporting.https.html.headers diff --git a/feature-policy/reporting/camera-reporting.https.html b/feature-policy/reporting/camera-reporting.https.html new file mode 100644 index 00000000000000..14b2ed1d37c6d7 --- /dev/null +++ b/feature-policy/reporting/camera-reporting.https.html @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/feature-policy/reporting/camera-reporting.https.html.headers b/feature-policy/reporting/camera-reporting.https.html.headers new file mode 100644 index 00000000000000..2adc5e237fcec8 --- /dev/null +++ b/feature-policy/reporting/camera-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: camera 'none' diff --git a/feature-policy/reporting/microphone-reporting.https.html b/feature-policy/reporting/microphone-reporting.https.html new file mode 100644 index 00000000000000..7347a2332bc818 --- /dev/null +++ b/feature-policy/reporting/microphone-reporting.https.html @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/feature-policy/reporting/microphone-reporting.https.html.headers b/feature-policy/reporting/microphone-reporting.https.html.headers new file mode 100644 index 00000000000000..a86e0a077851a8 --- /dev/null +++ b/feature-policy/reporting/microphone-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: microphone 'none' From b42438a5382241da291b3284527db833e82590d1 Mon Sep 17 00:00:00 2001 From: Luna Lu Date: Wed, 29 Aug 2018 09:04:05 -0700 Subject: [PATCH 107/235] Add intrinsicsize attribute to HTMLImageElement behind a flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Design doc: https://docs.google.com/document/d/1yh_-ayeaFV0EjuR51U641zbrPAB0Baqj6UrC9bT9iqQ/edit#heading=h.y7amr11fn0tb This CL implements "intrinsicsize" attribute for HTMLImageElement. The value of "intrinsicsize" overrides the intrinsic size: 1. When no width and (or) height is specified, the value of "intrinsicsize" will be used to determine the area to layout the image content. 2. natualWidth and naturalHeight will return the density corrected value of "intrinsicsize". See explainer: https://github.com/ojanvafai/intrinsicsize-attribute/blob/master/README.md BUG: 874629 Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel Change-Id: I519f01841ee3e761b22874dbecd74f7e6843e2a9 Reviewed-on: https://chromium-review.googlesource.com/1150725 Commit-Queue: Luna Lu Reviewed-by: Fredrik Söderquist Cr-Commit-Position: refs/heads/master@{#587132} --- ...responsive-images.tentative.https.sub.html | 97 +++++++++++++++++++ ...out-unsized-media.tentative.https.sub.html | 67 +++++++++++++ ...zed-media.tentative.https.sub.html.headers | 1 + 3 files changed, 165 insertions(+) create mode 100644 feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html create mode 100644 feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html create mode 100644 feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers diff --git a/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html b/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html new file mode 100644 index 00000000000000..14321943c24a32 --- /dev/null +++ b/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html @@ -0,0 +1,97 @@ + + + + + + diff --git a/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html b/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html new file mode 100644 index 00000000000000..17b1f49cd8b441 --- /dev/null +++ b/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html @@ -0,0 +1,67 @@ + + + + + + diff --git a/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers b/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers new file mode 100644 index 00000000000000..4fbf3f5adddbcb --- /dev/null +++ b/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: unsized-media * From f42b3ccaccf257adec3c5ddf5308ff230c68abfa Mon Sep 17 00:00:00 2001 From: Dave Tapuska Date: Wed, 29 Aug 2018 09:24:29 -0700 Subject: [PATCH 108/235] Sync fullscreen Element Ready steps with spec. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I discovered the fullscreen element ready steps didn't quite match the spec. Changes https://github.com/whatwg/fullscreen/issues/45 and https://github.com/whatwg/fullscreen/commit/9592913bbeca3a9d029274f310eb27ad8003622c weren't reflected in our implementation. I've modified the tests to match. BUG=627792 Change-Id: Ia0cd0700ea05248d14225d551f3e5287be2b99ef Reviewed-on: https://chromium-review.googlesource.com/1191728 Commit-Queue: Dave Tapuska Reviewed-by: Philip Jägenstedt Cr-Commit-Position: refs/heads/master@{#587138} --- .../api/element-ready-check-containing-iframe-manual.html | 7 +++++-- ...ent-ready-check-fullscreen-element-sibling-manual.html | 8 +++++--- .../api/element-request-fullscreen-non-top-manual.html | 4 +++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/fullscreen/api/element-ready-check-containing-iframe-manual.html b/fullscreen/api/element-ready-check-containing-iframe-manual.html index 66f99688f14477..8ba2ab71b15860 100644 --- a/fullscreen/api/element-ready-check-containing-iframe-manual.html +++ b/fullscreen/api/element-ready-check-containing-iframe-manual.html @@ -13,9 +13,12 @@ trusted_request(t, iframes[0].contentDocument.body, document.body); iframes[0].contentDocument.onfullscreenchange = t.step_func(function() { + assert_equals(document.fullscreenElement, iframes[0]); trusted_request(t, iframes[1].contentDocument.body, iframes[0].contentDocument.body); - iframes[1].contentDocument.onfullscreenchange = t.unreached_func("fullscreenchange event"); - iframes[1].contentDocument.onfullscreenerror = t.step_func_done(); + iframes[1].contentDocument.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, iframes[1]); + }); + iframes[1].contentDocument.onfullscreenerror = t.unreached_func("fullscreenchange error"); }); }); diff --git a/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html b/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html index dc0c28c78e18d7..f800093ec8ec8d 100644 --- a/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html +++ b/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html @@ -13,10 +13,12 @@ var b = document.getElementById("b"); document.onfullscreenchange = t.step_func(function() { - assert_equals(document.fullscreenElement, a, "fullscreen element"); + assert_equals(document.fullscreenElement, a, "fullscreen element is a"); trusted_request(t, b, a); - document.onfullscreenchange = t.unreached_func("second fullscreenchange event"); - document.onfullscreenerror = t.step_func_done(); + document.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, b, "fullscreen element is b"); + }); + document.onfullscreenerror = t.unreached_func("second fullscreenchange event"); }); trusted_request(t, a); }); diff --git a/fullscreen/api/element-request-fullscreen-non-top-manual.html b/fullscreen/api/element-request-fullscreen-non-top-manual.html index 06c4c1b036713c..0764e9c8423a2f 100644 --- a/fullscreen/api/element-request-fullscreen-non-top-manual.html +++ b/fullscreen/api/element-request-fullscreen-non-top-manual.html @@ -21,7 +21,9 @@ { assert_equals(document.fullscreenElement, last); trusted_request(t, first, last); - document.onfullscreenerror = t.step_func_done(); + document.onfullscreenchange = t.step_func_done(function() { + assert_equals(document.fullscreenElement, first); + }); }); }); }); From 99f589185172fb846fc3b240acf23b0226f6c6f4 Mon Sep 17 00:00:00 2001 From: Youenn Fablet Date: Mon, 27 Aug 2018 23:00:19 -0700 Subject: [PATCH 109/235] WebKit export of https://bugs.webkit.org/show_bug.cgi?id=189040 --- .../MediaStream-default-feature-policy.https.html | 2 +- webrtc/no-media-call.html | 8 ++++---- webrtc/simplecall.https.html | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mediacapture-streams/MediaStream-default-feature-policy.https.html b/mediacapture-streams/MediaStream-default-feature-policy.https.html index f0f07da21228e7..0b45ac6f594a69 100644 --- a/mediacapture-streams/MediaStream-default-feature-policy.https.html +++ b/mediacapture-streams/MediaStream-default-feature-policy.https.html @@ -13,7 +13,7 @@ // mic/camera has been explicitly allowed by feature policy. function promise_factory(allowed_features) { return new Promise((resolve, reject) => { - navigator.getUserMedia({video: true, audio: true}, + navigator.getUserMedia({video: true, audio: true}).then( function(stream) { // If microphone is allowed, there should be at least one microphone // in the result. If camera is allowed, there should be at least one diff --git a/webrtc/no-media-call.html b/webrtc/no-media-call.html index c4979e8521478a..c973932bf2fc36 100644 --- a/webrtc/no-media-call.html +++ b/webrtc/no-media-call.html @@ -37,9 +37,9 @@

    iceConnectionState info

    var parsedOffer = new RTCSessionDescription({ type: 'offer', sdp: offerSdp }); // These functions use the legacy interface extensions to RTCPeerConnection. - gSecondConnection.setRemoteDescription(parsedOffer, + gSecondConnection.setRemoteDescription(parsedOffer).then( function() { - gSecondConnection.createAnswer(onAnswerCreated, + gSecondConnection.createAnswer().then(onAnswerCreated, failed('createAnswer')); }, failed('setRemoteDescription second')); @@ -56,7 +56,7 @@

    iceConnectionState info

    function handleAnswer(answerSdp) { var parsedAnswer = new RTCSessionDescription({ type: 'answer', sdp: answerSdp }); - gFirstConnection.setRemoteDescription(parsedAnswer, ignoreSuccess, + gFirstConnection.setRemoteDescription(parsedAnswer).then(ignoreSuccess, failed('setRemoteDescription first')); }; @@ -125,7 +125,7 @@

    iceConnectionState info

    // The offerToReceiveVideo is necessary and sufficient to make // an actual connection. - gFirstConnection.createOffer(onOfferCreated, failed('createOffer'), + gFirstConnection.createOffer().then(onOfferCreated, failed('createOffer'), {offerToReceiveVideo: true}); }); diff --git a/webrtc/simplecall.https.html b/webrtc/simplecall.https.html index 6adefe77492347..681c42d4cd855d 100644 --- a/webrtc/simplecall.https.html +++ b/webrtc/simplecall.https.html @@ -36,7 +36,7 @@ localStream.getTracks().forEach(function(track) { gFirstConnection.addTrack(track, localStream); }); - gFirstConnection.createOffer(onOfferCreated, failed('createOffer')); + gFirstConnection.createOffer().then(onOfferCreated, failed('createOffer')); var videoTag = document.getElementById('local-view'); videoTag.srcObject = localStream; @@ -59,7 +59,7 @@ sdp: offerSdp }); gSecondConnection.setRemoteDescription(parsedOffer); - gSecondConnection.createAnswer(onAnswerCreated, + gSecondConnection.createAnswer().then(onAnswerCreated, failed('createAnswer')); }; From eca7f8cc2ae10c36eb8c4356eb594b214dcd4ea0 Mon Sep 17 00:00:00 2001 From: Christian Biesinger Date: Wed, 29 Aug 2018 09:54:19 -0700 Subject: [PATCH 110/235] [layoutng] Add a flag for content size vs border box size to ComputeMinMaxSize And use it to simplify and speed up code in LayoutNGBlockFlow Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng Change-Id: I56c486b66376497fc89b5c18ee5bbdf910573eb1 Reviewed-on: https://chromium-review.googlesource.com/1195502 Commit-Queue: Christian Biesinger Reviewed-by: Emil A Eklund Reviewed-by: Morten Stenshorne Cr-Commit-Position: refs/heads/master@{#587154} --- css/css-multicol/intrinsic-size-001.html | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 css/css-multicol/intrinsic-size-001.html diff --git a/css/css-multicol/intrinsic-size-001.html b/css/css-multicol/intrinsic-size-001.html new file mode 100644 index 00000000000000..ce8011b17f8240 --- /dev/null +++ b/css/css-multicol/intrinsic-size-001.html @@ -0,0 +1,9 @@ + +Intrinsic size computation with specified padding + + + +

    Test passes if there is a filled green square and no red.

    +
    +
    +
    From 9be7cfef2e90378b3db6d6e75b80ba6f929786c5 Mon Sep 17 00:00:00 2001 From: Dave Tapuska Date: Wed, 29 Aug 2018 10:34:03 -0700 Subject: [PATCH 111/235] Fix fullscreen WPT tests assuming fullscreenElement changes each time. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since fullscreenchange event is sent by the rAF event loop it is possible that the fullscreenElement might change and not be observed at the time you read the event. Fix the tests so they are robust. Fix the ordering of which fullscreen elements are handled in pending frames. Otherwise we might end up with incorrect ordering. BUG=874444 Change-Id: I00c228e0aea7794564e522a3883573ea359235f1 Reviewed-on: https://chromium-review.googlesource.com/1194726 Commit-Queue: Dave Tapuska Reviewed-by: Philip Jägenstedt Cr-Commit-Position: refs/heads/master@{#587170} --- .../element-request-fullscreen-two-elements-manual.html | 7 +++++-- .../api/element-request-fullscreen-two-iframes-manual.html | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fullscreen/api/element-request-fullscreen-two-elements-manual.html b/fullscreen/api/element-request-fullscreen-two-elements-manual.html index 9611c8165663f8..3291664c63ab48 100644 --- a/fullscreen/api/element-request-fullscreen-two-elements-manual.html +++ b/fullscreen/api/element-request-fullscreen-two-elements-manual.html @@ -19,8 +19,11 @@ assert_in_array(document.fullscreenElement, [a, b]); order.push(document.fullscreenElement.id); if (order.length == 2) { - assert_array_equals(order, ['b', 'a'], - 'fullscreenElement IDs in fullscreenchange events'); + // Since fullscreenchange event occurs at animation frame timing we might + // have not seen the transition from null -> 'b' but just see the + // resulting 'a' transition twice. + assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b'); + assert_true(order[1] == 'a', 'second id seen is b'); t.done(); } }); diff --git a/fullscreen/api/element-request-fullscreen-two-iframes-manual.html b/fullscreen/api/element-request-fullscreen-two-iframes-manual.html index 99a7672e71c961..94b38c0302a5fa 100644 --- a/fullscreen/api/element-request-fullscreen-two-iframes-manual.html +++ b/fullscreen/api/element-request-fullscreen-two-iframes-manual.html @@ -21,8 +21,11 @@ assert_in_array(document.fullscreenElement, [a, b]); order.push(document.fullscreenElement.id); if (order.length == 2) { - assert_array_equals(order, ['b', 'a'], - 'fullscreenElement IDs in fullscreenchange events'); + // Since fullscreenchange event occurs at animation frame timing we might + // have not seen the transition from null -> 'b' but just see the + // resulting 'a' transition twice. + assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b'); + assert_true(order[1] == 'a', 'second id seen is b'); t.done(); } }); From 1f403953c4d250bcefefa067d3274696567b760c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Wed, 29 Aug 2018 19:51:12 +0200 Subject: [PATCH 112/235] Add a test for WebKit bug 189089. https://webkit.org/b/189089 --- css/selectors/x-pseudo-element.html | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 css/selectors/x-pseudo-element.html diff --git a/css/selectors/x-pseudo-element.html b/css/selectors/x-pseudo-element.html new file mode 100644 index 00000000000000..80ec44f9def9e1 --- /dev/null +++ b/css/selectors/x-pseudo-element.html @@ -0,0 +1,22 @@ + +CSS Test: 'x-' prefixed pseudo-elements don't parse correctly + + + + + + +

    Should be green + From 2e742eb0aac9b916de4d4f9872ec04d8917248f1 Mon Sep 17 00:00:00 2001 From: David Quiroz Marin Date: Wed, 29 Aug 2018 11:24:21 -0700 Subject: [PATCH 113/235] Add one more WPT test to cavas TextMetrics for advances. Adding a test to validate that calling measureText a second time, it gives the same results (an arrray with the same values) as a first time. Change-Id: I5308b6610633de2d5ac44d45f07a97d7f63657e5 Reviewed-on: https://chromium-review.googlesource.com/1191536 Reviewed-by: Fernando Serboncini Commit-Queue: David Quiroz Marin Cr-Commit-Position: refs/heads/master@{#587196} --- .../2d.text.measure.advances.html | 7 +++++++ 2dcontext/tools/tests2dtext.yaml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html index 0af5a213cd345e..ed8c04d0ab791b 100644 --- a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html +++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html @@ -38,6 +38,13 @@

    2d.text.measure.advances

    _assert(ctx.measureText('Hello').advances[2] >= 58, "ctx.measureText('Hello').advances[\""+(2)+"\"] >= 58"); _assert(ctx.measureText('Hello').advances[3] >= 70, "ctx.measureText('Hello').advances[\""+(3)+"\"] >= 70"); _assert(ctx.measureText('Hello').advances[4] >= 80, "ctx.measureText('Hello').advances[\""+(4)+"\"] >= 80"); + + var tm = ctx.measureText('Hello'); + _assertSame(ctx.measureText('Hello').advances[0], tm.advances[0], "ctx.measureText('Hello').advances[\""+(0)+"\"]", "tm.advances[\""+(0)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[1], tm.advances[1], "ctx.measureText('Hello').advances[\""+(1)+"\"]", "tm.advances[\""+(1)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[2], tm.advances[2], "ctx.measureText('Hello').advances[\""+(2)+"\"]", "tm.advances[\""+(2)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[3], tm.advances[3], "ctx.measureText('Hello').advances[\""+(3)+"\"]", "tm.advances[\""+(3)+"\"]"); + _assertSame(ctx.measureText('Hello').advances[4], tm.advances[4], "ctx.measureText('Hello').advances[\""+(4)+"\"]", "tm.advances[\""+(4)+"\"]"); }), 500); diff --git a/2dcontext/tools/tests2dtext.yaml b/2dcontext/tools/tests2dtext.yaml index 8490cd4f2b2c1f..f6db762b19b0a7 100644 --- a/2dcontext/tools/tests2dtext.yaml +++ b/2dcontext/tools/tests2dtext.yaml @@ -1037,6 +1037,13 @@ @assert ctx.measureText('Hello').advances[2] >= 58; @assert ctx.measureText('Hello').advances[3] >= 70; @assert ctx.measureText('Hello').advances[4] >= 80; + + var tm = ctx.measureText('Hello'); + @assert ctx.measureText('Hello').advances[0] === tm.advances[0]; + @assert ctx.measureText('Hello').advances[1] === tm.advances[1]; + @assert ctx.measureText('Hello').advances[2] === tm.advances[2]; + @assert ctx.measureText('Hello').advances[3] === tm.advances[3]; + @assert ctx.measureText('Hello').advances[4] === tm.advances[4]; }), 500); - name: 2d.text.measure.actualBoundingBox From 9bda9c68b6412bfa59862cedecd2280253d9ced1 Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Wed, 29 Aug 2018 12:23:14 -0700 Subject: [PATCH 114/235] Enable FP reporting for payment violations. This queues a report through the Reporing API whenever the PaymentRequest API is invoked from a frame in which the 'payment' feature is not allowed according to feature policy. Bug: 867471 Change-Id: Ie03fe06924a634829d03fb9d9693aee29ab66dd2 Reviewed-on: https://chromium-review.googlesource.com/1191411 Reviewed-by: Rouslan Solomakhin Commit-Queue: Ian Clelland Cr-Commit-Position: refs/heads/master@{#587223} --- .../reporting/payment-reporting.https.html | 35 +++++++++++++++++++ .../payment-reporting.https.html.headers | 1 + 2 files changed, 36 insertions(+) create mode 100644 feature-policy/reporting/payment-reporting.https.html create mode 100644 feature-policy/reporting/payment-reporting.https.html.headers diff --git a/feature-policy/reporting/payment-reporting.https.html b/feature-policy/reporting/payment-reporting.https.html new file mode 100644 index 00000000000000..03eaebea58fb60 --- /dev/null +++ b/feature-policy/reporting/payment-reporting.https.html @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/feature-policy/reporting/payment-reporting.https.html.headers b/feature-policy/reporting/payment-reporting.https.html.headers new file mode 100644 index 00000000000000..a2836778bc5389 --- /dev/null +++ b/feature-policy/reporting/payment-reporting.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: payment 'none' From cf6f1d44c735fedd87e94f1e72fcc747d4d74b9f Mon Sep 17 00:00:00 2001 From: Navid Zolghadr Date: Wed, 29 Aug 2018 12:23:21 -0700 Subject: [PATCH 115/235] Add pointerrawmove implementation Push a new PointerRawMove in the main thread event queue for MouseMove events. Note that we do not send compatibility mouse events for this type. Only PointerEvent with the type pointerrawmove. Also note that this change only adds pointerrawmove for mouse events at this point. pointerrawmove for touch events should come in the following CLs. Intent to implement: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/84RGJvm_PMM Bug: 873684 Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel Change-Id: Icb003b8ba978f1c64157dbbe79222a687d4aa42d Reviewed-on: https://chromium-review.googlesource.com/1181171 Reviewed-by: Mustaq Ahmed Reviewed-by: Rick Byers Reviewed-by: David Bokan Reviewed-by: Avi Drissman Reviewed-by: Dave Tapuska Reviewed-by: Ella Ge Commit-Queue: Navid Zolghadr Cr-Commit-Position: refs/heads/master@{#587226} --- interfaces/pointerevents.idl | 1 + .../pointerevent_pointerrawmove-manual.html | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 pointerevents/extension/pointerevent_pointerrawmove-manual.html diff --git a/interfaces/pointerevents.idl b/interfaces/pointerevents.idl index da822bba0e58e3..63d39a285232b0 100644 --- a/interfaces/pointerevents.idl +++ b/interfaces/pointerevents.idl @@ -41,6 +41,7 @@ partial interface GlobalEventHandlers { attribute EventHandler onlostpointercapture; attribute EventHandler onpointerdown; attribute EventHandler onpointermove; + [RuntimeEnabled=PointerRawMove] attribute EventHandler onpointerrawmove; attribute EventHandler onpointerup; attribute EventHandler onpointercancel; attribute EventHandler onpointerover; diff --git a/pointerevents/extension/pointerevent_pointerrawmove-manual.html b/pointerevents/extension/pointerevent_pointerrawmove-manual.html new file mode 100644 index 00000000000000..0c4ccf9ad48d49 --- /dev/null +++ b/pointerevents/extension/pointerevent_pointerrawmove-manual.html @@ -0,0 +1,55 @@ + + + + pointerrawmove + + + + + + + + +

    pointerrawmove

    +

    Test Description: This test checks if pointerrawmove is dispatched correctly.

    +

    Move your mouse within the black box.

    +

    Press left button down and then press middle button while holding down left button. Then release the buttons

    +
    + +
    +
    + + From 96e846ffd4fdeaab48977003426c50da328119b3 Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Wed, 29 Aug 2018 12:34:13 -0700 Subject: [PATCH 116/235] Enable FP reporting for unsized-media policy violations. This queues a report through the Reporting API whenever an image is encountered which violates the 'unsized-media' policy, in a document in which that feature is not allowed according to feature policy. Bug: 867471 Change-Id: I8d39639d21d9a993685f97efc078a9a1ab6f303c Reviewed-on: https://chromium-review.googlesource.com/1195675 Reviewed-by: Steve Kobes Commit-Queue: Ian Clelland Cr-Commit-Position: refs/heads/master@{#587236} --- feature-policy/reporting/image.jpg | Bin 0 -> 2033 bytes .../reporting/unsized-media-reporting.html | 24 ++++++++++++++++++ .../unsized-media-reporting.html.headers | 1 + 3 files changed, 25 insertions(+) create mode 100644 feature-policy/reporting/image.jpg create mode 100644 feature-policy/reporting/unsized-media-reporting.html create mode 100644 feature-policy/reporting/unsized-media-reporting.html.headers diff --git a/feature-policy/reporting/image.jpg b/feature-policy/reporting/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c059b96d97fc3701ce4325165b79948f69189135 GIT binary patch literal 2033 zcmb7EX*gV28ou||W~nOo7RoZ3Qe`PiOI1j0lTl)4V(iP)WDq+^#3Mw~kwR3^mXswD zf+p6ASR#?MwnwA2#6$;S5M&5xTe?OYblTi9Pw4(R=bj(;obNg3eb4*7-?#UAZx(>< zt?jG<5Cj2R^aJ*O1EejYgZyKH0%>t!F`+aYyHiek{{$=m35(jh(t*VNl6l!0+YxHSyB?F!icnttgI|iN=}|CBTtc$l@VP6V$d^KoH!0AE<=(e z$^74AuLnTH01m*xfCvB~AO->VdI1Fyf6)^T2ObMy#6%%<7xRY*0Aa8oZf_DGVn6_b zF)#ptI~8x+3a4$M0@AdwEskGO6~1n0ooX9$H}I z0TP!I#ORvsTh6(3J*%}-%63INKS$wJ>lW`3Txp3!9MBYzt0tYhZ)%2JQl5gGo@tGuxT4$n-`7!+SA{Mx6T{N@6iAD z*k<7S=T|3m|NQl0m`|Gb0&laEmZdFyMWs;jV~DD;yyt2*3Pnc%5H%O>_fQam!K%Wv zqjWWM{|ozQkO+c zP3`t5*C^X4nHOqCD0v0yl(C)Sea?2QFP!}l-Ll=8`D8RaIIL7_RhJdpRJjPXvSs?O z69e^%s=EJmx91tbqp_{a_xOXv@1>1RFbZP6j@shB&Fy*<9WPrmT;a64#UhR9qI80& z-wyl-LKp;1r>ZlBeSu&0DW!NbsAnjYs8gBx;)?RaH6xoD-+tCkS8GiMq4_6_R%5Jg zAGgmvpw)Rd(K+;-`&gfLGj*hNh*;G<@JJA!C;X6}&XiiwJ&OmrhosZY^pU?>?exR%QKmT^zwAz;!{CQ zE`5}_$QbU^scpP=E7kz-An+fm&d$*8>Fx`1nRMMw4I0`ETYs_xxq!xWLtTX{SrTB#At&0;5LxgQ-CPQDwvC&i;uTpA-PiR1=fK z{F9u2Q6IxQ@!bhkk{;GSb+&?>7i-OkdM*lDk!}gj{uJ$sgybZRvKlC9ElF z93g*WWO>@Rw`5gLm_5zuu2900%6MruuM4~s?7#ECPqO^-PNd2kBxir>AAqPd;C$P< zih)zsb`m+D8amM*bct@F!YCr5#&qZnwA&y6Of&zVokhh158^I*>1oXsURrAWE8R5( z`o@hcNw&&DB$L$jSy$3+Tyk&Uf3A`^V`kyG6xYx-WWK2Lnf;64hG=o6bPHTHeH_T^ zf|O|dm*Kaov%=;CqfsFFpm-q=ci>Avl#?C{Yrswx&c8wv;vdlBwT|8r6Ux}Zu{XAl8sy95OoUN~Y!!*+{TqtpF zbl%-D4yi3EMO9MXw-2hu0ap-V1FC4%!_J59fxG;2Z3kvH+$_Fa*2=v+CVuacdi<}B z23twYRdHoA&*IMl*DvX)cNiT1;lX(@>6GRy%dR2_;h78oD-AI!KQ7k-J(W8jkI}q+ zj063%HgG0Kp37~>tBpiW=T1-=tYWrTXjMHU@|s?Hz`Q}9>BD$Bmu}H=UL4REEZ#9c zv9yytTDaf`x^X3D%{(IV`5=^y&zr`_a3e zD(Yy2F^eGCc%llY~l=h}eBCNnYU?0p;1eO;}sEPoStTc5q*fVYztN6wQl~Ww5 zyXN?E4bU??$RJ)!VNN8hlz!b!=cBw`q7B=Q-SkwHP@maKXD)~6zX8 ZF2vh(MlnsN`172I%Uyna+wHxH{{nFC^~nGL literal 0 HcmV?d00001 diff --git a/feature-policy/reporting/unsized-media-reporting.html b/feature-policy/reporting/unsized-media-reporting.html new file mode 100644 index 00000000000000..8bd793189501a9 --- /dev/null +++ b/feature-policy/reporting/unsized-media-reporting.html @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/feature-policy/reporting/unsized-media-reporting.html.headers b/feature-policy/reporting/unsized-media-reporting.html.headers new file mode 100644 index 00000000000000..db2dcbc1929b9e --- /dev/null +++ b/feature-policy/reporting/unsized-media-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: unsized-media 'none' From 17627a7b7723f84448c87c1c19b20d71bccf16fa Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Wed, 29 Aug 2018 12:41:58 +0000 Subject: [PATCH 117/235] [wdspec] Add test for empty text to send_alert_text/send.py. The patch refactors the test file, and also adds an additional test, which makes sure that the default text of the prompt is replaced in case of an empty string is send as text. bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1486485 gecko-commit: 82dc592c7293290a7b17c4473c01a228e42615cd gecko-integration-branch: mozilla-inbound gecko-reviewers: jgraham --- webdriver/tests/send_alert_text/send.py | 58 +++++++++---------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/webdriver/tests/send_alert_text/send.py b/webdriver/tests/send_alert_text/send.py index edc37d6edb483c..6dbc03f94019ab 100644 --- a/webdriver/tests/send_alert_text/send.py +++ b/webdriver/tests/send_alert_text/send.py @@ -6,6 +6,13 @@ from tests.support.inline import inline +@pytest.fixture +def page(session): + session.url = inline(""" + + """) + + def send_alert_text(session, text=None): return session.transport.send( "POST", "session/{session_id}/alert/text".format(**vars(session)), @@ -18,64 +25,41 @@ def test_null_parameter_value(session, http): assert_error(Response.from_http(response), "invalid argument") -def test_null_response_value(session, url): - session.url = inline("") - +def test_null_response_value(session, page): response = send_alert_text(session, "Federer") value = assert_success(response) assert value is None -def test_no_browsing_context(session, closed_window): - response = send_alert_text(session, "foo") - assert_error(response, "no such window") - - @pytest.mark.parametrize("text", [None, {}, [], 42, True]) -def test_invalid_input(session, text): - session.url = inline("") +def test_invalid_input(session, page, text): response = send_alert_text(session, text) assert_error(response, "invalid argument") -def test_no_user_prompt(session): +def test_no_browsing_context(session, closed_window): response = send_alert_text(session, "Federer") - assert_error(response, "no such alert") - + assert_error(response, "no such window") -def test_alert_element_not_interactable(session): - session.url = inline("") +def test_no_user_prompt(session): response = send_alert_text(session, "Federer") - assert_error(response, "element not interactable") + assert_error(response, "no such alert") -def test_confirm_element_not_interactable(session): - session.url = inline("") +@pytest.mark.parametrize("dialog_type", ["alert", "confirm"]) +def test_alert_element_not_interactable(session, dialog_type): + session.url = inline("".format(dialog_type)) response = send_alert_text(session, "Federer") assert_error(response, "element not interactable") -def test_send_alert_text(session): - session.url = inline("") - - send_response = send_alert_text(session, "Federer") +@pytest.mark.parametrize("text", ["", "Federer", " Fed erer "]) +def test_send_alert_text(session, page, text): + send_response = send_alert_text(session, text) assert_success(send_response) - accept_response = session.transport.send("POST", "session/{session_id}/alert/accept" - .format(session_id=session.session_id)) - assert_success(accept_response) - assert session.execute_script("return window.result") == "Federer" - - -def test_send_alert_text_with_whitespace(session): - session.url = inline("") - - send_response = send_alert_text(session, " Fed erer ") - assert_success(send_response) + session.alert.accept() - accept_response = session.transport.send("POST", "session/{session_id}/alert/accept" - .format(session_id=session.session_id)) - assert_success(accept_response) - assert session.execute_script("return window.result") == " Fed erer " + assert session.execute_script("return window.result") == text From 99c4f1dd3b4253418e9c108a0b63e824cb00be18 Mon Sep 17 00:00:00 2001 From: Vladimir Levin Date: Wed, 29 Aug 2018 12:57:40 -0700 Subject: [PATCH 118/235] Fix one paint containment wpt (incorrect expectations) This patch removes one passing paint containment test expectation. It also fixed an expectation in one other that has an incorrect word s/digit/number/ R=chrishtr@chromium.org Change-Id: I756dc10ff49d7b3ef762d9d9733b566501cb2f5e Reviewed-on: https://chromium-review.googlesource.com/1195678 Reviewed-by: Chris Harrelson Commit-Queue: vmpstr Cr-Commit-Position: refs/heads/master@{#587251} --- css/css-contain/reference/contain-style-counters-003-ref.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/css-contain/reference/contain-style-counters-003-ref.html b/css/css-contain/reference/contain-style-counters-003-ref.html index 8eb67b5943fa41..12f9b989fd2402 100644 --- a/css/css-contain/reference/contain-style-counters-003-ref.html +++ b/css/css-contain/reference/contain-style-counters-003-ref.html @@ -13,6 +13,6 @@ } -

    Test passes if there is the digit 20. +

    Test passes if there is the number 20.

    20
    From 074a50df83e63daa3a7a71be24a1b5241f7084c8 Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Wed, 29 Aug 2018 21:08:21 +0000 Subject: [PATCH 119/235] [wdspec] Add basic tests for "Take Screenshot" command. bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1486793 gecko-commit: e2251ddcafd236d667b5ebb4908429bc88c99de8 gecko-integration-branch: mozilla-inbound gecko-reviewers: ato --- webdriver/tests/take_screenshot/__init__.py | 0 webdriver/tests/take_screenshot/screenshot.py | 25 +++++++ .../tests/take_screenshot/user_prompts.py | 68 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 webdriver/tests/take_screenshot/__init__.py create mode 100644 webdriver/tests/take_screenshot/screenshot.py create mode 100644 webdriver/tests/take_screenshot/user_prompts.py diff --git a/webdriver/tests/take_screenshot/__init__.py b/webdriver/tests/take_screenshot/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/webdriver/tests/take_screenshot/screenshot.py b/webdriver/tests/take_screenshot/screenshot.py new file mode 100644 index 00000000000000..d3153710f7b108 --- /dev/null +++ b/webdriver/tests/take_screenshot/screenshot.py @@ -0,0 +1,25 @@ +import base64 +import imghdr + +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def take_screenshot(session): + return session.transport.send( + "GET", "session/{session_id}/screenshot".format(**vars(session))) + + +def test_no_browsing_context(session, closed_window): + response = take_screenshot(session) + assert_error(response, "no such window") + + +def test_screenshot(session): + session.url = inline("") + + response = take_screenshot(session) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" diff --git a/webdriver/tests/take_screenshot/user_prompts.py b/webdriver/tests/take_screenshot/user_prompts.py new file mode 100644 index 00000000000000..4d4840f08ba6f5 --- /dev/null +++ b/webdriver/tests/take_screenshot/user_prompts.py @@ -0,0 +1,68 @@ +# META: timeout=long + +import base64 +import imghdr + +import pytest + +from tests.support.asserts import assert_success +from tests.support.inline import inline + + +def take_screenshot(session): + return session.transport.send( + "GET", "session/{session_id}/screenshot".format(**vars(session))) + + +@pytest.fixture +def check_user_prompt_not_closed_without_exception(session, create_dialog): + def check_user_prompt_not_closed_without_exception(dialog_type): + session.url = inline("") + + create_dialog(dialog_type, text=dialog_type) + + response = take_screenshot(session) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_without_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_default(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) From 40141b45717a346bc2f7d3d530317f0a6f9d8794 Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Wed, 29 Aug 2018 21:08:22 +0000 Subject: [PATCH 120/235] [wdspec] Add basic tests for "Take Element Screenshot" command. bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1486793 gecko-commit: 46011d6f389df1f1f41a862c73e59b1716e92e55 gecko-integration-branch: mozilla-inbound gecko-reviewers: ato --- .../tests/take_element_screenshot/__init__.py | 0 .../take_element_screenshot/screenshot.py | 40 ++++++++++ .../take_element_screenshot/user_prompts.py | 74 +++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 webdriver/tests/take_element_screenshot/__init__.py create mode 100644 webdriver/tests/take_element_screenshot/screenshot.py create mode 100644 webdriver/tests/take_element_screenshot/user_prompts.py diff --git a/webdriver/tests/take_element_screenshot/__init__.py b/webdriver/tests/take_element_screenshot/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/webdriver/tests/take_element_screenshot/screenshot.py b/webdriver/tests/take_element_screenshot/screenshot.py new file mode 100644 index 00000000000000..e4d2869af4f3a5 --- /dev/null +++ b/webdriver/tests/take_element_screenshot/screenshot.py @@ -0,0 +1,40 @@ +import base64 +import imghdr + +from tests.support.asserts import assert_error, assert_success +from tests.support.inline import inline + + +def take_element_screenshot(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/screenshot".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +def test_no_browsing_context(session, closed_window): + response = take_element_screenshot(session, "foo") + assert_error(response, "no such window") + + +def test_screenshot(session): + session.url = inline("") + element = session.find.css("input", all=False) + + response = take_element_screenshot(session, element.id) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + +def test_stale(session): + session.url = inline("") + element = session.find.css("input", all=False) + session.refresh() + + result = take_element_screenshot(session, element.id) + assert_error(result, "stale element reference") diff --git a/webdriver/tests/take_element_screenshot/user_prompts.py b/webdriver/tests/take_element_screenshot/user_prompts.py new file mode 100644 index 00000000000000..fa239999e4f347 --- /dev/null +++ b/webdriver/tests/take_element_screenshot/user_prompts.py @@ -0,0 +1,74 @@ +# META: timeout=long + +import base64 +import imghdr + +import pytest + +from tests.support.asserts import assert_success +from tests.support.inline import inline + + +def take_element_screenshot(session, element_id): + return session.transport.send( + "GET", + "session/{session_id}/element/{element_id}/screenshot".format( + session_id=session.session_id, + element_id=element_id, + ) + ) + + +@pytest.fixture +def check_user_prompt_not_closed_without_exception(session, create_dialog): + def check_user_prompt_not_closed_without_exception(dialog_type): + session.url = inline("") + element = session.find.css("input", all=False) + + create_dialog(dialog_type, text=dialog_type) + + response = take_element_screenshot(session, element.id) + value = assert_success(response) + + image = base64.decodestring(value) + assert imghdr.what("", image) == "png" + + assert session.alert.text == dialog_type + session.alert.dismiss() + + return check_user_prompt_not_closed_without_exception + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"}) +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) + + +@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"]) +def test_default(check_user_prompt_not_closed_without_exception, dialog_type): + check_user_prompt_not_closed_without_exception(dialog_type) From fc6300a6f9714d6dbd8cc9387f4abde0805903a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Thu, 30 Aug 2018 11:58:02 +1000 Subject: [PATCH 121/235] Test PaymentRequest onmerchantvalidation attribute (#12423) --- .../onmerchantvalidation-attribute.https.html | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 payment-request/onmerchantvalidation-attribute.https.html diff --git a/payment-request/onmerchantvalidation-attribute.https.html b/payment-request/onmerchantvalidation-attribute.https.html new file mode 100644 index 00000000000000..c0ed23167ed937 --- /dev/null +++ b/payment-request/onmerchantvalidation-attribute.https.html @@ -0,0 +1,69 @@ + + +Test for PaymentRequest's onmerchantvalidation attribute + + + + From 12c5fcbd23df121c4d3d540c7af16dd51c6d5cda Mon Sep 17 00:00:00 2001 From: Alice Boxhall Date: Wed, 29 Aug 2018 18:56:55 -0700 Subject: [PATCH 122/235] Move inert tests to top level directory and rename with .tentative MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove duplicate test which ended up in editing/focus/inert. Bug: 692360 Change-Id: I25571a7e731cd8ce5f1fce85e9d246939b78690b Reviewed-on: https://chromium-review.googlesource.com/1168267 Commit-Queue: Alice Boxhall Reviewed-by: Philip Jägenstedt Cr-Commit-Position: refs/heads/master@{#587399} --- ...nert-does-not-match-disabled-selector.html | 29 ------------------- ...not-match-disabled-selector.tentative.html | 0 .../inert-in-shadow-dom.tentative.html | 0 .../inert-inlines.tentative.html | 0 .../inert-label-focus.tentative.html | 0 .../inert-node-is-uneditable.tentative.html | 0 .../inert-node-is-unfocusable.tentative.html | 0 .../inert-node-is-unselectable.tentative.html | 0 8 files changed, 29 deletions(-) delete mode 100644 html/editing/focus/inert/inert-does-not-match-disabled-selector.html rename dom/inert/inert-does-not-match-disabled-selector.html => inert/inert-does-not-match-disabled-selector.tentative.html (100%) rename html/editing/focus/inert/inert-in-shadow-dom.html => inert/inert-in-shadow-dom.tentative.html (100%) rename html/editing/focus/inert/inert-inlines.html => inert/inert-inlines.tentative.html (100%) rename html/editing/focus/inert/inert-label-focus.html => inert/inert-label-focus.tentative.html (100%) rename html/editing/focus/inert/inert-node-is-uneditable.html => inert/inert-node-is-uneditable.tentative.html (100%) rename html/editing/focus/inert/inert-node-is-unfocusable.html => inert/inert-node-is-unfocusable.tentative.html (100%) rename html/editing/focus/inert/inert-node-is-unselectable.html => inert/inert-node-is-unselectable.tentative.html (100%) diff --git a/html/editing/focus/inert/inert-does-not-match-disabled-selector.html b/html/editing/focus/inert/inert-does-not-match-disabled-selector.html deleted file mode 100644 index defc7cd6c49da5..00000000000000 --- a/html/editing/focus/inert/inert-does-not-match-disabled-selector.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - inert does not match :disabled selector - - - - - - - - - - diff --git a/dom/inert/inert-does-not-match-disabled-selector.html b/inert/inert-does-not-match-disabled-selector.tentative.html similarity index 100% rename from dom/inert/inert-does-not-match-disabled-selector.html rename to inert/inert-does-not-match-disabled-selector.tentative.html diff --git a/html/editing/focus/inert/inert-in-shadow-dom.html b/inert/inert-in-shadow-dom.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-in-shadow-dom.html rename to inert/inert-in-shadow-dom.tentative.html diff --git a/html/editing/focus/inert/inert-inlines.html b/inert/inert-inlines.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-inlines.html rename to inert/inert-inlines.tentative.html diff --git a/html/editing/focus/inert/inert-label-focus.html b/inert/inert-label-focus.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-label-focus.html rename to inert/inert-label-focus.tentative.html diff --git a/html/editing/focus/inert/inert-node-is-uneditable.html b/inert/inert-node-is-uneditable.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-node-is-uneditable.html rename to inert/inert-node-is-uneditable.tentative.html diff --git a/html/editing/focus/inert/inert-node-is-unfocusable.html b/inert/inert-node-is-unfocusable.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-node-is-unfocusable.html rename to inert/inert-node-is-unfocusable.tentative.html diff --git a/html/editing/focus/inert/inert-node-is-unselectable.html b/inert/inert-node-is-unselectable.tentative.html similarity index 100% rename from html/editing/focus/inert/inert-node-is-unselectable.html rename to inert/inert-node-is-unselectable.tentative.html From 7078352c08e4aafbd6714577b50753e5d28ca472 Mon Sep 17 00:00:00 2001 From: Yutaka Hirano Date: Thu, 30 Aug 2018 02:50:47 -0700 Subject: [PATCH 123/235] Remove ad-hoc CORS logic from TextTrackLoader As specified in [1], it should use "same-origin" request mode rather than having ad-hoc CORS logic in TextTrackLoader. Now a response from service worker with type "cors" is rejected. The new behavior is actually more spec compliant (and matching with Firfox), so fix the corresponding web platform test. 1: https://html.spec.whatwg.org/multipage/media.html#start-the-track-processing-model Bug: 875153 Change-Id: Ib39ed9684528d734c9ca3d40eb8f6890c77af986 Reviewed-on: https://chromium-review.googlesource.com/1195446 Commit-Queue: Yutaka Hirano Reviewed-by: Matt Falkenhagen Reviewed-by: Kinuko Yasuda Cr-Commit-Position: refs/heads/master@{#587492} --- .../webvtt-cross-origin.https.html | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/service-workers/service-worker/webvtt-cross-origin.https.html b/service-workers/service-worker/webvtt-cross-origin.https.html index 637f494e4c1e69..9394ff75c4a5f3 100644 --- a/service-workers/service-worker/webvtt-cross-origin.https.html +++ b/service-workers/service-worker/webvtt-cross-origin.https.html @@ -7,11 +7,14 @@ From 3c7a5abcc62c70d7dd6982d3647196ef421f6cdd Mon Sep 17 00:00:00 2001 From: Orsi Batiz Date: Thu, 30 Aug 2018 06:04:24 -0700 Subject: [PATCH 124/235] TrustedTypes: Added TrustedTypes.getExposedPolicy(name) & minor changes Added TrustedTypes.getExposedPolicy(name) and bool exposed in TrustedTypePolicyOptions Added test Changed Vector of created policies into Map of created policies Bug: 739170 Change-Id: Ib5fe7a14ddadb88e3de70ee55f2783b9d10a01b5 Reviewed-on: https://chromium-review.googlesource.com/1193869 Commit-Queue: Orsolya Bernadett Batiz Reviewed-by: Mike West Cr-Commit-Position: refs/heads/master@{#587534} --- ...y-createPolicy-exposedTests.tentative.html | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html diff --git a/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html b/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html new file mode 100644 index 00000000000000..af6e04941c3b62 --- /dev/null +++ b/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html @@ -0,0 +1,24 @@ + + + + + + From b671cd082e6996bcdaec391f3734787668688b06 Mon Sep 17 00:00:00 2001 From: Mike West Date: Thu, 30 Aug 2018 06:04:32 -0700 Subject: [PATCH 125/235] Remove 'cookies/secure/create-cookie-http.html' This test is broken; every browser fails it in the same way, and the thing it actually intends to cover is addressed by the other six tests in https://wpt.fyi/results/cookies/secure. Change-Id: Ib7b8534b35ae16490f2cf71e67936b5636e33fbe Reviewed-on: https://chromium-review.googlesource.com/1196544 Reviewed-by: Friedrich Horschig [CEST] Commit-Queue: Mike West Cr-Commit-Position: refs/heads/master@{#587535} --- cookies/secure/create-cookie-http.html | 38 -------------------------- 1 file changed, 38 deletions(-) delete mode 100644 cookies/secure/create-cookie-http.html diff --git a/cookies/secure/create-cookie-http.html b/cookies/secure/create-cookie-http.html deleted file mode 100644 index 425f66fde5cbdc..00000000000000 --- a/cookies/secure/create-cookie-http.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - From d9bcf59e3942bdbfd165e1010acc0ad1427491ba Mon Sep 17 00:00:00 2001 From: Anders Hartvoll Ruud Date: Thu, 30 Aug 2018 06:04:39 -0700 Subject: [PATCH 126/235] [css-properties-values-api] Support string values in StylePropertyMap.set. When producing a CSSStyleValue from a string for a registered custom property, parse the value according to the syntax instead of always creating a CSSUnparsedValue. Note that and are still not supported, because CSSUnsupportedProperty does not work properly for registered custom properties (yet). R=futhark@chromium.org Bug: 641877 Change-Id: I806eb5b0c5112956e34457808791367423587c76 Reviewed-on: https://chromium-review.googlesource.com/1177755 Commit-Queue: Anders Ruud Reviewed-by: Rune Lillesveen Cr-Commit-Position: refs/heads/master@{#587537} --- .../typedom.tentative.html | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/css/css-properties-values-api/typedom.tentative.html b/css/css-properties-values-api/typedom.tentative.html index 69ebf7a13d8cf3..c28f1869bc2c03 100644 --- a/css/css-properties-values-api/typedom.tentative.html +++ b/css/css-properties-values-api/typedom.tentative.html @@ -341,99 +341,99 @@ test_style_property_map_set({ syntax: '', initialValue: '0deg', - shouldAccept: [CSS.deg(42), CSS.turn(2)], - shouldReject: [unparsed('42deg'), CSS.px(15)], + shouldAccept: [CSS.deg(42), CSS.turn(2), '42deg'], + shouldReject: [unparsed('42deg'), CSS.px(15), '50px'], }); test_style_property_map_set({ syntax: '', initialValue: 'none', - shouldAccept: [keyword('foo')], - shouldReject: [unparsed('foo'), CSS.px(15)], + shouldAccept: [keyword('foo'), 'foo'], + shouldReject: [unparsed('foo'), CSS.px(15), '15px'], }); test_style_property_map_set({ syntax: '', initialValue: 'url(a)', - shouldAccept: [url_image('url(b)')], - shouldReject: [unparsed('url(b)'), CSS.px(100)], + shouldAccept: [url_image('url(b)'), 'url(b)'], + shouldReject: [unparsed('url(b)'), CSS.px(100), '50px'], }); test_style_property_map_set({ syntax: '', initialValue: '0', - shouldAccept: [CSS.number(1), CSS.number(-42)], - shouldReject: [unparsed('42'), CSS.px(100)], + shouldAccept: [CSS.number(1), CSS.number(-42), '1', '-42'], + shouldReject: [unparsed('42'), CSS.px(100), '50px'], }); test_style_property_map_set({ syntax: '', initialValue: '0px', - shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1)], - shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1)], + shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1), '10px', '10%'], + shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1), 'url(b)'], }); test_style_property_map_set({ syntax: '', initialValue: '0px', - shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20))], - shouldReject: [unparsed('10px'), CSS.percent(1)], + shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20)), '10em', 'calc(10px + 10em)'], + shouldReject: [unparsed('10px'), CSS.percent(1), 'url(b)'], }); test_style_property_map_set({ syntax: '', initialValue: '0', - shouldAccept: [CSS.number(1337), CSS.number(-42.5)], - shouldReject: [unparsed('42'), CSS.px(15)], + shouldAccept: [CSS.number(1337), CSS.number(-42.5), '1337', '-42.5'], + shouldReject: [unparsed('42'), CSS.px(15), '#fef'], }); test_style_property_map_set({ syntax: '', initialValue: '0%', - shouldAccept: [CSS.percent(10)], - shouldReject: [unparsed('10%'), CSS.px(1)], + shouldAccept: [CSS.percent(10), '10%'], + shouldReject: [unparsed('10%'), CSS.px(1), '#fef'], }); test_style_property_map_set({ syntax: '', initialValue: '0dpi', - shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50)], - shouldReject: [unparsed('42'), CSS.px(15)], + shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50), '100dpi'], + shouldReject: [unparsed('42'), CSS.px(15), '#fef'], }); test_style_property_map_set({ syntax: '