Re-sync dom web-platform-tests from upstream
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2019 16:39:02 +0000 (16:39 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2019 16:39:02 +0000 (16:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=201697

Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

Re-sync dom web-platform-tests from upstream ab331d317554a3ba61.

* web-platform-tests/dom/META.yml: Added.
* web-platform-tests/dom/OWNERS: Removed.
* web-platform-tests/dom/abort/w3c-import.log:
* web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws-expected.txt: Removed.
* web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html: Removed.
* web-platform-tests/dom/collections/HTMLCollection-as-prototype-expected.txt: Added.
* web-platform-tests/dom/collections/HTMLCollection-as-prototype.html: Added.
* web-platform-tests/dom/collections/HTMLCollection-delete-expected.txt: Added.
* web-platform-tests/dom/collections/HTMLCollection-delete.html: Added.
* web-platform-tests/dom/collections/w3c-import.log:
* web-platform-tests/dom/historical-expected.txt:
* web-platform-tests/dom/historical.html:
* web-platform-tests/dom/idlharness.any.html: Added.
* web-platform-tests/dom/idlharness.any.js: Added.
* web-platform-tests/dom/idlharness.any.worker-expected.txt: Added.
* web-platform-tests/dom/idlharness.any.worker.html: Added.
* web-platform-tests/dom/idlharness.window-expected.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt.
* web-platform-tests/dom/idlharness.window.html: Added.
* web-platform-tests/dom/idlharness.window.js: Added.
* web-platform-tests/dom/interfaces.html: Removed.
* web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt:
* web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html:
* web-platform-tests/dom/lists/w3c-import.log:
* web-platform-tests/dom/nodes/Comment-Text-constructor.js:
* web-platform-tests/dom/nodes/DOMImplementation-createDocument-expected.txt:
* web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js:
(test_getElementsByTagName):
* web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js:
(test_getElementsByTagNameNS):
* web-platform-tests/dom/nodes/Document-URL-expected.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub-expected.txt.
* web-platform-tests/dom/nodes/Document-URL.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub.html.
* web-platform-tests/dom/nodes/Document-constructor-expected.txt:
* web-platform-tests/dom/nodes/Document-constructor-svg.svg: Removed.
* web-platform-tests/dom/nodes/Document-constructor.html:
* web-platform-tests/dom/nodes/Document-contentType/contentType/w3c-import.log:
* web-platform-tests/dom/nodes/Document-contentType/resources/w3c-import.log:
* web-platform-tests/dom/nodes/Document-contentType/support/w3c-import.log:
* web-platform-tests/dom/nodes/Document-createAttribute-expected.txt:
* web-platform-tests/dom/nodes/Document-createAttribute.html:
* web-platform-tests/dom/nodes/Document-createElement-expected.txt:
* web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log:
* web-platform-tests/dom/nodes/Document-createElement-namespace.html:
* web-platform-tests/dom/nodes/Document-createElement.html:
* web-platform-tests/dom/nodes/Document-createElementNS-expected.txt:
* web-platform-tests/dom/nodes/Document-createElementNS.js:
* web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt: Added.
* web-platform-tests/dom/nodes/Document-createEvent.https.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html.
* web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt: Added.
* web-platform-tests/dom/nodes/Document-getElementsByClassName.html: Added.
* web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
* web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByClassName.html:
* web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt:
* web-platform-tests/dom/nodes/Element-matches-expected.txt:
* web-platform-tests/dom/nodes/Element-webkitMatchesSelector-expected.txt:
* web-platform-tests/dom/nodes/Node-childNodes-expected.txt:
* web-platform-tests/dom/nodes/Node-childNodes.html:
* web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
* web-platform-tests/dom/nodes/Node-cloneNode.html:
* web-platform-tests/dom/nodes/Node-insertBefore-expected.txt:
* web-platform-tests/dom/nodes/Node-insertBefore.html:
* web-platform-tests/dom/nodes/Node-normalize-expected.txt:
* web-platform-tests/dom/nodes/Node-normalize.html:
* web-platform-tests/dom/nodes/Node-replaceChild-expected.txt:
* web-platform-tests/dom/nodes/Node-replaceChild.html:
* web-platform-tests/dom/nodes/Node-textContent.html:
* web-platform-tests/dom/nodes/ParentNode-children-expected.txt: Added.
* web-platform-tests/dom/nodes/ParentNode-children.html: Added.
* web-platform-tests/dom/nodes/ParentNode-querySelector-All-expected.txt:
* web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht-expected.txt:
* web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht:
* web-platform-tests/dom/nodes/ParentNode-querySelector-All.html:
* web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt: Added.
* web-platform-tests/dom/nodes/aria-element-reflection.tentative.html: Added.
* web-platform-tests/dom/nodes/attributes.html:
* web-platform-tests/dom/nodes/pre-insertion-checks.js: Added.
(getNonParentNodes):
(getNonInsertableNodes):
(getNonDocumentParentNodes):
(test):
* web-platform-tests/dom/nodes/productions.js:
* web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt: Added.
* web-platform-tests/dom/nodes/query-target-in-load-event.html: Added.
* web-platform-tests/dom/nodes/query-target-in-load-event.part.html: Added.
* web-platform-tests/dom/nodes/remove-and-adopt-crash-expected.txt: Added.
* web-platform-tests/dom/nodes/remove-and-adopt-crash.html: Added.
* web-platform-tests/dom/nodes/rootNode-expected.txt:
* web-platform-tests/dom/nodes/rootNode.html:
* web-platform-tests/dom/nodes/selectors.js:
* web-platform-tests/dom/nodes/w3c-import.log:
* web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt: Added.
* web-platform-tests/dom/ranges/Range-intersectsNode-2.html: Added.
* web-platform-tests/dom/ranges/w3c-import.log:
* web-platform-tests/dom/w3c-import.log:

LayoutTests:

* TestExpectations:
* platform/mac-wk2/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
* tests-options.json:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@249811 268f45cc-cd09-0410-ab3c-d52691b4dbfc

99 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/dom/META.yml [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS [deleted file]
LayoutTests/imported/w3c/web-platform-tests/dom/abort/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws-expected.txt [deleted file]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html [deleted file]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/collections/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/historical-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/historical.html
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.js [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window-expected.txt [moved from LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt with 97% similarity]
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.js [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html [deleted file]
LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html
LayoutTests/imported/w3c/web-platform-tests/dom/lists/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Comment-Text-constructor.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/DOMImplementation-createDocument-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL-expected.txt [moved from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub-expected.txt with 100% similarity]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.html [moved from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub.html with 88% similarity]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-svg.svg [deleted file]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-contentType/contentType/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-contentType/resources/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-contentType/support/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createAttribute-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createAttribute.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElementNS-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElementNS.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https.html [moved from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html with 100% similarity]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-matches-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-webkitMatchesSelector-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-insertBefore-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-insertBefore.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-replaceChild-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-replaceChild.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-textContent.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/pre-insertion-checks.js [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/productions.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/rootNode-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/rootNode.html
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/selectors.js
LayoutTests/imported/w3c/web-platform-tests/dom/nodes/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/dom/ranges/w3c-import.log
LayoutTests/imported/w3c/web-platform-tests/dom/w3c-import.log
LayoutTests/platform/gtk/TestExpectations
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt
LayoutTests/platform/ios/TestExpectations
LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt
LayoutTests/platform/win/TestExpectations
LayoutTests/tests-options.json

index b017fde..529c9a8 100644 (file)
@@ -1,3 +1,14 @@
+2019-09-12  Chris Dumez  <cdumez@apple.com>
+
+        Re-sync dom web-platform-tests from upstream
+        https://bugs.webkit.org/show_bug.cgi?id=201697
+
+        Reviewed by Youenn Fablet.
+
+        * TestExpectations:
+        * platform/mac-wk2/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
+        * tests-options.json:
+
 2019-09-12  Devin Rousso  <drousso@apple.com>
 
         REGRESSION? (r249786): inspector/canvas/context-attributes.html is failing on macOS WK1
index 76ad5bf..22915c7 100644 (file)
@@ -577,7 +577,6 @@ imported/w3c/web-platform-tests/css/css-ui/text-overflow-012.html [ ImageOnlyFai
 imported/w3c/web-platform-tests/css/css-ui/text-overflow-015.html [ ImageOnlyFailure ]
 imported/w3c/web-platform-tests/css/css-ui/text-overflow-017.html [ ImageOnlyFailure ]
 imported/w3c/web-platform-tests/css/css-ui/text-overflow-021.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/dom/nodes/Document-constructor-svg.svg [ Timeout ]
 imported/w3c/web-platform-tests/fetch/security/dangling-markup-mitigation.tentative.html [ Pass Failure ]
 imported/w3c/web-platform-tests/hr-time/timeOrigin.html [ Failure ]
 imported/w3c/web-platform-tests/eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm [ Skip ]
@@ -892,7 +891,6 @@ webkit.org/b/137149 fast/selectors/nth-child-of-basics.html [ Slow ]
 webkit.org/b/136878 js/promises-tests/promises-tests-2-3-3.html [ Slow ]
 
 # Skip W3C tests that are too slow in debug builds.
-webkit.org/b/148546 [ Debug ] imported/w3c/web-platform-tests/dom/interfaces.html [ Skip ]
 webkit.org/b/148546 [ Debug ] imported/w3c/web-platform-tests/dom/ranges/Range-compareBoundaryPoints.html [ Skip ]
 webkit.org/b/148546 [ Debug ] imported/w3c/web-platform-tests/dom/ranges/Range-comparePoint.html [ Skip ]
 webkit.org/b/148546 [ Debug ] imported/w3c/web-platform-tests/dom/ranges/Range-isPointInRange.html [ Skip ]
@@ -1600,6 +1598,7 @@ imported/w3c/web-platform-tests/webrtc/RTCDataChannel-bufferedAmount.html [ Skip
 imported/w3c/web-platform-tests/webrtc/RTCTrackEvent-fire.html [ Skip ]
 imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/iceGatheringState.html [ Skip ]
 imported/w3c/web-platform-tests/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Skip ]
+imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash.html [ Skip ]
 
 # Uses legacy WebRTC API.
 imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/setRemoteDescription.html [ Skip ]
index 0dfd322..d89af0c 100644 (file)
@@ -1,3 +1,109 @@
+2019-09-12  Chris Dumez  <cdumez@apple.com>
+
+        Re-sync dom web-platform-tests from upstream
+        https://bugs.webkit.org/show_bug.cgi?id=201697
+
+        Reviewed by Youenn Fablet.
+
+        Re-sync dom web-platform-tests from upstream ab331d317554a3ba61.
+
+        * web-platform-tests/dom/META.yml: Added.
+        * web-platform-tests/dom/OWNERS: Removed.
+        * web-platform-tests/dom/abort/w3c-import.log:
+        * web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws-expected.txt: Removed.
+        * web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html: Removed.
+        * web-platform-tests/dom/collections/HTMLCollection-as-prototype-expected.txt: Added.
+        * web-platform-tests/dom/collections/HTMLCollection-as-prototype.html: Added.
+        * web-platform-tests/dom/collections/HTMLCollection-delete-expected.txt: Added.
+        * web-platform-tests/dom/collections/HTMLCollection-delete.html: Added.
+        * web-platform-tests/dom/collections/w3c-import.log:
+        * web-platform-tests/dom/historical-expected.txt:
+        * web-platform-tests/dom/historical.html:
+        * web-platform-tests/dom/idlharness.any.html: Added.
+        * web-platform-tests/dom/idlharness.any.js: Added.
+        * web-platform-tests/dom/idlharness.any.worker-expected.txt: Added.
+        * web-platform-tests/dom/idlharness.any.worker.html: Added.
+        * web-platform-tests/dom/idlharness.window-expected.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt.
+        * web-platform-tests/dom/idlharness.window.html: Added.
+        * web-platform-tests/dom/idlharness.window.js: Added.
+        * web-platform-tests/dom/interfaces.html: Removed.
+        * web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt:
+        * web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html:
+        * web-platform-tests/dom/lists/w3c-import.log:
+        * web-platform-tests/dom/nodes/Comment-Text-constructor.js:
+        * web-platform-tests/dom/nodes/DOMImplementation-createDocument-expected.txt:
+        * web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js:
+        (test_getElementsByTagName):
+        * web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js:
+        (test_getElementsByTagNameNS):
+        * web-platform-tests/dom/nodes/Document-URL-expected.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub-expected.txt.
+        * web-platform-tests/dom/nodes/Document-URL.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub.html.
+        * web-platform-tests/dom/nodes/Document-constructor-expected.txt:
+        * web-platform-tests/dom/nodes/Document-constructor-svg.svg: Removed.
+        * web-platform-tests/dom/nodes/Document-constructor.html:
+        * web-platform-tests/dom/nodes/Document-contentType/contentType/w3c-import.log:
+        * web-platform-tests/dom/nodes/Document-contentType/resources/w3c-import.log:
+        * web-platform-tests/dom/nodes/Document-contentType/support/w3c-import.log:
+        * web-platform-tests/dom/nodes/Document-createAttribute-expected.txt:
+        * web-platform-tests/dom/nodes/Document-createAttribute.html:
+        * web-platform-tests/dom/nodes/Document-createElement-expected.txt:
+        * web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log:
+        * web-platform-tests/dom/nodes/Document-createElement-namespace.html:
+        * web-platform-tests/dom/nodes/Document-createElement.html:
+        * web-platform-tests/dom/nodes/Document-createElementNS-expected.txt:
+        * web-platform-tests/dom/nodes/Document-createElementNS.js:
+        * web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt: Added.
+        * web-platform-tests/dom/nodes/Document-createEvent.https.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html.
+        * web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt: Added.
+        * web-platform-tests/dom/nodes/Document-getElementsByClassName.html: Added.
+        * web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
+        * web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt:
+        * web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt:
+        * web-platform-tests/dom/nodes/Element-getElementsByClassName.html:
+        * web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
+        * web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt:
+        * web-platform-tests/dom/nodes/Element-matches-expected.txt:
+        * web-platform-tests/dom/nodes/Element-webkitMatchesSelector-expected.txt:
+        * web-platform-tests/dom/nodes/Node-childNodes-expected.txt:
+        * web-platform-tests/dom/nodes/Node-childNodes.html:
+        * web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
+        * web-platform-tests/dom/nodes/Node-cloneNode.html:
+        * web-platform-tests/dom/nodes/Node-insertBefore-expected.txt:
+        * web-platform-tests/dom/nodes/Node-insertBefore.html:
+        * web-platform-tests/dom/nodes/Node-normalize-expected.txt:
+        * web-platform-tests/dom/nodes/Node-normalize.html:
+        * web-platform-tests/dom/nodes/Node-replaceChild-expected.txt:
+        * web-platform-tests/dom/nodes/Node-replaceChild.html:
+        * web-platform-tests/dom/nodes/Node-textContent.html:
+        * web-platform-tests/dom/nodes/ParentNode-children-expected.txt: Added.
+        * web-platform-tests/dom/nodes/ParentNode-children.html: Added.
+        * web-platform-tests/dom/nodes/ParentNode-querySelector-All-expected.txt:
+        * web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht-expected.txt:
+        * web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht:
+        * web-platform-tests/dom/nodes/ParentNode-querySelector-All.html:
+        * web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt: Added.
+        * web-platform-tests/dom/nodes/aria-element-reflection.tentative.html: Added.
+        * web-platform-tests/dom/nodes/attributes.html:
+        * web-platform-tests/dom/nodes/pre-insertion-checks.js: Added.
+        (getNonParentNodes):
+        (getNonInsertableNodes):
+        (getNonDocumentParentNodes):
+        (test):
+        * web-platform-tests/dom/nodes/productions.js:
+        * web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt: Added.
+        * web-platform-tests/dom/nodes/query-target-in-load-event.html: Added.
+        * web-platform-tests/dom/nodes/query-target-in-load-event.part.html: Added.
+        * web-platform-tests/dom/nodes/remove-and-adopt-crash-expected.txt: Added.
+        * web-platform-tests/dom/nodes/remove-and-adopt-crash.html: Added.
+        * web-platform-tests/dom/nodes/rootNode-expected.txt:
+        * web-platform-tests/dom/nodes/rootNode.html:
+        * web-platform-tests/dom/nodes/selectors.js:
+        * web-platform-tests/dom/nodes/w3c-import.log:
+        * web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt: Added.
+        * web-platform-tests/dom/ranges/Range-intersectsNode-2.html: Added.
+        * web-platform-tests/dom/ranges/w3c-import.log:
+        * web-platform-tests/dom/w3c-import.log:
+
 2019-09-11  Chris Dumez  <cdumez@apple.com>
 
         Use same parser for <meta http-equiv="refresh"> and `Refresh` HTTP header
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/META.yml b/LayoutTests/imported/w3c/web-platform-tests/dom/META.yml
new file mode 100644 (file)
index 0000000..6fd5b12
--- /dev/null
@@ -0,0 +1,5 @@
+spec: https://dom.spec.whatwg.org/
+suggested_reviewers:
+  - jdm
+  - zqzhang
+  - annevk
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS
deleted file mode 100644 (file)
index 487f8dd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-@ayg
-@jdm
-@zqzhang
index 7ae8af0..fd1e31c 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws-expected.txt
deleted file mode 100644 (file)
index 0cf73eb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-PASS HTMLcollection as a prototype should not allow getting .length on the base object 
-
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html
deleted file mode 100644 (file)
index 225c9e6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>Make sure browsers throw when getting .length on some random object whose proto is an HTMLCollection</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script>
-test(function() {
-  var obj = Object.create(document.getElementsByTagName("script"));
-  assert_throws(new TypeError(), function() {
-    obj.length;
-  });
-}, "HTMLcollection as a prototype should not allow getting .length on the base object")
-</script>
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype-expected.txt
new file mode 100644 (file)
index 0000000..a12874b
--- /dev/null
@@ -0,0 +1,4 @@
+
+PASS HTMLCollection as a prototype should not allow getting .length on the base object 
+PASS HTMLCollection as a prototype and setting own properties 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype.html b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype.html
new file mode 100644 (file)
index 0000000..75546a7
--- /dev/null
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Objects whose prototype is an HTMLCollection</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+  var obj = Object.create(document.getElementsByTagName("script"));
+  assert_throws(new TypeError(), function() {
+    obj.length;
+  });
+}, "HTMLCollection as a prototype should not allow getting .length on the base object")
+
+test(function() {
+  var element = document.createElement("p");
+  element.id = "named";
+  document.body.appendChild(element);
+  this.add_cleanup(function() { element.remove() });
+
+  var collection = document.getElementsByTagName("p");
+  assert_equals(collection.named, element);
+  var object = Object.create(collection);
+  assert_equals(object.named, element);
+  object.named = "foo";
+  assert_equals(object.named, "foo");
+  assert_equals(collection.named, element);
+}, "HTMLCollection as a prototype and setting own properties")
+</script>
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete-expected.txt
new file mode 100644 (file)
index 0000000..fcab296
--- /dev/null
@@ -0,0 +1,12 @@
+
+PASS Loose id 
+FAIL Strict id assert_throws: function "function () {
+    "use strict";
+    delete c[0];
+  }" did not throw
+PASS Loose name 
+FAIL Strict name assert_throws: function "function () {
+    "use strict";
+    delete c.foo;
+  }" did not throw
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete.html b/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete.html
new file mode 100644 (file)
index 0000000..6f5b932
--- /dev/null
@@ -0,0 +1,45 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Deleting properties from HTMLCollection</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<i id=foo></i>
+<script>
+let c, expected;
+setup(() => {
+  // These might be cached anyway, so explicitly use a single object.
+  c = document.getElementsByTagName("i");
+  expected = document.getElementById("foo");
+});
+
+test(() => {
+  assert_equals(c[0], expected, "before");
+  delete c[0];
+  assert_equals(c[0], expected, "after");
+}, "Loose id");
+
+test(() => {
+  assert_equals(c[0], expected, "before");
+  assert_throws(new TypeError(), function() {
+    "use strict";
+    delete c[0];
+  });
+  assert_equals(c[0], expected, "after");
+}, "Strict id");
+
+test(() => {
+  assert_equals(c.foo, expected, "before");
+  delete c.foo;
+  assert_equals(c.foo, expected, "after");
+}, "Loose name");
+
+test(() => {
+  assert_equals(c.foo, expected, "before");
+  assert_throws(new TypeError(), function() {
+    "use strict";
+    delete c.foo;
+  });
+  assert_equals(c.foo, expected, "after");
+}, "Strict name");
+</script>
index c8a103f..d2c850a 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
@@ -14,7 +14,8 @@ Property values requiring vendor prefixes:
 None
 ------------------------------------------------------------------------
 List of files:
-/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-proto-length-get-throws.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-as-prototype.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-delete.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-empty-name.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-indices.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names.html
index 8071f1f..14c73e5 100644 (file)
@@ -1,11 +1,13 @@
 
 PASS Historical DOM features must be removed: DOMConfiguration 
+PASS Historical DOM features must be removed: DOMCursor 
 PASS Historical DOM features must be removed: DOMError 
 PASS Historical DOM features must be removed: DOMErrorHandler 
 PASS Historical DOM features must be removed: DOMImplementationList 
 PASS Historical DOM features must be removed: DOMImplementationSource 
 PASS Historical DOM features must be removed: DOMLocator 
 PASS Historical DOM features must be removed: DOMObject 
+PASS Historical DOM features must be removed: DOMRequest 
 PASS Historical DOM features must be removed: DOMSettableTokenList 
 PASS Historical DOM features must be removed: DOMUserData 
 PASS Historical DOM features must be removed: Entity 
@@ -31,6 +33,7 @@ PASS Historical DOM features must be removed: commands
 PASS Historical DOM features must be removed: cssElementMap 
 PASS Historical DOM features must be removed: async 
 PASS document.load 
+PASS XMLDocument.load 
 PASS DOMImplementation.getFeature() must be nuked. 
 PASS Historical DOM features must be removed: schemaTypeInfo 
 PASS Historical DOM features must be removed: setIdAttribute 
index 388366c..921fa07 100644 (file)
@@ -12,12 +12,14 @@ function isInterfaceNuked(name) {
 }
 var nukedInterfaces = [
   "DOMConfiguration",
+  "DOMCursor",
   "DOMError",
   "DOMErrorHandler",
   "DOMImplementationList",
   "DOMImplementationSource",
   "DOMLocator",
   "DOMObject",
+  "DOMRequest",
   "DOMSettableTokenList",
   "DOMUserData",
   "Entity",
@@ -65,6 +67,12 @@ test(function() {
 }, "document.load");
 
 test(function() {
+  // https://github.com/whatwg/html/commit/523f7a8773d2ab8a1eb0da6510651e8c5d2a7531
+  var doc = document.implementation.createDocument(null, null, null);
+  assert_false("load" in doc);
+}, "XMLDocument.load");
+
+test(function() {
   assert_equals(document.implementation["getFeature"], undefined)
 }, "DOMImplementation.getFeature() must be nuked.")
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.js b/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.js
new file mode 100644 (file)
index 0000000..5119f9f
--- /dev/null
@@ -0,0 +1,25 @@
+// META: global=!window,worker
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: timeout=long
+
+// Note: This test doesn't cover the Window context, see idlharness.window.js
+// for that coverage and why it can't be merged into this test.
+
+'use strict';
+
+idl_test(
+  ['dom'],
+  ['html'],
+  idl_array => {
+    idl_array.add_objects({
+      EventTarget: ['new EventTarget()'],
+      Event: ['new Event("foo")'],
+      CustomEvent: ['new CustomEvent("foo")'],
+      AbortController: ['new AbortController()'],
+      AbortSignal: ['new AbortController().signal'],
+    });
+  }
+);
+
+done();
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker-expected.txt
new file mode 100644 (file)
index 0000000..f586b37
--- /dev/null
@@ -0,0 +1,177 @@
+
+PASS idl_test setup 
+PASS Partial interface Window: original interface defined 
+PASS Event interface: existence and properties of interface object 
+PASS Event interface object length 
+PASS Event interface object name 
+PASS Event interface: existence and properties of interface prototype object 
+PASS Event interface: existence and properties of interface prototype object's "constructor" property 
+PASS Event interface: existence and properties of interface prototype object's @@unscopables property 
+PASS Event interface: attribute type 
+PASS Event interface: attribute target 
+PASS Event interface: attribute srcElement 
+PASS Event interface: attribute currentTarget 
+PASS Event interface: operation composedPath() 
+PASS Event interface: constant NONE on interface object 
+PASS Event interface: constant NONE on interface prototype object 
+PASS Event interface: constant CAPTURING_PHASE on interface object 
+PASS Event interface: constant CAPTURING_PHASE on interface prototype object 
+PASS Event interface: constant AT_TARGET on interface object 
+PASS Event interface: constant AT_TARGET on interface prototype object 
+PASS Event interface: constant BUBBLING_PHASE on interface object 
+PASS Event interface: constant BUBBLING_PHASE on interface prototype object 
+PASS Event interface: attribute eventPhase 
+PASS Event interface: operation stopPropagation() 
+PASS Event interface: attribute cancelBubble 
+PASS Event interface: operation stopImmediatePropagation() 
+PASS Event interface: attribute bubbles 
+PASS Event interface: attribute cancelable 
+PASS Event interface: attribute returnValue 
+PASS Event interface: operation preventDefault() 
+PASS Event interface: attribute defaultPrevented 
+PASS Event interface: attribute composed 
+PASS Event interface: attribute timeStamp 
+PASS Event interface: operation initEvent(DOMString, boolean, boolean) 
+PASS Event must be primary interface of new Event("foo") 
+PASS Stringification of new Event("foo") 
+PASS Event interface: new Event("foo") must inherit property "type" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "target" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "srcElement" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "currentTarget" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "composedPath()" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "NONE" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "CAPTURING_PHASE" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "AT_TARGET" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "BUBBLING_PHASE" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "eventPhase" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "stopPropagation()" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "cancelBubble" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "stopImmediatePropagation()" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "bubbles" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "cancelable" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "returnValue" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "preventDefault()" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "defaultPrevented" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "composed" with the proper type 
+PASS Event interface: new Event("foo") must have own property "isTrusted" 
+PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type 
+PASS Event interface: new Event("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type 
+PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new Event("foo") with too few arguments must throw TypeError 
+PASS CustomEvent interface: existence and properties of interface object 
+PASS CustomEvent interface object length 
+PASS CustomEvent interface object name 
+PASS CustomEvent interface: existence and properties of interface prototype object 
+PASS CustomEvent interface: existence and properties of interface prototype object's "constructor" property 
+PASS CustomEvent interface: existence and properties of interface prototype object's @@unscopables property 
+PASS CustomEvent interface: attribute detail 
+PASS CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any) 
+PASS CustomEvent must be primary interface of new CustomEvent("foo") 
+PASS Stringification of new CustomEvent("foo") 
+PASS CustomEvent interface: new CustomEvent("foo") must inherit property "detail" with the proper type 
+PASS CustomEvent interface: new CustomEvent("foo") must inherit property "initCustomEvent(DOMString, boolean, boolean, any)" with the proper type 
+PASS CustomEvent interface: calling initCustomEvent(DOMString, boolean, boolean, any) on new CustomEvent("foo") with too few arguments must throw TypeError 
+PASS Event interface: new CustomEvent("foo") must inherit property "type" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "target" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "srcElement" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "currentTarget" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "composedPath()" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "NONE" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "CAPTURING_PHASE" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "AT_TARGET" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "BUBBLING_PHASE" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "eventPhase" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "stopPropagation()" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "cancelBubble" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "stopImmediatePropagation()" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "bubbles" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "cancelable" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "returnValue" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "preventDefault()" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "defaultPrevented" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "composed" with the proper type 
+PASS Event interface: new CustomEvent("foo") must have own property "isTrusted" 
+PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type 
+PASS Event interface: new CustomEvent("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type 
+PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new CustomEvent("foo") with too few arguments must throw TypeError 
+PASS EventTarget interface: existence and properties of interface object 
+PASS EventTarget interface object length 
+PASS EventTarget interface object name 
+PASS EventTarget interface: existence and properties of interface prototype object 
+PASS EventTarget interface: existence and properties of interface prototype object's "constructor" property 
+PASS EventTarget interface: existence and properties of interface prototype object's @@unscopables property 
+PASS EventTarget interface: operation addEventListener(DOMString, EventListener, [object Object],[object Object]) 
+PASS EventTarget interface: operation removeEventListener(DOMString, EventListener, [object Object],[object Object]) 
+PASS EventTarget interface: operation dispatchEvent(Event) 
+FAIL EventTarget must be primary interface of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL Stringification of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: new EventTarget() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: new EventTarget() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: new EventTarget() must inherit property "dispatchEvent(Event)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+FAIL EventTarget interface: calling dispatchEvent(Event) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')"
+PASS EventListener interface: existence and properties of interface object 
+PASS AbortController interface: existence and properties of interface object 
+PASS AbortController interface object length 
+PASS AbortController interface object name 
+PASS AbortController interface: existence and properties of interface prototype object 
+PASS AbortController interface: existence and properties of interface prototype object's "constructor" property 
+PASS AbortController interface: existence and properties of interface prototype object's @@unscopables property 
+PASS AbortController interface: attribute signal 
+PASS AbortController interface: operation abort() 
+PASS AbortController must be primary interface of new AbortController() 
+PASS Stringification of new AbortController() 
+PASS AbortController interface: new AbortController() must inherit property "signal" with the proper type 
+PASS AbortController interface: new AbortController() must inherit property "abort()" with the proper type 
+PASS AbortSignal interface: existence and properties of interface object 
+PASS AbortSignal interface object length 
+PASS AbortSignal interface object name 
+PASS AbortSignal interface: existence and properties of interface prototype object 
+PASS AbortSignal interface: existence and properties of interface prototype object's "constructor" property 
+PASS AbortSignal interface: existence and properties of interface prototype object's @@unscopables property 
+PASS AbortSignal interface: attribute aborted 
+PASS AbortSignal interface: attribute onabort 
+PASS AbortSignal must be primary interface of new AbortController().signal 
+PASS Stringification of new AbortController().signal 
+PASS AbortSignal interface: new AbortController().signal must inherit property "aborted" with the proper type 
+PASS AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type 
+PASS EventTarget interface: new AbortController().signal must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type 
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError 
+PASS EventTarget interface: new AbortController().signal must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type 
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError 
+PASS EventTarget interface: new AbortController().signal must inherit property "dispatchEvent(Event)" with the proper type 
+PASS EventTarget interface: calling dispatchEvent(Event) on new AbortController().signal with too few arguments must throw TypeError 
+PASS NodeList interface: existence and properties of interface object 
+PASS HTMLCollection interface: existence and properties of interface object 
+PASS MutationObserver interface: existence and properties of interface object 
+PASS MutationRecord interface: existence and properties of interface object 
+PASS Node interface: existence and properties of interface object 
+PASS Document interface: existence and properties of interface object 
+PASS XMLDocument interface: existence and properties of interface object 
+PASS DOMImplementation interface: existence and properties of interface object 
+PASS DocumentType interface: existence and properties of interface object 
+PASS DocumentFragment interface: existence and properties of interface object 
+PASS ShadowRoot interface: existence and properties of interface object 
+PASS Element interface: existence and properties of interface object 
+PASS NamedNodeMap interface: existence and properties of interface object 
+PASS Attr interface: existence and properties of interface object 
+PASS CharacterData interface: existence and properties of interface object 
+PASS Text interface: existence and properties of interface object 
+PASS CDATASection interface: existence and properties of interface object 
+PASS ProcessingInstruction interface: existence and properties of interface object 
+PASS Comment interface: existence and properties of interface object 
+PASS AbstractRange interface: existence and properties of interface object 
+PASS StaticRange interface: existence and properties of interface object 
+PASS Range interface: existence and properties of interface object 
+PASS NodeIterator interface: existence and properties of interface object 
+PASS TreeWalker interface: existence and properties of interface object 
+PASS NodeFilter interface: existence and properties of interface object 
+PASS DOMTokenList interface: existence and properties of interface object 
+PASS XPathResult interface: existence and properties of interface object 
+PASS XPathExpression interface: existence and properties of interface object 
+PASS XPathNSResolver interface: existence and properties of interface object 
+PASS XPathEvaluator interface: existence and properties of interface object 
+PASS HTMLElement interface: existence and properties of interface object 
+PASS HTMLSlotElement interface: existence and properties of interface object 
+PASS Window interface: existence and properties of interface object 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.worker.html
new file mode 100644 (file)
index 0000000..2382913
--- /dev/null
@@ -0,0 +1 @@
+<!-- This file is required for WebKit test infrastructure to run the templated test -->
\ No newline at end of file
@@ -1,7 +1,5 @@
-DOM IDL tests
 
-
-PASS Test driver 
+PASS idl_test setup 
 PASS Partial interface Window: original interface defined 
 PASS Event interface: existence and properties of interface object 
 PASS Event interface object length 
@@ -1765,6 +1763,28 @@ PASS XPathResult interface: attribute invalidIteratorState
 PASS XPathResult interface: attribute snapshotLength 
 PASS XPathResult interface: operation iterateNext() 
 FAIL XPathResult interface: operation snapshotItem(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
+PASS XPathResult must be primary interface of document.evaluate("//*", document.body) 
+PASS Stringification of document.evaluate("//*", document.body) 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "ANY_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "NUMBER_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "STRING_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "BOOLEAN_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "UNORDERED_NODE_ITERATOR_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "ORDERED_NODE_ITERATOR_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "UNORDERED_NODE_SNAPSHOT_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "ORDERED_NODE_SNAPSHOT_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "ANY_UNORDERED_NODE_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "FIRST_ORDERED_NODE_TYPE" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "resultType" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "numberValue" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "stringValue" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "booleanValue" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "singleNodeValue" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "invalidIteratorState" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "snapshotLength" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "iterateNext()" with the proper type 
+PASS XPathResult interface: document.evaluate("//*", document.body) must inherit property "snapshotItem(unsigned long)" with the proper type 
+PASS XPathResult interface: calling snapshotItem(unsigned long) on document.evaluate("//*", document.body) with too few arguments must throw TypeError 
 PASS XPathExpression interface: existence and properties of interface object 
 PASS XPathExpression interface object length 
 PASS XPathExpression interface object name 
@@ -1772,6 +1792,10 @@ PASS XPathExpression interface: existence and properties of interface prototype
 PASS XPathExpression interface: existence and properties of interface prototype object's "constructor" property 
 PASS XPathExpression interface: existence and properties of interface prototype object's @@unscopables property 
 PASS XPathExpression interface: operation evaluate(Node, unsigned short, XPathResult) 
+PASS XPathExpression must be primary interface of document.createExpression("//*") 
+PASS Stringification of document.createExpression("//*") 
+PASS XPathExpression interface: document.createExpression("//*") must inherit property "evaluate(Node, unsigned short, XPathResult)" with the proper type 
+PASS XPathExpression interface: calling evaluate(Node, unsigned short, XPathResult) on document.createExpression("//*") with too few arguments must throw TypeError 
 PASS XPathNSResolver interface: existence and properties of interface object 
 PASS XPathNSResolver interface: existence and properties of interface prototype object 
 PASS XPathNSResolver interface: existence and properties of interface prototype object's "constructor" property 
@@ -1786,5 +1810,15 @@ PASS XPathEvaluator interface: existence and properties of interface prototype o
 PASS XPathEvaluator interface: operation createExpression(DOMString, XPathNSResolver) 
 FAIL XPathEvaluator interface: operation createNSResolver(Node) assert_equals: property has wrong .length expected 1 but got 0
 PASS XPathEvaluator interface: operation evaluate(DOMString, Node, XPathNSResolver, unsigned short, XPathResult) 
+PASS XPathEvaluator must be primary interface of new XPathEvaluator() 
+PASS Stringification of new XPathEvaluator() 
+PASS XPathEvaluator interface: new XPathEvaluator() must inherit property "createExpression(DOMString, XPathNSResolver)" with the proper type 
+PASS XPathEvaluator interface: calling createExpression(DOMString, XPathNSResolver) on new XPathEvaluator() with too few arguments must throw TypeError 
+PASS XPathEvaluator interface: new XPathEvaluator() must inherit property "createNSResolver(Node)" with the proper type 
+FAIL XPathEvaluator interface: calling createNSResolver(Node) on new XPathEvaluator() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+            fn.apply(obj, args);
+        }" did not throw
+PASS XPathEvaluator interface: new XPathEvaluator() must inherit property "evaluate(DOMString, Node, XPathNSResolver, unsigned short, XPathResult)" with the proper type 
+PASS XPathEvaluator interface: calling evaluate(DOMString, Node, XPathNSResolver, unsigned short, XPathResult) on new XPathEvaluator() with too few arguments must throw TypeError 
 PASS Window interface: attribute event 
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.html b/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.html
new file mode 100644 (file)
index 0000000..2382913
--- /dev/null
@@ -0,0 +1 @@
+<!-- This file is required for WebKit test infrastructure to run the templated test -->
\ No newline at end of file
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.js b/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.js
new file mode 100644 (file)
index 0000000..24b56cf
--- /dev/null
@@ -0,0 +1,52 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+// META: script=/common/subset-tests-by-key.js
+// META: variant=?include=Node
+// META: variant=?exclude=Node
+// META: timeout=long
+
+// Note: This isn't merged into idlharness.any.js because of the use of variants,
+// i.e., include=Node wouldn't make sense for workers.
+
+'use strict';
+
+idl_test(
+  ['dom'],
+  ['html'],
+  idl_array => {
+    self.xmlDoc = document.implementation.createDocument(null, '', null);
+    self.detachedRange = document.createRange();
+    detachedRange.detach();
+    self.element = xmlDoc.createElementNS(null, 'test');
+    element.setAttribute('bar', 'baz');
+
+    idl_array.add_objects({
+      EventTarget: ['new EventTarget()'],
+      Event: ['document.createEvent("Event")', 'new Event("foo")'],
+      CustomEvent: ['new CustomEvent("foo")'],
+      AbortController: ['new AbortController()'],
+      AbortSignal: ['new AbortController().signal'],
+      Document: ['new Document()'],
+      XMLDocument: ['xmlDoc'],
+      DOMImplementation: ['document.implementation'],
+      DocumentFragment: ['document.createDocumentFragment()'],
+      DocumentType: ['document.doctype'],
+      Element: ['element'],
+      Attr: ['document.querySelector("[id]").attributes[0]'],
+      Text: ['document.createTextNode("abc")'],
+      ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
+      Comment: ['document.createComment("abc")'],
+      Range: ['document.createRange()', 'detachedRange'],
+      NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
+      TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
+      NodeList: ['document.querySelectorAll("script")'],
+      HTMLCollection: ['document.body.children'],
+      DOMTokenList: ['document.body.classList'],
+      XPathEvaluator: ['new XPathEvaluator()'],
+      XPathExpression: ['document.createExpression("//*")'],
+      // Skipped due to https://github.com/web-platform-tests/wpt/issues/18827:
+      // XPathNSResolver: ['document.createNSResolver(document.body)'],
+      XPathResult: ['document.evaluate("//*", document.body)'],
+    });
+  }
+);
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html
deleted file mode 100644 (file)
index c0fab01..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>DOM IDL tests</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/WebIDLParser.js></script>
-<script src=/resources/idlharness.js></script>
-
-<h1>DOM IDL tests</h1>
-<div id=log></div>
-<script>
-"use strict";
-var xmlDoc = document.implementation.createDocument(null, "", null);
-var detachedRange = document.createRange();
-detachedRange.detach();
-var element = xmlDoc.createElementNS(null, "test");
-element.setAttribute("bar", "baz");
-
-var idlArray = new IdlArray();
-
-function doTest([html, dom]) {
-  idlArray.add_idls(dom);
-  idlArray.add_dependency_idls(html);
-  idlArray.add_objects({
-    EventTarget: ['new EventTarget()'],
-    Event: ['document.createEvent("Event")', 'new Event("foo")'],
-    CustomEvent: ['new CustomEvent("foo")'],
-    AbortController: ['new AbortController()'],
-    AbortSignal: ['new AbortController().signal'],
-    Document: ['new Document()'],
-    XMLDocument: ['xmlDoc'],
-    DOMImplementation: ['document.implementation'],
-    DocumentFragment: ['document.createDocumentFragment()'],
-    DocumentType: ['document.doctype'],
-    Element: ['element'],
-    Attr: ['document.querySelector("[id]").attributes[0]'],
-    Text: ['document.createTextNode("abc")'],
-    ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
-    Comment: ['document.createComment("abc")'],
-    Range: ['document.createRange()', 'detachedRange'],
-    NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
-    TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
-    NodeList: ['document.querySelectorAll("script")'],
-    HTMLCollection: ['document.body.children'],
-    DOMTokenList: ['document.body.classList'],
-  });
-  idlArray.test();
-}
-
-function fetchText(url) {
-  return fetch(url).then((response) => response.text());
-}
-
-promise_test(function() {
-  return Promise.all(['/interfaces/html.idl',
-                      '/interfaces/dom.idl'].map(fetchText))
-                .then(doTest);
-}, "Test driver");
-</script>
index 5fba8c8..65b9398 100644 (file)
@@ -34,6 +34,41 @@ PASS iframe.classList in null namespace should be DOMTokenList.
 PASS output.classList in null namespace should be DOMTokenList. 
 PASS td.classList in null namespace should be DOMTokenList. 
 PASS th.classList in null namespace should be DOMTokenList. 
+PASS a.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
+PASS area.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
+PASS link.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
+PASS iframe.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
+PASS output.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
+PASS td.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
+PASS th.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
+FAIL a.relList in http://www.w3.org/2000/svg namespace should be DOMTokenList. assert_equals: expected "[object DOMTokenList]" but got "[object Undefined]"
+PASS area.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS link.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS iframe.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS output.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS td.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS th.relList in http://www.w3.org/2000/svg namespace should be undefined. 
+PASS a.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS area.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS link.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS iframe.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS output.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS td.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS th.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
+PASS a.relList in http://example.com/ namespace should be undefined. 
+PASS area.relList in http://example.com/ namespace should be undefined. 
+PASS link.relList in http://example.com/ namespace should be undefined. 
+PASS iframe.relList in http://example.com/ namespace should be undefined. 
+PASS output.relList in http://example.com/ namespace should be undefined. 
+PASS td.relList in http://example.com/ namespace should be undefined. 
+PASS th.relList in http://example.com/ namespace should be undefined. 
+PASS a.relList in null namespace should be undefined. 
+PASS area.relList in null namespace should be undefined. 
+PASS link.relList in null namespace should be undefined. 
+PASS iframe.relList in null namespace should be undefined. 
+PASS output.relList in null namespace should be undefined. 
+PASS td.relList in null namespace should be undefined. 
+PASS th.relList in null namespace should be undefined. 
 PASS a.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. 
 PASS area.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. 
 PASS link.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. 
@@ -69,41 +104,6 @@ PASS iframe.htmlFor in null namespace should be undefined.
 PASS output.htmlFor in null namespace should be undefined. 
 PASS td.htmlFor in null namespace should be undefined. 
 PASS th.htmlFor in null namespace should be undefined. 
-PASS a.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
-PASS area.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
-PASS link.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. 
-PASS iframe.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
-PASS output.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
-PASS td.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
-PASS th.relList in http://www.w3.org/1999/xhtml namespace should be undefined. 
-PASS a.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS area.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS link.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS iframe.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS output.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS td.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS th.relList in http://www.w3.org/2000/svg namespace should be undefined. 
-PASS a.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS area.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS link.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS iframe.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS output.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS td.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS th.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. 
-PASS a.relList in http://example.com/ namespace should be undefined. 
-PASS area.relList in http://example.com/ namespace should be undefined. 
-PASS link.relList in http://example.com/ namespace should be undefined. 
-PASS iframe.relList in http://example.com/ namespace should be undefined. 
-PASS output.relList in http://example.com/ namespace should be undefined. 
-PASS td.relList in http://example.com/ namespace should be undefined. 
-PASS th.relList in http://example.com/ namespace should be undefined. 
-PASS a.relList in null namespace should be undefined. 
-PASS area.relList in null namespace should be undefined. 
-PASS link.relList in null namespace should be undefined. 
-PASS iframe.relList in null namespace should be undefined. 
-PASS output.relList in null namespace should be undefined. 
-PASS td.relList in null namespace should be undefined. 
-PASS th.relList in null namespace should be undefined. 
 PASS a.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. 
 PASS area.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. 
 PASS link.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. 
index 034e31c..e5f060b 100644 (file)
 var pairs = [
   // Defined in DOM
   {attr: "classList", sup: ["anyElement"]},
+  // Defined in HTML except for a which is also SVG
+  {attr: "relList", sup: ["a", "area", "link"]},
   // Defined in HTML
   {attr: "htmlFor", sup: ["output"]},
-  {attr: "relList", sup: ["a", "area", "link"]},
   {attr: "sandbox", sup: ["iframe"]},
   {attr: "sizes", sup: ["link"]}
 ];
@@ -26,7 +27,11 @@ var namespaces = [
 
 var elements = ["a", "area", "link", "iframe", "output", "td", "th"];
 function testAttr(pair, new_el){
-  return (pair.attr === "classList" || (new_el.namespaceURI === "http://www.w3.org/1999/xhtml" && pair.sup.indexOf(new_el.localName) != -1));
+  return (pair.attr === "classList" ||
+          (pair.attr === "relList" && new_el.localName === "a" &&
+           new_el.namespaceURI === "http://www.w3.org/2000/svg") ||
+          (new_el.namespaceURI === "http://www.w3.org/1999/xhtml" &&
+           pair.sup.indexOf(new_el.localName) != -1));
 }
 
 pairs.forEach(function(pair) {
index 58fbeb4..0dbe0e0 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
index 360b976..24b4425 100644 (file)
@@ -23,7 +23,7 @@ function test_constructor(ctor) {
     assert_equals(object.ownerDocument, document);
   }, "new " + ctor + "(): no arguments");
 
-  var arguments = [
+  var testArgs = [
     [undefined, ""],
     [null, "null"],
     [42, "42"],
@@ -37,7 +37,7 @@ function test_constructor(ctor) {
     ["&amp;", "&amp;"],
   ];
 
-  arguments.forEach(function(a) {
+  testArgs.forEach(function(a) {
     var argument = a[0], expected = a[1];
     test(function() {
       var object = new window[ctor](argument);
index 0ec0e35..d2ffa7a 100644 (file)
@@ -16,7 +16,10 @@ PASS createDocument test: characterSet aliases for null,"f1oo",null
 PASS createDocument test: null,"foo1",null,null 
 PASS createDocument test: metadata for null,"foo1",null 
 PASS createDocument test: characterSet aliases for null,"foo1",null 
-PASS createDocument test: null,"ெfoo",null,"INVALID_CHARACTER_ERR" 
+FAIL createDocument test: null,"ெfoo",null,null The string contains invalid characters.
+FAIL createDocument test: metadata for null,"ெfoo",null The string contains invalid characters.
+FAIL createDocument test: characterSet aliases for null,"ெfoo",null The string contains invalid characters.
+PASS createDocument test: null,";foo",null,"INVALID_CHARACTER_ERR" 
 PASS createDocument test: null,"}foo",null,"INVALID_CHARACTER_ERR" 
 PASS createDocument test: null,"f}oo",null,"INVALID_CHARACTER_ERR" 
 PASS createDocument test: null,"foo}",null,"INVALID_CHARACTER_ERR" 
@@ -109,8 +112,16 @@ PASS createDocument test: "http://example.com/","0:a",null,"INVALID_CHARACTER_ER
 PASS createDocument test: "http://example.com/","a:_",null,null 
 PASS createDocument test: metadata for "http://example.com/","a:_",null 
 PASS createDocument test: characterSet aliases for "http://example.com/","a:_",null 
-PASS createDocument test: "http://example.com/","a:ெ",null,"INVALID_CHARACTER_ERR" 
-PASS createDocument test: "http://example.com/","ெ:a",null,"INVALID_CHARACTER_ERR" 
+FAIL createDocument test: "http://example.com/","a:ெ",null,null The string contains invalid characters.
+FAIL createDocument test: metadata for "http://example.com/","a:ெ",null The string contains invalid characters.
+FAIL createDocument test: characterSet aliases for "http://example.com/","a:ெ",null The string contains invalid characters.
+PASS createDocument test: "http://example.com/","a:;",null,"INVALID_CHARACTER_ERR" 
+PASS createDocument test: "http://example.com/","a:̀",null,"INVALID_CHARACTER_ERR" 
+FAIL createDocument test: "http://example.com/","ெ:a",null,null The string contains invalid characters.
+FAIL createDocument test: metadata for "http://example.com/","ெ:a",null The string contains invalid characters.
+FAIL createDocument test: characterSet aliases for "http://example.com/","ெ:a",null The string contains invalid characters.
+PASS createDocument test: "http://example.com/","̀:a",null,"INVALID_CHARACTER_ERR" 
+PASS createDocument test: "http://example.com/",";:a",null,"INVALID_CHARACTER_ERR" 
 PASS createDocument test: "http://example.com/","a:aெ",null,null 
 PASS createDocument test: metadata for "http://example.com/","a:aெ",null 
 PASS createDocument test: characterSet aliases for "http://example.com/","a:aெ",null 
index edbac64..c18b206 100644 (file)
@@ -190,4 +190,19 @@ function test_getElementsByTagName(context, element) {
     get_elements(context);
     assert_array_equals(actual, expected);
   }, "getElementsByTagName('*')")
+
+  test(function() {
+    var t1 = element.appendChild(document.createElement("abc"));
+    this.add_cleanup(function() {element.removeChild(t1)});
+
+    var l = context.getElementsByTagName("abc");
+    assert_true(l instanceof HTMLCollection);
+    assert_equals(l.length, 1);
+
+    var t2 = element.appendChild(document.createElement("abc"));
+    assert_equals(l.length, 2);
+
+    element.removeChild(t2);
+    assert_equals(l.length, 1);
+  }, "getElementsByTagName() should be a live collection");
 }
index a1bb315..b610c49 100644 (file)
@@ -125,4 +125,19 @@ function test_getElementsByTagNameNS(context, element) {
     assert_array_equals(context.getElementsByTagNameNS(null, "0"), []);
     assert_array_equals(context.getElementsByTagNameNS(null, "div"), []);
   }, "Empty lists")
+
+  test(function() {
+    var t1 = element.appendChild(document.createElementNS("test", "abc"));
+    this.add_cleanup(function() {element.removeChild(t1)});
+
+    var l = context.getElementsByTagNameNS("test", "abc");
+    assert_true(l instanceof HTMLCollection);
+    assert_equals(l.length, 1);
+
+    var t2 = element.appendChild(document.createElementNS("test", "abc"));
+    assert_equals(l.length, 2);
+
+    element.removeChild(t2);
+    assert_equals(l.length, 1);
+  }, "getElementsByTagNameNS() should be a live collection");
 }
@@ -12,7 +12,7 @@ async_test(function() {
   this.add_cleanup(function() { document.body.removeChild(iframe); });
   iframe.onload = this.step_func_done(function() {
     assert_equals(iframe.contentDocument.URL,
-                  "http://{{host}}:{{ports[http][0]}}/common/blank.html");
+                  location.origin + "/common/blank.html");
   });
 })
 </script>
index 2eb8f81..8beeee1 100644 (file)
@@ -3,5 +3,5 @@ PASS new Document(): interfaces
 PASS new Document(): children 
 PASS new Document(): metadata 
 PASS new Document(): characterSet aliases 
-FAIL new Document(): URL parsing assert_equals: expected "http://example.org/?%C3%A4" but got "http://example.org/?ä"
+PASS new Document(): URL parsing 
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-svg.svg b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-svg.svg
deleted file mode 100644 (file)
index 28aaf16..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<!-- Using windows-1252 to ensure that new Document() doesn't inherit utf-8
-     from the parent document. -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"
-  width="100%" height="100%" viewBox="0 0 800 600">
-<title>Document constructor</title>
-<html:script src="/resources/testharness.js"></html:script>
-<html:script src="/resources/testharnessreport.js"></html:script>
-<html:script><![CDATA[
-test(function() {
-  var doc = new Document();
-  assert_true(doc instanceof Node, "Should be a Node");
-  assert_true(doc instanceof Document, "Should be a Document");
-  assert_false(doc instanceof XMLDocument, "Should not be an XMLDocument");
-  assert_equals(Object.getPrototypeOf(doc), Document.prototype,
-                "Document should be the primary interface");
-}, "new Document(): interfaces")
-
-test(function() {
-  var doc = new Document();
-  assert_equals(doc.firstChild, null, "firstChild");
-  assert_equals(doc.lastChild, null, "lastChild");
-  assert_equals(doc.doctype, null, "doctype");
-  assert_equals(doc.documentElement, null, "documentElement");
-  assert_array_equals(doc.childNodes, [], "childNodes");
-}, "new Document(): children")
-
-test(function() {
-  var doc = new Document();
-  assert_equals(doc.URL, "about:blank");
-  assert_equals(doc.documentURI, "about:blank");
-  assert_equals(doc.compatMode, "CSS1Compat");
-  assert_equals(doc.characterSet, "UTF-8");
-  assert_equals(doc.contentType, "application/xml");
-  assert_equals(doc.origin, document.origin);
-  assert_equals(doc.createElement("DIV").localName, "DIV");
-}, "new Document(): metadata")
-
-test(function() {
-  var doc = new Document();
-  assert_equals(doc.characterSet, "UTF-8", "characterSet");
-  assert_equals(doc.charset, "UTF-8", "charset");
-  assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
-}, "new Document(): characterSet aliases")
-]]></html:script>
-</svg>
-
index 2f26982..ceb4192 100644 (file)
@@ -36,6 +36,7 @@ test(function() {
   assert_equals(doc.contentType, "application/xml");
   assert_equals(doc.origin, document.origin);
   assert_equals(doc.createElement("DIV").localName, "DIV");
+  assert_equals(doc.createElement("a").constructor, Element);
 }, "new Document(): metadata")
 
 test(function() {
@@ -47,7 +48,8 @@ test(function() {
 
 test(function() {
   var doc = new Document();
-  var a = doc.createElement("a");
+  var a = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
+  assert_equals(a.constructor, HTMLAnchorElement);
   // In UTF-8: 0xC3 0xA4
   a.href = "http://example.org/?\u00E4";
   assert_equals(a.href, "http://example.org/?%C3%A4");
index ec50999..8bd5190 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
index 38ef0dd..c5342cb 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
index b3613db..b6ead84 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
index 84ff9c6..52623c8 100644 (file)
@@ -1,18 +1,26 @@
 
-PASS HTML document.createAttribute("") 
-PASS XML document.createAttribute("") 
-PASS HTML document.createAttribute("invalid^Name") 
-PASS XML document.createAttribute("invalid^Name") 
-PASS HTML document.createAttribute("\\") 
-PASS XML document.createAttribute("\\") 
-PASS HTML document.createAttribute("'") 
-PASS XML document.createAttribute("'") 
-PASS HTML document.createAttribute("\"") 
-PASS XML document.createAttribute("\"") 
-PASS HTML document.createAttribute("0") 
-PASS XML document.createAttribute("0") 
-PASS HTML document.createAttribute("0:a") 
-PASS XML document.createAttribute("0:a") 
+PASS HTML document.createAttribute("") should throw 
+PASS XML document.createAttribute("") should throw 
+PASS HTML document.createAttribute("invalid^Name") should throw 
+PASS XML document.createAttribute("invalid^Name") should throw 
+PASS HTML document.createAttribute("\\") should throw 
+PASS XML document.createAttribute("\\") should throw 
+PASS HTML document.createAttribute("'") should throw 
+PASS XML document.createAttribute("'") should throw 
+PASS HTML document.createAttribute("\"") should throw 
+PASS XML document.createAttribute("\"") should throw 
+PASS HTML document.createAttribute("0") should throw 
+PASS XML document.createAttribute("0") should throw 
+PASS HTML document.createAttribute("0:a") should throw 
+PASS XML document.createAttribute("0:a") should throw 
+PASS HTML document.createAttribute("x") 
+PASS XML document.createAttribute("x") 
+PASS HTML document.createAttribute("X") 
+PASS XML document.createAttribute("X") 
+FAIL HTML document.createAttribute(":") The string contains invalid characters.
+FAIL XML document.createAttribute(":") The string contains invalid characters.
+FAIL HTML document.createAttribute("a:0") The string contains invalid characters.
+FAIL XML document.createAttribute("a:0") The string contains invalid characters.
 PASS HTML document.createAttribute("title") 
 PASS XML document.createAttribute("title") 
 PASS HTML document.createAttribute("TITLE") 
index b5afa6e..b494257 100644 (file)
@@ -17,13 +17,25 @@ invalid_names.forEach(function(name) {
     assert_throws("INVALID_CHARACTER_ERR", function() {
       document.createAttribute(name, "test");
     });
-  }, "HTML document.createAttribute(" + format_value(name) + ")");
+  }, "HTML document.createAttribute(" + format_value(name) + ") should throw");
 
   test(function() {
     assert_throws("INVALID_CHARACTER_ERR", function() {
       xml_document.createAttribute(name, "test");
     });
-  }, "XML document.createAttribute(" + format_value(name) + ")");
+  }, "XML document.createAttribute(" + format_value(name) + ") should throw");
+});
+
+valid_names.forEach(name => {
+  test(() => {
+    let attr = document.createAttribute(name);
+    attr_is(attr, "", name.toLowerCase(), null, null, name.toLowerCase());
+  }, `HTML document.createAttribute(${format_value(name)})`);
+
+  test(() => {
+    let attr = xml_document.createAttribute(name);
+    attr_is(attr, "", name, null, null, name);
+  }, `XML document.createAttribute(${format_value(name)})`);
 });
 
 var tests = ["title", "TITLE", null, undefined];
index 03ee5b1..c2f828a 100644 (file)
@@ -104,9 +104,9 @@ PASS createElement("1:foo") in XHTML document
 PASS createElement("fo o") in HTML document 
 PASS createElement("fo o") in XML document 
 PASS createElement("fo o") in XHTML document 
-PASS createElement("foo") in HTML document 
-PASS createElement("foo") in XML document 
-PASS createElement("foo") in XHTML document 
+PASS createElement("̀foo") in HTML document 
+PASS createElement("̀foo") in XML document 
+PASS createElement("̀foo") in XHTML document 
 PASS createElement("}foo") in HTML document 
 PASS createElement("}foo") in XML document 
 PASS createElement("}foo") in XHTML document 
@@ -143,7 +143,7 @@ PASS createElement("-foo") in XHTML document
 PASS createElement(".foo") in HTML document 
 PASS createElement(".foo") in XML document 
 PASS createElement(".foo") in XHTML document 
-PASS createElement("") in HTML document 
-PASS createElement("") in XML document 
-PASS createElement("") in XHTML document 
+PASS createElement("̀") in HTML document 
+PASS createElement("̀") in XML document 
+PASS createElement("̀") in XHTML document 
  
index 0967bd7..5708b85 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
index add66bf..cea61f1 100644 (file)
@@ -102,18 +102,16 @@ var tests = [
 
 tests.forEach(function(testName) {
   Object.keys(testExtensions).forEach(function(ext) {
-    var iframe = document.createElement("iframe");
-    iframe.src = "Document-createElement-namespace-tests/" +
-                 testName + "." + ext;
-    var t = async_test("Created element's namespace in " + testName + "." + ext);
-    iframe.onload = function() {
-      t.step(function() {
+    async_test(function(t) {
+      var iframe = document.createElement("iframe");
+      iframe.src = "Document-createElement-namespace-tests/" +
+                  testName + "." + ext;
+      iframe.onload = t.step_func_done(function() {
         testDoc(iframe.contentDocument, testExtensions[ext]);
+        document.body.removeChild(iframe);
       });
-      document.body.removeChild(iframe);
-      t.done();
-    };
-    document.body.appendChild(iframe);
+      document.body.appendChild(iframe);
+    }, "Created element's namespace in " + testName + "." + ext);
   });
 });
 </script>
index bacaff0..a749627 100644 (file)
@@ -77,7 +77,7 @@ var HTMLNS = "http://www.w3.org/1999/xhtml",
       "1foo",
       "1:foo",
       "fo o",
-      "\u0BC6foo",
+      "\u0300foo",
       "}foo",
       "f}oo",
       "foo}",
@@ -90,7 +90,7 @@ var HTMLNS = "http://www.w3.org/1999/xhtml",
       "f<oo",
       "-foo",
       ".foo",
-      "\u0BC6",
+      "\u0300",
     ]
 
 var xmlIframe = document.querySelector('[src="/common/dummy.xml"]');
index 92df806..23f2954 100644 (file)
@@ -17,9 +17,12 @@ PASS createElementNS test in XHTML document: null,"f1oo",null
 PASS createElementNS test in HTML document: null,"foo1",null 
 PASS createElementNS test in XML document: null,"foo1",null 
 PASS createElementNS test in XHTML document: null,"foo1",null 
-PASS createElementNS test in HTML document: null,"ெfoo","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XML document: null,"ெfoo","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XHTML document: null,"ெfoo","INVALID_CHARACTER_ERR" 
+FAIL createElementNS test in HTML document: null,"ெfoo",null The string contains invalid characters.
+FAIL createElementNS test in XML document: null,"ெfoo",null The string contains invalid characters.
+FAIL createElementNS test in XHTML document: null,"ெfoo",null The string contains invalid characters.
+PASS createElementNS test in HTML document: null,";foo","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XML document: null,";foo","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XHTML document: null,";foo","INVALID_CHARACTER_ERR" 
 PASS createElementNS test in HTML document: null,"}foo","INVALID_CHARACTER_ERR" 
 PASS createElementNS test in XML document: null,"}foo","INVALID_CHARACTER_ERR" 
 PASS createElementNS test in XHTML document: null,"}foo","INVALID_CHARACTER_ERR" 
@@ -206,12 +209,24 @@ PASS createElementNS test in XHTML document: "http://example.com/","0:a","INVALI
 PASS createElementNS test in HTML document: "http://example.com/","a:_",null 
 PASS createElementNS test in XML document: "http://example.com/","a:_",null 
 PASS createElementNS test in XHTML document: "http://example.com/","a:_",null 
-PASS createElementNS test in HTML document: "http://example.com/","a:ெ","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XML document: "http://example.com/","a:ெ","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XHTML document: "http://example.com/","a:ெ","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in HTML document: "http://example.com/","ெ:a","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XML document: "http://example.com/","ெ:a","INVALID_CHARACTER_ERR" 
-PASS createElementNS test in XHTML document: "http://example.com/","ெ:a","INVALID_CHARACTER_ERR" 
+FAIL createElementNS test in HTML document: "http://example.com/","a:ெ",null The string contains invalid characters.
+FAIL createElementNS test in XML document: "http://example.com/","a:ெ",null The string contains invalid characters.
+FAIL createElementNS test in XHTML document: "http://example.com/","a:ெ",null The string contains invalid characters.
+PASS createElementNS test in HTML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XHTML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in HTML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XHTML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" 
+FAIL createElementNS test in HTML document: "http://example.com/","ெ:a",null The string contains invalid characters.
+FAIL createElementNS test in XML document: "http://example.com/","ெ:a",null The string contains invalid characters.
+FAIL createElementNS test in XHTML document: "http://example.com/","ெ:a",null The string contains invalid characters.
+PASS createElementNS test in HTML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XHTML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in HTML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" 
+PASS createElementNS test in XHTML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" 
 PASS createElementNS test in HTML document: "http://example.com/","a:aெ",null 
 PASS createElementNS test in XML document: "http://example.com/","a:aெ",null 
 PASS createElementNS test in XHTML document: "http://example.com/","a:aெ",null 
index bf5e12c..2cf2948 100644 (file)
@@ -10,7 +10,8 @@ var createElementNS_tests = [
   [null, "1foo", "INVALID_CHARACTER_ERR"],
   [null, "f1oo", null],
   [null, "foo1", null],
-  [null, "\u0BC6foo", "INVALID_CHARACTER_ERR"],
+  [null, "\u0BC6foo", null],
+  [null, "\u037Efoo", "INVALID_CHARACTER_ERR"],
   [null, "}foo", "INVALID_CHARACTER_ERR"],
   [null, "f}oo", "INVALID_CHARACTER_ERR"],
   [null, "foo}", "INVALID_CHARACTER_ERR"],
@@ -73,8 +74,12 @@ var createElementNS_tests = [
   ["http://example.com/", "a:0", "INVALID_CHARACTER_ERR"],
   ["http://example.com/", "0:a", "INVALID_CHARACTER_ERR"],
   ["http://example.com/", "a:_", null],
-  ["http://example.com/", "a:\u0BC6", "INVALID_CHARACTER_ERR"],
-  ["http://example.com/", "\u0BC6:a", "INVALID_CHARACTER_ERR"],
+  ["http://example.com/", "a:\u0BC6", null],
+  ["http://example.com/", "a:\u037E", "INVALID_CHARACTER_ERR"],
+  ["http://example.com/", "a:\u0300", "INVALID_CHARACTER_ERR"],
+  ["http://example.com/", "\u0BC6:a", null],
+  ["http://example.com/", "\u0300:a", "INVALID_CHARACTER_ERR"],
+  ["http://example.com/", "\u037E:a", "INVALID_CHARACTER_ERR"],
   ["http://example.com/", "a:a\u0BC6", null],
   ["http://example.com/", "a\u0BC6:a", null],
   ["http://example.com/", "xml:test", "NAMESPACE_ERR"],
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt
new file mode 100644 (file)
index 0000000..331e0ff
--- /dev/null
@@ -0,0 +1,293 @@
+
+PASS BeforeUnloadEvent should be an alias for BeforeUnloadEvent. 
+PASS createEvent('BeforeUnloadEvent') should be initialized correctly. 
+PASS beforeunloadevent should be an alias for BeforeUnloadEvent. 
+PASS createEvent('beforeunloadevent') should be initialized correctly. 
+PASS BEFOREUNLOADEVENT should be an alias for BeforeUnloadEvent. 
+PASS createEvent('BEFOREUNLOADEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "BeforeUnloadEvents" 
+PASS CompositionEvent should be an alias for CompositionEvent. 
+PASS createEvent('CompositionEvent') should be initialized correctly. 
+PASS compositionevent should be an alias for CompositionEvent. 
+PASS createEvent('compositionevent') should be initialized correctly. 
+PASS COMPOSITIONEVENT should be an alias for CompositionEvent. 
+PASS createEvent('COMPOSITIONEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "CompositionEvents" 
+PASS CustomEvent should be an alias for CustomEvent. 
+PASS createEvent('CustomEvent') should be initialized correctly. 
+PASS customevent should be an alias for CustomEvent. 
+PASS createEvent('customevent') should be initialized correctly. 
+PASS CUSTOMEVENT should be an alias for CustomEvent. 
+PASS createEvent('CUSTOMEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "CustomEvents" 
+FAIL DeviceMotionEvent should be an alias for DeviceMotionEvent. The operation is not supported.
+FAIL createEvent('DeviceMotionEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL devicemotionevent should be an alias for DeviceMotionEvent. The operation is not supported.
+FAIL createEvent('devicemotionevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL DEVICEMOTIONEVENT should be an alias for DeviceMotionEvent. The operation is not supported.
+FAIL createEvent('DEVICEMOTIONEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DeviceMotionEvents" 
+FAIL DeviceOrientationEvent should be an alias for DeviceOrientationEvent. The operation is not supported.
+FAIL createEvent('DeviceOrientationEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL deviceorientationevent should be an alias for DeviceOrientationEvent. The operation is not supported.
+FAIL createEvent('deviceorientationevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL DEVICEORIENTATIONEVENT should be an alias for DeviceOrientationEvent. The operation is not supported.
+FAIL createEvent('DEVICEORIENTATIONEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DeviceOrientationEvents" 
+FAIL DragEvent should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('DragEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL dragevent should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('dragevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL DRAGEVENT should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('DRAGEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DragEvents" 
+PASS Event should be an alias for Event. 
+PASS createEvent('Event') should be initialized correctly. 
+PASS event should be an alias for Event. 
+PASS createEvent('event') should be initialized correctly. 
+PASS EVENT should be an alias for Event. 
+PASS createEvent('EVENT') should be initialized correctly. 
+PASS Events should be an alias for Event. 
+PASS createEvent('Events') should be initialized correctly. 
+PASS events should be an alias for Event. 
+PASS createEvent('events') should be initialized correctly. 
+PASS EVENTS should be an alias for Event. 
+PASS createEvent('EVENTS') should be initialized correctly. 
+PASS FocusEvent should be an alias for FocusEvent. 
+PASS createEvent('FocusEvent') should be initialized correctly. 
+PASS focusevent should be an alias for FocusEvent. 
+PASS createEvent('focusevent') should be initialized correctly. 
+PASS FOCUSEVENT should be an alias for FocusEvent. 
+PASS createEvent('FOCUSEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "FocusEvents" 
+PASS HashChangeEvent should be an alias for HashChangeEvent. 
+PASS createEvent('HashChangeEvent') should be initialized correctly. 
+PASS hashchangeevent should be an alias for HashChangeEvent. 
+PASS createEvent('hashchangeevent') should be initialized correctly. 
+PASS HASHCHANGEEVENT should be an alias for HashChangeEvent. 
+PASS createEvent('HASHCHANGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "HashChangeEvents" 
+PASS HTMLEvents should be an alias for Event. 
+PASS createEvent('HTMLEvents') should be initialized correctly. 
+PASS htmlevents should be an alias for Event. 
+PASS createEvent('htmlevents') should be initialized correctly. 
+PASS HTMLEVENTS should be an alias for Event. 
+PASS createEvent('HTMLEVENTS') should be initialized correctly. 
+PASS KeyboardEvent should be an alias for KeyboardEvent. 
+PASS createEvent('KeyboardEvent') should be initialized correctly. 
+PASS keyboardevent should be an alias for KeyboardEvent. 
+PASS createEvent('keyboardevent') should be initialized correctly. 
+PASS KEYBOARDEVENT should be an alias for KeyboardEvent. 
+PASS createEvent('KEYBOARDEVENT') should be initialized correctly. 
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "KeyboardEvents" assert_throws: function "function () {
+          var evt = document.createEvent(plural);
+        }" did not throw
+PASS MessageEvent should be an alias for MessageEvent. 
+PASS createEvent('MessageEvent') should be initialized correctly. 
+PASS messageevent should be an alias for MessageEvent. 
+PASS createEvent('messageevent') should be initialized correctly. 
+PASS MESSAGEEVENT should be an alias for MessageEvent. 
+PASS createEvent('MESSAGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "MessageEvents" 
+PASS MouseEvent should be an alias for MouseEvent. 
+PASS createEvent('MouseEvent') should be initialized correctly. 
+PASS mouseevent should be an alias for MouseEvent. 
+PASS createEvent('mouseevent') should be initialized correctly. 
+PASS MOUSEEVENT should be an alias for MouseEvent. 
+PASS createEvent('MOUSEEVENT') should be initialized correctly. 
+PASS MouseEvents should be an alias for MouseEvent. 
+PASS createEvent('MouseEvents') should be initialized correctly. 
+PASS mouseevents should be an alias for MouseEvent. 
+PASS createEvent('mouseevents') should be initialized correctly. 
+PASS MOUSEEVENTS should be an alias for MouseEvent. 
+PASS createEvent('MOUSEEVENTS') should be initialized correctly. 
+PASS StorageEvent should be an alias for StorageEvent. 
+PASS createEvent('StorageEvent') should be initialized correctly. 
+PASS storageevent should be an alias for StorageEvent. 
+PASS createEvent('storageevent') should be initialized correctly. 
+PASS STORAGEEVENT should be an alias for StorageEvent. 
+PASS createEvent('STORAGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "StorageEvents" 
+PASS SVGEvents should be an alias for Event. 
+PASS createEvent('SVGEvents') should be initialized correctly. 
+PASS svgevents should be an alias for Event. 
+PASS createEvent('svgevents') should be initialized correctly. 
+PASS SVGEVENTS should be an alias for Event. 
+PASS createEvent('SVGEVENTS') should be initialized correctly. 
+FAIL TextEvent should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('TextEvent') should be initialized correctly. 
+FAIL textevent should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('textevent') should be initialized correctly. 
+FAIL TEXTEVENT should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('TEXTEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "TextEvents" 
+FAIL TouchEvent should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('TouchEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL touchevent should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('touchevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL TOUCHEVENT should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('TOUCHEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "TouchEvents" 
+PASS UIEvent should be an alias for UIEvent. 
+PASS createEvent('UIEvent') should be initialized correctly. 
+PASS uievent should be an alias for UIEvent. 
+PASS createEvent('uievent') should be initialized correctly. 
+PASS UIEVENT should be an alias for UIEvent. 
+PASS createEvent('UIEVENT') should be initialized correctly. 
+PASS UIEvents should be an alias for UIEvent. 
+PASS createEvent('UIEvents') should be initialized correctly. 
+PASS uievents should be an alias for UIEvent. 
+PASS createEvent('uievents') should be initialized correctly. 
+PASS UIEVENTS should be an alias for UIEvent. 
+PASS createEvent('UIEVENTS') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for unrecognized arguments 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationPlaybackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationPlaybackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationPlayerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationPlayerEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ApplicationCacheErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ApplicationCacheErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AudioProcessingEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AudioProcessingEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AutocompleteErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AutocompleteErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "BeforeInstallPromptEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "BeforeInstallPromptEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "BlobEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "BlobEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ClipboardEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ClipboardEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "CloseEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "CloseEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "CommandEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "CommandEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "DataContainerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "DataContainerEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ExtendableEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ExtendableEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ExtendableMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ExtendableMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "FetchEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "FetchEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "FontFaceSetLoadEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "FontFaceSetLoadEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "GamepadEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "GamepadEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "GeofencingEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "GeofencingEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "IDBVersionChangeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "IDBVersionChangeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "InstallEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "InstallEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "KeyEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "KeyEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MIDIConnectionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MIDIConnectionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MIDIMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MIDIMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaEncryptedEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaEncryptedEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaKeyEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaKeyEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaKeyMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaKeyMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaQueryListEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaQueryListEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaStreamEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaStreamEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaStreamTrackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaStreamTrackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MouseScrollEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MouseScrollEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MutationEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MutationEvents" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface + "s");
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "NotificationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "NotificationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "NotifyPaintEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "NotifyPaintEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "OfflineAudioCompletionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "OfflineAudioCompletionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "OrientationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "OrientationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PageTransition" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PageTransitions" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PageTransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PageTransitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PointerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PointerEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PopStateEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PopStateEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PopUpEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PopUpEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PresentationConnectionAvailableEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PresentationConnectionAvailableEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PresentationConnectionCloseEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PresentationConnectionCloseEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ProgressEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ProgressEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PromiseRejectionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PromiseRejectionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PushEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PushEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCDTMFToneChangeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCDTMFToneChangeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCDataChannelEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCDataChannelEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCIceCandidateEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCIceCandidateEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RelatedEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RelatedEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ResourceProgressEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ResourceProgressEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SVGEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SVGZoomEvent" 
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SVGZoomEvents" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface + "s");
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ScrollAreaEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ScrollAreaEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SecurityPolicyViolationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SecurityPolicyViolationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ServicePortConnectEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ServicePortConnectEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ServiceWorkerMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ServiceWorkerMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SimpleGestureEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SimpleGestureEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechRecognitionError" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechRecognitionErrors" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechRecognitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechRecognitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechSynthesisEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechSynthesisEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SyncEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SyncEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TimeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TimeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TrackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TrackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TransitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebGLContextEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebGLContextEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebKitAnimationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebKitAnimationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebKitTransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebKitTransitionEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WheelEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WheelEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "XULCommandEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "XULCommandEvents" 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt
new file mode 100644 (file)
index 0000000..3beb246
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS getElementsByClassName() should be a live collection 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html
new file mode 100644 (file)
index 0000000..db8fac2
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<title>Document.getElementsByClassName</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+  var a = document.createElement("a"),
+      b = document.createElement("b");
+  a.className = "foo";
+  this.add_cleanup(function() {document.body.removeChild(a);});
+  document.body.appendChild(a);
+
+  var l = document.getElementsByClassName("foo");
+  assert_true(l instanceof HTMLCollection);
+  assert_equals(l.length, 1);
+
+  b.className = "foo";
+  document.body.appendChild(b);
+  assert_equals(l.length, 2);
+
+  document.body.removeChild(b);
+  assert_equals(l.length, 1);
+}, "getElementsByClassName() should be a live collection");
+</script>
index 790b75c..5ee4d6b 100644 (file)
@@ -19,4 +19,5 @@ PASS Element in non-HTML namespace, non-ascii characters in name
 PASS Element in HTML namespace, prefix, non-ascii characters in name 
 PASS Element in non-HTML namespace, prefix, non-ascii characters in name 
 PASS getElementsByTagName('*') 
+PASS getElementsByTagName() should be a live collection 
 
index 3d90920..030214e 100644 (file)
@@ -12,4 +12,5 @@ PASS BODY element in test namespace, prefix
 PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*') 
 PASS getElementsByTagNameNS('*', '*') 
 PASS Empty lists 
+PASS getElementsByTagNameNS() should be a live collection 
 
index 332c306..bc87b05 100644 (file)
@@ -13,9 +13,31 @@ test(function() {
   var secondList = a.getElementsByClassName("foo")
   assert_true(list === secondList || list !== secondList, "Caching is allowed.")
 }, "getElementsByClassName should work on disconnected subtrees.")
+
 test(function() {
   var list = document.getElementsByClassName("foo")
   assert_false(list instanceof NodeList, "NodeList")
   assert_true(list instanceof HTMLCollection, "HTMLCollection")
 }, "Interface should be correct.")
+
+test(function() {
+  var a = document.createElement("a");
+  var b = document.createElement("b");
+  var c = document.createElement("c");
+  b.className = "foo";
+  document.body.appendChild(a);
+  this.add_cleanup(function() {document.body.removeChild(a)});
+  a.appendChild(b);
+
+  var l = a.getElementsByClassName("foo");
+  assert_true(l instanceof HTMLCollection);
+  assert_equals(l.length, 1);
+
+  c.className = "foo";
+  a.appendChild(c);
+  assert_equals(l.length, 2);
+
+  a.removeChild(c);
+  assert_equals(l.length, 1);
+}, "getElementsByClassName() should be a live collection");
 </script>
index cc7ae5d..9e093ab 100644 (file)
@@ -19,5 +19,6 @@ PASS Element in non-HTML namespace, non-ascii characters in name
 PASS Element in HTML namespace, prefix, non-ascii characters in name 
 PASS Element in non-HTML namespace, prefix, non-ascii characters in name 
 PASS getElementsByTagName('*') 
+PASS getElementsByTagName() should be a live collection 
 PASS Matching the context object 
 
index 8109cb1..1f892fe 100644 (file)
@@ -12,6 +12,7 @@ PASS BODY element in test namespace, prefix
 PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*') 
 PASS getElementsByTagNameNS('*', '*') 
 PASS Empty lists 
+PASS getElementsByTagNameNS() should be a live collection 
 PASS Matching the context object (wildcard namespace) 
 PASS Matching the context object (specific namespace) 
 
index 94c1578..7c70011 100644 (file)
@@ -38,6 +38,7 @@ PASS Detached Element.matches: Invalid [att=value] selector: [*|*=test]
 PASS Detached Element.matches: Invalid [att=value] selector: [class= space unquoted ] 
 PASS Detached Element.matches: Unknown pseudo-class: div:example 
 PASS Detached Element.matches: Unknown pseudo-class: :example 
+PASS Detached Element.matches: Unknown pseudo-class: div:linkexample 
 PASS Detached Element.matches: Unknown pseudo-element: div::example 
 PASS Detached Element.matches: Unknown pseudo-element: ::example 
 PASS Detached Element.matches: Invalid pseudo-element: :::before 
@@ -71,6 +72,7 @@ PASS In-document Element.matches: Invalid [att=value] selector: [*|*=test]
 PASS In-document Element.matches: Invalid [att=value] selector: [class= space unquoted ] 
 PASS In-document Element.matches: Unknown pseudo-class: div:example 
 PASS In-document Element.matches: Unknown pseudo-class: :example 
+PASS In-document Element.matches: Unknown pseudo-class: div:linkexample 
 PASS In-document Element.matches: Unknown pseudo-element: div::example 
 PASS In-document Element.matches: Unknown pseudo-element: ::example 
 PASS In-document Element.matches: Invalid pseudo-element: :::before 
@@ -82,6 +84,7 @@ PASS In-document Element.matches: Invalid namespace: $|div
 PASS In-document Element.matches: Relative selector: >* 
 PASS In-document Element.matches: Type selector, matching html element (with no refNodes): html 
 PASS In-document Element.matches: Type selector, matching body element (with no refNodes): body 
+PASS In-document Element.matches: Universal selector, matching all elements (with no refNodes): * 
 PASS In-document Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS In-document Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS In-document Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -169,10 +172,13 @@ PASS In-document Element.matches: :lang pseudo-class selector, matching inherite
 PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS In-document Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS In-document Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.matches: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS In-document Element.matches: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.matches: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS In-document Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS In-document Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS In-document Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS In-document Element.matches: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS In-document Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS In-document Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS In-document Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -245,6 +251,7 @@ PASS In-document Element.matches: Syntax, group of selectors separator, whitespa
 PASS In-document Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em        \r
 ,#group strong 
 PASS In-document Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
+PASS Detached Element.matches: Universal selector, matching all elements (with no refNodes): * 
 PASS Detached Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS Detached Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS Detached Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -328,10 +335,13 @@ PASS Detached Element.matches: :link and :visited pseudo-class selectors, matchi
 PASS Detached Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS Detached Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS Detached Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS Detached Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Detached Element.matches: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS Detached Element.matches: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Detached Element.matches: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS Detached Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS Detached Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS Detached Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS Detached Element.matches: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS Detached Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS Detached Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS Detached Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -403,6 +413,7 @@ PASS Detached Element.matches: Syntax, group of selectors separator, whitespace
 PASS Detached Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em   \r
 ,#group strong 
 PASS Detached Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
+PASS Fragment Element.matches: Universal selector, matching all elements (with no refNodes): * 
 PASS Fragment Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS Fragment Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS Fragment Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -486,10 +497,13 @@ PASS Fragment Element.matches: :link and :visited pseudo-class selectors, matchi
 PASS Fragment Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS Fragment Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS Fragment Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS Fragment Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Fragment Element.matches: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS Fragment Element.matches: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Fragment Element.matches: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS Fragment Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS Fragment Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS Fragment Element.matches: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS Fragment Element.matches: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS Fragment Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS Fragment Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS Fragment Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -561,7 +575,6 @@ PASS Fragment Element.matches: Syntax, group of selectors separator, whitespace
 PASS Fragment Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em   \r
 ,#group strong 
 PASS Fragment Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
-FAIL In-document Element.matches: Universal selector, matching all descendants of the specified reference element (with refNode Element): * assert_false: The element #universal should not match the selector. expected false got true
 PASS In-document Element.matches: Attribute presence selector, matching align attribute with value (with refNode Element): .attr-presence-div1[align] 
 PASS In-document Element.matches: Attribute presence selector, matching align attribute with empty value (with refNode Element): .attr-presence-div2[align] 
 PASS In-document Element.matches: Attribute presence selector, matching title attribute, case insensitivity (with refNode Element): [TiTlE] 
@@ -611,7 +624,14 @@ PASS In-document Element.matches: Attribute contains selector with unquoted valu
 PASS In-document Element.matches: :nth-child selector, matching the third child element (with refNode Element): :nth-child(3) 
 PASS In-document Element.matches: :nth-child selector, matching every third child element (with refNode Element): li:nth-child(3n) 
 PASS In-document Element.matches: :nth-child selector, matching every second child element, starting from the fourth (with refNode Element): li:nth-child(2n+4) 
+PASS In-document Element.matches: :nth-child selector, matching every second child element, starting from the fourth, with whitespace (with refNode Element): li:nth-child(2n  \r
++      \r
+4) 
 PASS In-document Element.matches: :nth-child selector, matching every fourth child element, starting from the third (with refNode Element): :nth-child(4n-1) 
+PASS In-document Element.matches: :nth-child selector, matching every fourth child element, starting from the third, with whitespace (with refNode Element): :nth-child(4n     \r
+-      \r
+1) 
+PASS In-document Element.matches: :nth-child selector used twice, matching  (with refNode Element): :nth-child(1) :nth-child(1) 
 PASS In-document Element.matches: :nth-last-child selector, matching the third last child element (with refNode Element): :nth-last-child(3) 
 PASS In-document Element.matches: :nth-last-child selector, matching every third child element from the end (with refNode Element): li:nth-last-child(3n) 
 PASS In-document Element.matches: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with refNode Element): li:nth-last-child(2n+4) 
@@ -643,7 +663,9 @@ PASS In-document Element.matches: :lang pseudo-class selector, matching inherite
 PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with exact value (1) (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with partial value (1) (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS In-document Element.matches: :enabled pseudo-class selector, matching all enabled form controls (1) (with no refNodes): #pseudo-ui :enabled 
-PASS In-document Element.matches: :enabled pseudo-class selector, matching all disabled form controls (1) (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.matches: :enabled pseudo-class selector, not matching link elements (1) (with no refNodes): #pseudo-link :enabled 
+PASS In-document Element.matches: :disabled pseudo-class selector, matching all disabled form controls (1) (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.matches: :disabled pseudo-class selector, not matching link elements (1) (with no refNodes): #pseudo-link :disabled 
 PASS In-document Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (1) (with no refNodes): #pseudo-ui :checked 
 PASS In-document Element.matches: :not pseudo-class selector, matching (1) (with no refNodes): #not>:not(div) 
 PASS In-document Element.matches: :not pseudo-class selector, matching (1) (with no refNodes): #not * :not(:first-child) 
index 1fae9a0..52956d0 100644 (file)
@@ -38,6 +38,7 @@ PASS Detached Element.webkitMatchesSelector: Invalid [att=value] selector: [*|*=
 PASS Detached Element.webkitMatchesSelector: Invalid [att=value] selector: [class= space unquoted ] 
 PASS Detached Element.webkitMatchesSelector: Unknown pseudo-class: div:example 
 PASS Detached Element.webkitMatchesSelector: Unknown pseudo-class: :example 
+PASS Detached Element.webkitMatchesSelector: Unknown pseudo-class: div:linkexample 
 PASS Detached Element.webkitMatchesSelector: Unknown pseudo-element: div::example 
 PASS Detached Element.webkitMatchesSelector: Unknown pseudo-element: ::example 
 PASS Detached Element.webkitMatchesSelector: Invalid pseudo-element: :::before 
@@ -71,6 +72,7 @@ PASS In-document Element.webkitMatchesSelector: Invalid [att=value] selector: [*
 PASS In-document Element.webkitMatchesSelector: Invalid [att=value] selector: [class= space unquoted ] 
 PASS In-document Element.webkitMatchesSelector: Unknown pseudo-class: div:example 
 PASS In-document Element.webkitMatchesSelector: Unknown pseudo-class: :example 
+PASS In-document Element.webkitMatchesSelector: Unknown pseudo-class: div:linkexample 
 PASS In-document Element.webkitMatchesSelector: Unknown pseudo-element: div::example 
 PASS In-document Element.webkitMatchesSelector: Unknown pseudo-element: ::example 
 PASS In-document Element.webkitMatchesSelector: Invalid pseudo-element: :::before 
@@ -82,6 +84,7 @@ PASS In-document Element.webkitMatchesSelector: Invalid namespace: $|div
 PASS In-document Element.webkitMatchesSelector: Relative selector: >* 
 PASS In-document Element.webkitMatchesSelector: Type selector, matching html element (with no refNodes): html 
 PASS In-document Element.webkitMatchesSelector: Type selector, matching body element (with no refNodes): body 
+PASS In-document Element.webkitMatchesSelector: Universal selector, matching all elements (with no refNodes): * 
 PASS In-document Element.webkitMatchesSelector: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS In-document Element.webkitMatchesSelector: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS In-document Element.webkitMatchesSelector: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -169,10 +172,13 @@ PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, mat
 PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS In-document Element.webkitMatchesSelector: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.webkitMatchesSelector: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS In-document Element.webkitMatchesSelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS In-document Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS In-document Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS In-document Element.webkitMatchesSelector: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS In-document Element.webkitMatchesSelector: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS In-document Element.webkitMatchesSelector: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS In-document Element.webkitMatchesSelector: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -245,6 +251,7 @@ PASS In-document Element.webkitMatchesSelector: Syntax, group of selectors separ
 PASS In-document Element.webkitMatchesSelector: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em  \r
 ,#group strong 
 PASS In-document Element.webkitMatchesSelector: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
+PASS Detached Element.webkitMatchesSelector: Universal selector, matching all elements (with no refNodes): * 
 PASS Detached Element.webkitMatchesSelector: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS Detached Element.webkitMatchesSelector: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS Detached Element.webkitMatchesSelector: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -328,10 +335,13 @@ PASS Detached Element.webkitMatchesSelector: :link and :visited pseudo-class sel
 PASS Detached Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS Detached Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS Detached Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS Detached Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Detached Element.webkitMatchesSelector: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS Detached Element.webkitMatchesSelector: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Detached Element.webkitMatchesSelector: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS Detached Element.webkitMatchesSelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS Detached Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS Detached Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS Detached Element.webkitMatchesSelector: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS Detached Element.webkitMatchesSelector: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS Detached Element.webkitMatchesSelector: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS Detached Element.webkitMatchesSelector: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -403,6 +413,7 @@ PASS Detached Element.webkitMatchesSelector: Syntax, group of selectors separato
 PASS Detached Element.webkitMatchesSelector: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em     \r
 ,#group strong 
 PASS Detached Element.webkitMatchesSelector: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
+PASS Fragment Element.webkitMatchesSelector: Universal selector, matching all elements (with no refNodes): * 
 PASS Fragment Element.webkitMatchesSelector: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>* 
 PASS Fragment Element.webkitMatchesSelector: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>* 
 PASS Fragment Element.webkitMatchesSelector: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal * 
@@ -486,10 +497,13 @@ PASS Fragment Element.webkitMatchesSelector: :link and :visited pseudo-class sel
 PASS Fragment Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS Fragment Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS Fragment Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled 
-PASS Fragment Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Fragment Element.webkitMatchesSelector: :enabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :enabled 
+PASS Fragment Element.webkitMatchesSelector: :disabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled 
+PASS Fragment Element.webkitMatchesSelector: :disabled pseudo-class selector, not matching link elements (with no refNodes): #pseudo-link :disabled 
 PASS Fragment Element.webkitMatchesSelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked 
 PASS Fragment Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not>:not(div) 
 PASS Fragment Element.webkitMatchesSelector: :not pseudo-class selector, matching  (with no refNodes): #not * :not(:first-child) 
+PASS Fragment Element.webkitMatchesSelector: :not pseudo-class selector argument surrounded by spaces, matching  (with no refNodes): #not>:not( div ) 
 PASS Fragment Element.webkitMatchesSelector: Class selector, matching element with specified class (with no refNodes): .class-p 
 PASS Fragment Element.webkitMatchesSelector: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana 
 PASS Fragment Element.webkitMatchesSelector: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange 
@@ -561,7 +575,6 @@ PASS Fragment Element.webkitMatchesSelector: Syntax, group of selectors separato
 PASS Fragment Element.webkitMatchesSelector: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em     \r
 ,#group strong 
 PASS Fragment Element.webkitMatchesSelector: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong 
-FAIL In-document Element.webkitMatchesSelector: Universal selector, matching all descendants of the specified reference element (with refNode Element): * assert_false: The element #universal should not match the selector. expected false got true
 PASS In-document Element.webkitMatchesSelector: Attribute presence selector, matching align attribute with value (with refNode Element): .attr-presence-div1[align] 
 PASS In-document Element.webkitMatchesSelector: Attribute presence selector, matching align attribute with empty value (with refNode Element): .attr-presence-div2[align] 
 PASS In-document Element.webkitMatchesSelector: Attribute presence selector, matching title attribute, case insensitivity (with refNode Element): [TiTlE] 
@@ -611,7 +624,14 @@ PASS In-document Element.webkitMatchesSelector: Attribute contains selector with
 PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching the third child element (with refNode Element): :nth-child(3) 
 PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching every third child element (with refNode Element): li:nth-child(3n) 
 PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching every second child element, starting from the fourth (with refNode Element): li:nth-child(2n+4) 
+PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching every second child element, starting from the fourth, with whitespace (with refNode Element): li:nth-child(2n    \r
++      \r
+4) 
 PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching every fourth child element, starting from the third (with refNode Element): :nth-child(4n-1) 
+PASS In-document Element.webkitMatchesSelector: :nth-child selector, matching every fourth child element, starting from the third, with whitespace (with refNode Element): :nth-child(4n       \r
+-      \r
+1) 
+PASS In-document Element.webkitMatchesSelector: :nth-child selector used twice, matching  (with refNode Element): :nth-child(1) :nth-child(1) 
 PASS In-document Element.webkitMatchesSelector: :nth-last-child selector, matching the third last child element (with refNode Element): :nth-last-child(3) 
 PASS In-document Element.webkitMatchesSelector: :nth-last-child selector, matching every third child element from the end (with refNode Element): li:nth-last-child(3n) 
 PASS In-document Element.webkitMatchesSelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with refNode Element): li:nth-last-child(2n+4) 
@@ -643,7 +663,9 @@ PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, mat
 PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with exact value (1) (with no refNodes): #pseudo-lang-div2:lang(fr) 
 PASS In-document Element.webkitMatchesSelector: :lang pseudo-class selector, matching specified language with partial value (1) (with no refNodes): #pseudo-lang-div3:lang(en) 
 PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all enabled form controls (1) (with no refNodes): #pseudo-ui :enabled 
-PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, matching all disabled form controls (1) (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.webkitMatchesSelector: :enabled pseudo-class selector, not matching link elements (1) (with no refNodes): #pseudo-link :enabled 
+PASS In-document Element.webkitMatchesSelector: :disabled pseudo-class selector, matching all disabled form controls (1) (with no refNodes): #pseudo-ui :disabled 
+PASS In-document Element.webkitMatchesSelector: :disabled pseudo-class selector, not matching link elements (1) (with no refNodes): #pseudo-link :disabled 
 PASS In-document Element.webkitMatchesSelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes (1) (with no refNodes): #pseudo-ui :checked 
 PASS In-document Element.webkitMatchesSelector: :not pseudo-class selector, matching (1) (with no refNodes): #not>:not(div) 
 PASS In-document Element.webkitMatchesSelector: :not pseudo-class selector, matching (1) (with no refNodes): #not * :not(:first-child) 
index ead9d03..d6aa59a 100644 (file)
@@ -4,4 +4,5 @@ PASS Node.childNodes on an Element.
 PASS Node.childNodes on a DocumentFragment. 
 PASS Node.childNodes on a Document. 
 PASS Iterator behavior of Node.childNodes 
+PASS Node.childNodes should be a live collection 
 
index f7586fa..0d38df3 100644 (file)
@@ -7,6 +7,9 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
+<div style="display: none">
+  <ul id='test'><li>1</li><li>2</li><li>3</li><li>4</li></ul>
+</div>
 <script>
 test(function() {
   var element = document.createElement("p");
@@ -96,4 +99,19 @@ test(function() {
   assert_equals(list.entries, Array.prototype.entries);
   assert_equals(list.forEach, Array.prototype.forEach);
 }, "Iterator behavior of Node.childNodes");
+
+
+test(() => {
+  var node = document.getElementById("test");
+  var children = node.childNodes;
+  assert_true(children instanceof NodeList);
+  var li = document.createElement("li");
+  assert_equals(children.length, 4);
+
+  node.appendChild(li);
+  assert_equals(children.length, 5);
+
+  node.removeChild(li);
+  assert_equals(children.length, 4);
+}, "Node.childNodes should be a live collection");
 </script>
index bec5e55..cd9ede7 100644 (file)
@@ -128,7 +128,8 @@ PASS createElementNS HTML
 PASS createElementNS non-HTML 
 PASS createProcessingInstruction 
 PASS implementation.createDocumentType 
-FAIL implementation.createDocument assert_equals: origin value expected "null" but got "http://localhost:8800"
+PASS implementation.createDocument 
 PASS implementation.createHTMLDocument 
 PASS node with children 
+PASS Node with custom prototype 
 
index 6c86630..08d620b 100644 (file)
@@ -240,7 +240,6 @@ test(function() {
     assert_equals(doc.contentType, copy.contentType, "contentType equality");
     assert_equals(doc.URL, "about:blank", "URL value")
     assert_equals(doc.URL, copy.URL, "URL equality");
-    assert_equals(doc.origin, "null", "origin value")
     assert_equals(doc.origin, copy.origin, "origin equality");
     assert_equals(doc.compatMode, "CSS1Compat", "compatMode value");
     assert_equals(doc.compatMode, copy.compatMode, "compatMode equality");
@@ -286,4 +285,17 @@ test(function() {
     assert_equals(copy.childNodes.length, 0,
                   "copy.childNodes.length with non-deep copy");
 }, "node with children");
+
+test(() => {
+  const proto = Object.create(HTMLElement.prototype),
+        node = document.createElement("hi");
+  Object.setPrototypeOf(node, proto);
+  assert_true(proto.isPrototypeOf(node));
+  const clone = node.cloneNode();
+  assert_false(proto.isPrototypeOf(clone));
+  assert_true(HTMLUnknownElement.prototype.isPrototypeOf(clone));
+  const deepClone = node.cloneNode(true);
+  assert_false(proto.isPrototypeOf(deepClone));
+  assert_true(HTMLUnknownElement.prototype.isPrototypeOf(deepClone));
+}, "Node with custom prototype")
 </script>
index 005c058..9b18da8 100644 (file)
@@ -1,4 +1,9 @@
 
+PASS Should check the 'parent' type before checking whether 'child' is a child of 'parent' 
+PASS Should check that 'node' is not an ancestor of 'parent' before checking whether 'child' is a child of 'parent' 
+PASS Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent. 
+PASS Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent of the type that 'parent' is. 
+PASS Should check whether 'child' is a child of 'parent' before checking whether 'node' can be inserted into the document given the kids the document has right now. 
 PASS Calling insertBefore with a non-Node first argument must throw TypeError. 
 PASS Calling insertBefore with a non-Node first argument on a leaf node DocumentType must throw TypeError. 
 PASS Calling insertBefore an a leaf node DocumentType must throw HIERARCHY_REQUEST_ERR. 
index a9fc83b..2e511b8 100644 (file)
@@ -3,6 +3,12 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
+<!-- First test shared pre-insertion checks that work similarly for replaceChild
+     and insertBefore -->
+<script>
+  var insertFunc = Node.prototype.insertBefore;
+</script>
+<script src="pre-insertion-checks.js"></script>
 <script>
 function testLeafNode(nodeName, createNodeFunction) {
   test(function() {
index 59db5e1..d45884b 100644 (file)
@@ -2,4 +2,5 @@
 PASS Node.normalize() 
 PASS Empty text nodes separated by a non-empty text node 
 PASS Empty text nodes 
+PASS Non-text nodes with empty textContent values. 
 
index 7598852..4d45599 100644 (file)
@@ -51,4 +51,33 @@ test(function() {
   div.normalize();
   assert_array_equals(div.childNodes, [])
 }, "Empty text nodes")
+
+// The specification for normalize is clear that only "exclusive Text
+// nodes" are to be modified. This excludes CDATASection nodes, which
+// derive from Text. Naïve implementations may fail to skip
+// CDATASection nodes, or even worse, try to test textContent or
+// nodeValue without taking care to check the node type. They will
+// fail this test.
+test(function() {
+  // We create an XML document so that we can create CDATASection.
+  // Except for the CDATASection the result should be the same for
+  // an HTML document. (No non-Text node should be touched.)
+  var doc = new DOMParser().parseFromString("<div/>", "text/xml")
+  var div = doc.documentElement
+  var t1 = div.appendChild(doc.createTextNode("a"))
+  // The first parameter is the "target" of the processing
+  // instruction, and the 2nd is the text content.
+  var t2 = div.appendChild(doc.createProcessingInstruction("pi", ""))
+  var t3 = div.appendChild(doc.createTextNode("b"))
+  var t4 = div.appendChild(doc.createCDATASection(""))
+  var t5 = div.appendChild(doc.createTextNode("c"))
+  var t6 = div.appendChild(doc.createComment(""))
+  var t7 = div.appendChild(doc.createTextNode("d"))
+  var t8 = div.appendChild(doc.createElement("el"))
+  var t9 = div.appendChild(doc.createTextNode("e"))
+  var expected = [t1, t2, t3, t4, t5, t6, t7, t8, t9]
+  assert_array_equals(div.childNodes, expected)
+  div.normalize()
+  assert_array_equals(div.childNodes, expected)
+}, "Non-text nodes with empty textContent values.")
 </script>
index 6487a59..f37ec52 100644 (file)
@@ -1,7 +1,18 @@
 
+PASS Should check the 'parent' type before checking whether 'child' is a child of 'parent' 
+PASS Should check that 'node' is not an ancestor of 'parent' before checking whether 'child' is a child of 'parent' 
+FAIL Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent. assert_throws: function "function () {
+      insertFunc.call(parent, node, child);
+    }" threw object "HierarchyRequestError: The operation would yield an incorrect node tree." that is not a DOMException NotFoundError: property "code" is equal to 3, expected 8
+FAIL Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent of the type that 'parent' is. assert_throws: function "function () {
+    insertFunc.call(parent, node, child);
+  }" threw object "HierarchyRequestError: The operation would yield an incorrect node tree." that is not a DOMException NotFoundError: property "code" is equal to 3, expected 8
+FAIL Should check whether 'child' is a child of 'parent' before checking whether 'node' can be inserted into the document given the kids the document has right now. assert_throws: function "function () {
+    insertFunc.call(parent, node, child);
+  }" threw object "HierarchyRequestError: The operation would yield an incorrect node tree." that is not a DOMException NotFoundError: property "code" is equal to 3, expected 8
 PASS Passing null to replaceChild should throw a TypeError. 
 PASS If child's parent is not the context node, a NotFoundError exception should be thrown 
-PASS If the context node is not a node that can contain children, a NotFoundError exception should be thrown 
+PASS If the context node is not a node that can contain children, a HierarchyRequestError exception should be thrown 
 PASS If node is an inclusive ancestor of the context node, a HierarchyRequestError should be thrown. 
 PASS If the context node is a document, inserting a document or text node should throw a HierarchyRequestError. 
 PASS If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError. 
index e8ba496..3c289a4 100644 (file)
@@ -5,6 +5,12 @@
 <script src="/resources/testharnessreport.js"></script>
 <body><a><b></b><c></c></a>
 <div id="log"></div>
+<!-- First test shared pre-insertion checks that work similarly for replaceChild
+     and insertBefore -->
+<script>
+  var insertFunc = Node.prototype.replaceChild;
+</script>
+<script src="pre-insertion-checks.js"></script>
 <script>
 // IDL.
 test(function() {
@@ -22,7 +28,7 @@ test(function() {
   });
 }, "Passing null to replaceChild should throw a TypeError.")
 
-// Step 1.
+// Step 3.
 test(function() {
   var a = document.createElement("div");
   var b = document.createElement("div");
@@ -39,14 +45,11 @@ test(function() {
   assert_throws("NotFoundError", function() {
     a.replaceChild(b, a);
   });
-}, "If child's parent is not the context node, a NotFoundError exception should be thrown")
+}, "If child's parent is not the context node, a NotFoundError exception should be thrown");
+
+// Step 1.
 test(function() {
-  var nodes = [
-    document.implementation.createDocumentType("html", "", ""),
-    document.createTextNode("text"),
-    document.implementation.createDocument(null, "foo", null).createProcessingInstruction("foo", "bar"),
-    document.createComment("comment")
-  ];
+  var nodes = getNonParentNodes();
 
   var a = document.createElement("div");
   var b = document.createElement("div");
@@ -55,7 +58,7 @@ test(function() {
       node.replaceChild(a, b);
     });
   });
-}, "If the context node is not a node that can contain children, a NotFoundError exception should be thrown")
+}, "If the context node is not a node that can contain children, a HierarchyRequestError exception should be thrown")
 
 // Step 2.
 test(function() {
@@ -78,7 +81,7 @@ test(function() {
   });
 }, "If node is an inclusive ancestor of the context node, a HierarchyRequestError should be thrown.")
 
-// Step 3.1.
+// Steps 4/5.
 test(function() {
   var doc = document.implementation.createHTMLDocument("title");
   var doc2 = document.implementation.createHTMLDocument("title2");
@@ -91,7 +94,7 @@ test(function() {
   });
 }, "If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.")
 
-// Step 3.2.1.
+// Step 6.1.
 test(function() {
   var doc = document.implementation.createHTMLDocument("title");
 
@@ -127,7 +130,7 @@ test(function() {
   });
 }, "If the context node is a document (without element children), inserting a DocumentFragment that contains multiple elements should throw a HierarchyRequestError.")
 
-// Step 3.2.2.
+// Step 6.1.
 test(function() {
   // The context node has an element child that is not /child/.
   var doc = document.implementation.createHTMLDocument("title");
@@ -157,7 +160,7 @@ test(function() {
   });
 }, "If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError.")
 
-// Step 3.3.
+// Step 6.2.
 test(function() {
   var doc = document.implementation.createHTMLDocument("title");
   var comment = doc.appendChild(doc.createComment("foo"));
@@ -183,7 +186,7 @@ test(function() {
   });
 }, "If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError.")
 
-// Step 3.4.
+// Step 6.3.
 test(function() {
   var doc = document.implementation.createHTMLDocument("title");
   var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
@@ -209,7 +212,7 @@ test(function() {
   });
 }, "If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError.")
 
-// Step 4.
+// Steps 4/5.
 test(function() {
   var df = document.createDocumentFragment();
   var a = df.appendChild(document.createElement("a"));
@@ -342,4 +345,5 @@ test(function() {
   parent.replaceChild(df, child);
   assert_equals(document.getElementById(TEST_ID), fragChild, "should not be null");
 }, "Replacing an element with a DocumentFragment should allow a child of the DocumentFragment to be found by Id.")
+
 </script>
index 9378dec..cf2e072 100644 (file)
@@ -111,7 +111,7 @@ doctypes.forEach(function(argument) {
 
 // Setting
 // DocumentFragment, Element:
-var arguments = [
+var testArgs = [
   [null, null],
   [undefined, null],
   ["", null],
@@ -121,7 +121,7 @@ var arguments = [
   ["d\0e", "d\0e"]
   // XXX unpaired surrogate?
 ]
-arguments.forEach(function(aValue) {
+testArgs.forEach(function(aValue) {
   var argument = aValue[0], expectation = aValue[1]
   var check = function(aElementOrDocumentFragment) {
     if (expectation === null) {
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt
new file mode 100644 (file)
index 0000000..0c4b912
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS ParentNode.children should be a live collection 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html
new file mode 100644 (file)
index 0000000..6621e7d
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ParentNode.children</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-children">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<div style="display: none">
+  <ul><li id='test'>1</li><li>2</li><li>3</li><li>4</li></ul>
+</div>
+<script>
+test(() => {
+  var node = document.getElementById("test");
+  var parentNode = node.parentNode;
+  var children = parentNode.children;
+  assert_true(children instanceof HTMLCollection);
+  var li = document.createElement("li");
+  assert_equals(children.length, 4);
+
+  parentNode.appendChild(li);
+  assert_equals(children.length, 5);
+
+  parentNode.removeChild(li);
+  assert_equals(children.length, 4);
+}, "ParentNode.children should be a live collection");
+</script>
+</html>
index 39829b4..f6b98ff 100644 (file)
@@ -97,6 +97,8 @@ PASS Document.querySelector: Unknown pseudo-class: div:example
 PASS Document.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Document.querySelector: Unknown pseudo-class: :example 
 PASS Document.querySelectorAll: Unknown pseudo-class: :example 
+PASS Document.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Document.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Document.querySelector: Unknown pseudo-element: div::example 
 PASS Document.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Document.querySelector: Unknown pseudo-element: ::example 
@@ -163,6 +165,8 @@ PASS Detached Element.querySelector: Unknown pseudo-class: div:example
 PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Detached Element.querySelector: Unknown pseudo-class: :example 
 PASS Detached Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS Detached Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Detached Element.querySelector: Unknown pseudo-element: div::example 
 PASS Detached Element.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Detached Element.querySelector: Unknown pseudo-element: ::example 
@@ -229,6 +233,8 @@ PASS Fragment.querySelector: Unknown pseudo-class: div:example
 PASS Fragment.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Fragment.querySelector: Unknown pseudo-class: :example 
 PASS Fragment.querySelectorAll: Unknown pseudo-class: :example 
+PASS Fragment.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Fragment.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Fragment.querySelector: Unknown pseudo-element: div::example 
 PASS Fragment.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Fragment.querySelector: Unknown pseudo-element: ::example 
@@ -295,6 +301,8 @@ PASS In-document Element.querySelector: Unknown pseudo-class: div:example
 PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:example 
 PASS In-document Element.querySelector: Unknown pseudo-class: :example 
 PASS In-document Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS In-document Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS In-document Element.querySelector: Unknown pseudo-element: div::example 
 PASS In-document Element.querySelectorAll: Unknown pseudo-element: div::example 
 PASS In-document Element.querySelector: Unknown pseudo-element: ::example 
@@ -313,6 +321,74 @@ PASS In-document Element.querySelector: Invalid namespace: $|div
 PASS In-document Element.querySelectorAll: Invalid namespace: $|div 
 PASS In-document Element.querySelector: Relative selector: >* 
 PASS In-document Element.querySelectorAll: Relative selector: >* 
+PASS Empty Element.querySelector: Empty String:  
+PASS Empty Element.querySelectorAll: Empty String:  
+PASS Empty Element.querySelector: Invalid character: [ 
+PASS Empty Element.querySelectorAll: Invalid character: [ 
+PASS Empty Element.querySelector: Invalid character: ] 
+PASS Empty Element.querySelectorAll: Invalid character: ] 
+PASS Empty Element.querySelector: Invalid character: ( 
+PASS Empty Element.querySelectorAll: Invalid character: ( 
+PASS Empty Element.querySelector: Invalid character: ) 
+PASS Empty Element.querySelectorAll: Invalid character: ) 
+PASS Empty Element.querySelector: Invalid character: { 
+PASS Empty Element.querySelectorAll: Invalid character: { 
+PASS Empty Element.querySelector: Invalid character: } 
+PASS Empty Element.querySelectorAll: Invalid character: } 
+PASS Empty Element.querySelector: Invalid character: < 
+PASS Empty Element.querySelectorAll: Invalid character: < 
+PASS Empty Element.querySelector: Invalid character: > 
+PASS Empty Element.querySelectorAll: Invalid character: > 
+PASS Empty Element.querySelector: Invalid ID: # 
+PASS Empty Element.querySelectorAll: Invalid ID: # 
+PASS Empty Element.querySelector: Invalid group of selectors: div, 
+PASS Empty Element.querySelectorAll: Invalid group of selectors: div, 
+PASS Empty Element.querySelector: Invalid class: . 
+PASS Empty Element.querySelectorAll: Invalid class: . 
+PASS Empty Element.querySelector: Invalid class: .5cm 
+PASS Empty Element.querySelectorAll: Invalid class: .5cm 
+PASS Empty Element.querySelector: Invalid class: ..test 
+PASS Empty Element.querySelectorAll: Invalid class: ..test 
+PASS Empty Element.querySelector: Invalid class: .foo..quux 
+PASS Empty Element.querySelectorAll: Invalid class: .foo..quux 
+PASS Empty Element.querySelector: Invalid class: .bar. 
+PASS Empty Element.querySelectorAll: Invalid class: .bar. 
+PASS Empty Element.querySelector: Invalid combinator: div & address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div & address, p 
+PASS Empty Element.querySelector: Invalid combinator: div ++ address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div ++ address, p 
+PASS Empty Element.querySelector: Invalid combinator: div ~~ address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div ~~ address, p 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [*=test] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [*=test] 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [*|*=test] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [*|*=test] 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [class= space unquoted ] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] 
+PASS Empty Element.querySelector: Unknown pseudo-class: div:example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: div:example 
+PASS Empty Element.querySelector: Unknown pseudo-class: :example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS Empty Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
+PASS Empty Element.querySelector: Unknown pseudo-element: div::example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-element: div::example 
+PASS Empty Element.querySelector: Unknown pseudo-element: ::example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-element: ::example 
+PASS Empty Element.querySelector: Invalid pseudo-element: :::before 
+PASS Empty Element.querySelectorAll: Invalid pseudo-element: :::before 
+PASS Empty Element.querySelector: Invalid pseudo-element: :: before 
+PASS Empty Element.querySelectorAll: Invalid pseudo-element: :: before 
+PASS Empty Element.querySelector: Undeclared namespace: ns|div 
+PASS Empty Element.querySelectorAll: Undeclared namespace: ns|div 
+PASS Empty Element.querySelector: Undeclared namespace: :not(ns|div) 
+PASS Empty Element.querySelectorAll: Undeclared namespace: :not(ns|div) 
+PASS Empty Element.querySelector: Invalid namespace: ^|div 
+PASS Empty Element.querySelectorAll: Invalid namespace: ^|div 
+PASS Empty Element.querySelector: Invalid namespace: $|div 
+PASS Empty Element.querySelectorAll: Invalid namespace: $|div 
+PASS Empty Element.querySelector: Relative selector: >* 
+PASS Empty Element.querySelectorAll: Relative selector: >* 
 PASS Document.querySelectorAll: Type selector, matching html element: html 
 PASS Document.querySelector: Type selector, matching html element: html 
 PASS Document.querySelectorAll: Type selector, matching body element: body 
@@ -533,8 +609,12 @@ PASS Document.querySelectorAll: :lang pseudo-class selector, not matching incorr
 PASS Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Document.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Document.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Document.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Document.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Document.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Document.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Document.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -545,6 +625,8 @@ PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :n
 PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Document.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Document.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -959,8 +1041,12 @@ PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matchin
 PASS Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Detached Element.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Detached Element.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Detached Element.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Detached Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Detached Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -971,6 +1057,8 @@ PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching not
 PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Detached Element.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Detached Element.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -1383,8 +1471,12 @@ PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorr
 PASS Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Fragment.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Fragment.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Fragment.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Fragment.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Fragment.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Fragment.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Fragment.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -1395,6 +1487,8 @@ PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :n
 PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Fragment.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Fragment.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -1807,8 +1901,12 @@ PASS In-document Element.querySelectorAll: :lang pseudo-class selector, not matc
 PASS In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS In-document Element.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS In-document Element.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS In-document Element.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS In-document Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS In-document Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -1819,6 +1917,8 @@ PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching
 PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS In-document Element.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS In-document Element.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
index 90bbc71..351327f 100644 (file)
@@ -97,6 +97,8 @@ PASS Document.querySelector: Unknown pseudo-class: div:example
 PASS Document.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Document.querySelector: Unknown pseudo-class: :example 
 PASS Document.querySelectorAll: Unknown pseudo-class: :example 
+PASS Document.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Document.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Document.querySelector: Unknown pseudo-element: div::example 
 PASS Document.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Document.querySelector: Unknown pseudo-element: ::example 
@@ -163,6 +165,8 @@ PASS Detached Element.querySelector: Unknown pseudo-class: div:example
 PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Detached Element.querySelector: Unknown pseudo-class: :example 
 PASS Detached Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS Detached Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Detached Element.querySelector: Unknown pseudo-element: div::example 
 PASS Detached Element.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Detached Element.querySelector: Unknown pseudo-element: ::example 
@@ -229,6 +233,8 @@ PASS Fragment.querySelector: Unknown pseudo-class: div:example
 PASS Fragment.querySelectorAll: Unknown pseudo-class: div:example 
 PASS Fragment.querySelector: Unknown pseudo-class: :example 
 PASS Fragment.querySelectorAll: Unknown pseudo-class: :example 
+PASS Fragment.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Fragment.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS Fragment.querySelector: Unknown pseudo-element: div::example 
 PASS Fragment.querySelectorAll: Unknown pseudo-element: div::example 
 PASS Fragment.querySelector: Unknown pseudo-element: ::example 
@@ -295,6 +301,8 @@ PASS In-document Element.querySelector: Unknown pseudo-class: div:example
 PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:example 
 PASS In-document Element.querySelector: Unknown pseudo-class: :example 
 PASS In-document Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS In-document Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
 PASS In-document Element.querySelector: Unknown pseudo-element: div::example 
 PASS In-document Element.querySelectorAll: Unknown pseudo-element: div::example 
 PASS In-document Element.querySelector: Unknown pseudo-element: ::example 
@@ -313,6 +321,74 @@ PASS In-document Element.querySelector: Invalid namespace: $|div
 PASS In-document Element.querySelectorAll: Invalid namespace: $|div 
 PASS In-document Element.querySelector: Relative selector: >* 
 PASS In-document Element.querySelectorAll: Relative selector: >* 
+PASS Empty Element.querySelector: Empty String:  
+PASS Empty Element.querySelectorAll: Empty String:  
+PASS Empty Element.querySelector: Invalid character: [ 
+PASS Empty Element.querySelectorAll: Invalid character: [ 
+PASS Empty Element.querySelector: Invalid character: ] 
+PASS Empty Element.querySelectorAll: Invalid character: ] 
+PASS Empty Element.querySelector: Invalid character: ( 
+PASS Empty Element.querySelectorAll: Invalid character: ( 
+PASS Empty Element.querySelector: Invalid character: ) 
+PASS Empty Element.querySelectorAll: Invalid character: ) 
+PASS Empty Element.querySelector: Invalid character: { 
+PASS Empty Element.querySelectorAll: Invalid character: { 
+PASS Empty Element.querySelector: Invalid character: } 
+PASS Empty Element.querySelectorAll: Invalid character: } 
+PASS Empty Element.querySelector: Invalid character: < 
+PASS Empty Element.querySelectorAll: Invalid character: < 
+PASS Empty Element.querySelector: Invalid character: > 
+PASS Empty Element.querySelectorAll: Invalid character: > 
+PASS Empty Element.querySelector: Invalid ID: # 
+PASS Empty Element.querySelectorAll: Invalid ID: # 
+PASS Empty Element.querySelector: Invalid group of selectors: div, 
+PASS Empty Element.querySelectorAll: Invalid group of selectors: div, 
+PASS Empty Element.querySelector: Invalid class: . 
+PASS Empty Element.querySelectorAll: Invalid class: . 
+PASS Empty Element.querySelector: Invalid class: .5cm 
+PASS Empty Element.querySelectorAll: Invalid class: .5cm 
+PASS Empty Element.querySelector: Invalid class: ..test 
+PASS Empty Element.querySelectorAll: Invalid class: ..test 
+PASS Empty Element.querySelector: Invalid class: .foo..quux 
+PASS Empty Element.querySelectorAll: Invalid class: .foo..quux 
+PASS Empty Element.querySelector: Invalid class: .bar. 
+PASS Empty Element.querySelectorAll: Invalid class: .bar. 
+PASS Empty Element.querySelector: Invalid combinator: div & address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div & address, p 
+PASS Empty Element.querySelector: Invalid combinator: div ++ address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div ++ address, p 
+PASS Empty Element.querySelector: Invalid combinator: div ~~ address, p 
+PASS Empty Element.querySelectorAll: Invalid combinator: div ~~ address, p 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [*=test] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [*=test] 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [*|*=test] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [*|*=test] 
+PASS Empty Element.querySelector: Invalid [att=value] selector: [class= space unquoted ] 
+PASS Empty Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ] 
+PASS Empty Element.querySelector: Unknown pseudo-class: div:example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: div:example 
+PASS Empty Element.querySelector: Unknown pseudo-class: :example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: :example 
+PASS Empty Element.querySelector: Unknown pseudo-class: div:linkexample 
+PASS Empty Element.querySelectorAll: Unknown pseudo-class: div:linkexample 
+PASS Empty Element.querySelector: Unknown pseudo-element: div::example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-element: div::example 
+PASS Empty Element.querySelector: Unknown pseudo-element: ::example 
+PASS Empty Element.querySelectorAll: Unknown pseudo-element: ::example 
+PASS Empty Element.querySelector: Invalid pseudo-element: :::before 
+PASS Empty Element.querySelectorAll: Invalid pseudo-element: :::before 
+PASS Empty Element.querySelector: Invalid pseudo-element: :: before 
+PASS Empty Element.querySelectorAll: Invalid pseudo-element: :: before 
+PASS Empty Element.querySelector: Undeclared namespace: ns|div 
+PASS Empty Element.querySelectorAll: Undeclared namespace: ns|div 
+PASS Empty Element.querySelector: Undeclared namespace: :not(ns|div) 
+PASS Empty Element.querySelectorAll: Undeclared namespace: :not(ns|div) 
+PASS Empty Element.querySelector: Invalid namespace: ^|div 
+PASS Empty Element.querySelectorAll: Invalid namespace: ^|div 
+PASS Empty Element.querySelector: Invalid namespace: $|div 
+PASS Empty Element.querySelectorAll: Invalid namespace: $|div 
+PASS Empty Element.querySelector: Relative selector: >* 
+PASS Empty Element.querySelectorAll: Relative selector: >* 
 PASS Document.querySelectorAll: Type selector, matching html element: html 
 PASS Document.querySelector: Type selector, matching html element: html 
 PASS Document.querySelectorAll: Type selector, matching body element: body 
@@ -533,8 +609,12 @@ PASS Document.querySelectorAll: :lang pseudo-class selector, not matching incorr
 PASS Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Document.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Document.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Document.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Document.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Document.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Document.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Document.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Document.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -545,6 +625,8 @@ PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :n
 PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Document.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Document.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -959,8 +1041,12 @@ PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matchin
 PASS Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Detached Element.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Detached Element.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Detached Element.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Detached Element.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Detached Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Detached Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -971,6 +1057,8 @@ PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching not
 PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Detached Element.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Detached Element.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -1383,8 +1471,12 @@ PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorr
 PASS Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS Fragment.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS Fragment.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Fragment.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS Fragment.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS Fragment.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS Fragment.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS Fragment.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Fragment.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -1395,6 +1487,8 @@ PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :n
 PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS Fragment.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS Fragment.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
@@ -1807,8 +1901,12 @@ PASS In-document Element.querySelectorAll: :lang pseudo-class selector, not matc
 PASS In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR) 
 PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
 PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled 
-PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
-PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS In-document Element.querySelector: :enabled pseudo-class selector, not matching link elements: #pseudo-link :enabled 
+PASS In-document Element.querySelectorAll: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelector: :disabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled 
+PASS In-document Element.querySelectorAll: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
+PASS In-document Element.querySelector: :disabled pseudo-class selector, not matching link elements: #pseudo-link :disabled 
 PASS In-document Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS In-document Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked 
 PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) 
@@ -1819,6 +1917,8 @@ PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching
 PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) 
 PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) 
 PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) 
+PASS In-document Element.querySelectorAll: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
+PASS In-document Element.querySelector: :not pseudo-class selector argument surrounded by spaces, matching : #not>:not( div ) 
 PASS In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line 
 PASS In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line 
index 3915aee..f2d94da 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html id="html" lang="en" xmlns="http://www.w3.org/1999/xhtml">
 <head id="head">
+<meta name="timeout" content="long" />
 <title>Selectors-API Test Suite: XHTML</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
@@ -86,6 +87,8 @@ function init(target) {
   var fragment = doc.createDocumentFragment(); // Fragment Node tests
   fragment.appendChild(element.cloneNode(true));
 
+  var empty = document.createElement("div"); // Empty Node tests
+
   // Setup Tests
   interfaceCheck("Document", doc);
   interfaceCheck("Detached Element", detached);
@@ -106,6 +109,7 @@ function init(target) {
   runInvalidSelectorTest("Detached Element", detached, invalidSelectors);
   runInvalidSelectorTest("Fragment", fragment, invalidSelectors);
   runInvalidSelectorTest("In-document Element", element, invalidSelectors);
+  runInvalidSelectorTest("Empty Element", empty, invalidSelectors);
 
   runValidSelectorTest("Document", doc, validSelectors, testType, docType);
   runValidSelectorTest("Detached Element", detached, validSelectors, testType, docType);
index a1793df..7d68e7f 100644 (file)
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <meta charset="UTF-8">
+<meta name=timeout content=long>
 <title>Selectors-API Test Suite: HTML</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
@@ -84,6 +85,8 @@ function init(target) {
   var fragment = doc.createDocumentFragment(); // Fragment Node tests
   fragment.appendChild(element.cloneNode(true));
 
+  var empty = document.createElement("div"); // Empty Node tests
+
   // Setup Tests
   interfaceCheck("Document", doc);
   interfaceCheck("Detached Element", detached);
@@ -104,6 +107,7 @@ function init(target) {
   runInvalidSelectorTest("Detached Element", detached, invalidSelectors);
   runInvalidSelectorTest("Fragment", fragment, invalidSelectors);
   runInvalidSelectorTest("In-document Element", element, invalidSelectors);
+  runInvalidSelectorTest("Empty Element", empty, invalidSelectors);
 
   runValidSelectorTest("Document", doc, validSelectors, testType, docType);
   runValidSelectorTest("Detached Element", detached, validSelectors, testType, docType);
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative-expected.txt
new file mode 100644 (file)
index 0000000..b2b517f
--- /dev/null
@@ -0,0 +1,24 @@
+Item 1
+Item 2
+Item 1
+Item 2
+Hello world!
+
+  Invalid Time Password:  
+First description.
+Second description.
+Item 1
+Item 2
+Item 1
+Item 2
+
+FAIL aria-activedescendant element reflection assert_equals: invalid ID for relationship returns null expected (object) null but got (undefined) undefined
+FAIL If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute. assert_equals: expected (object) Element node <div role="option" id="option1">Item 1</div> but got (undefined) undefined
+FAIL Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string assert_true: expected true got false
+FAIL Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed. assert_equals: expected (object) null but got (undefined) undefined
+FAIL aria-errormessage assert_equals: expected (string) "errorMessage" but got (object) null
+FAIL aria-details assert_equals: expected (object) null but got (undefined) undefined
+FAIL Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale. assert_equals: expected (object) Element node <div role="option" id="content-attr-element">Item 1</div> but got (undefined) undefined
+FAIL Changing the ID of an element causes the content attribute to become out of sync. assert_equals: expected (object) Element node <div role="option" id="original">Item 1</div> but got (undefined) undefined
+FAIL Reparenting an element into a descendant shadow scope nullifies the element reference. assert_equals: expected null but got Element node <div role="option" id="light-element">Hello world!</div>
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
new file mode 100644 (file)
index 0000000..974727f
--- /dev/null
@@ -0,0 +1,266 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <title>Element Reflection for aria-activedescendant and aria-errormessage</title>
+    <link rel=help href="https://whatpr.org/html/3917/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes:element">
+    <link rel="author" title="Meredith Lane" href="meredithl@chromium.org">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <div id="activedescendant" aria-activedescendant="x"></div>
+
+  <div id="parent-listbox" role="listbox" aria-activedescendant="i1">
+    <div role="option" id="i1">Item 1</div>
+    <div role="option" id="i2">Item 2</div>
+  </div>
+
+  <script>
+  test(function(t) {
+    const ancestor = document.getElementById("parent-listbox");
+    assert_equals(activedescendant.ariaActiveDescendantElement, null,
+                  "invalid ID for relationship returns null");
+
+    const descendant1 = document.getElementById("i1");
+    const descendant2 = document.getElementById("i2");
+
+    // Element reference should be set if the content attribute was included.
+    assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "check content attribute after parsing.");
+    assert_equals(ancestor.ariaActiveDescendantElement, i1, "check idl attribute after parsing.");
+
+    // If we set the content attribute, the element reference should reflect this.
+    ancestor.setAttribute("aria-activedescendant", "i2");
+    assert_equals(ancestor.ariaActiveDescendantElement, descendant2, "setting the content attribute updates the element reference.");
+
+    // Setting the element reference should be reflected in the content attribute.
+    ancestor.ariaActiveDescendantElement = descendant1;
+    assert_equals(ancestor.ariaActiveDescendantElement, descendant1, "getter should return the right element reference.");
+    assert_equals(ancestor.getAttribute("aria-activedescendant"), "i1", "content attribute should reflect the element reference.");
+
+    // Both content and IDL attribute should be nullable.
+    ancestor.ariaActiveDescendantElement = null;
+    assert_equals(ancestor.ariaActiveDescendantElement, null);
+    assert_false(ancestor.hasAttribute("aria-activedescendant"));
+    assert_equals(ancestor.getAttribute("aria-activedescendant"), null, "nullifying the idl attribute removes the content attribute.");
+
+    // Setting content attribute to non-existent or non compatible element should nullify the IDL attribute.
+    // Reset the element to an existant one.
+    ancestor.setAttribute("aria-activedescendant", "i1");
+    assert_equals(ancestor.ariaActiveDescendantElement, i1, "reset attribute.");
+
+    ancestor.setAttribute("aria-activedescendant", "non-existent-element");
+    assert_equals(ancestor.getAttribute("aria-activedescendant"), "non-existent-element");
+    assert_equals(ancestor.ariaActiveDescendantElement, null,"non-DOM content attribute should null the element reference");
+  }, "aria-activedescendant element reflection");
+  </script>
+
+  <div id="parent-listbox-2" role="listbox" aria-activedescendant="option1">
+    <div role="option" id="option1">Item 1</div>
+    <div role="option" id="option2">Item 2</div>
+  </div>
+
+  <script>
+  test(function(t) {
+    const ancestor = document.getElementById("parent-listbox-2");
+    const option1 = document.getElementById("option1");
+    const option2 = document.getElementById("option2");
+    assert_equals(ancestor.ariaActiveDescendantElement, option1);
+
+    option1.removeAttribute("id");
+    option2.setAttribute("id", "option1");
+    const option2Duplicate = document.getElementById("option1");
+    assert_equals(option2, option2Duplicate);
+
+    assert_equals(ancestor.ariaActiveDescendantElement, option2);
+  }, "If the content attribute is set directly, the IDL attribute getter always returns the first element whose ID matches the content attribute.");
+  </script>
+
+  <div id="blank-id-parent" role="listbox">
+    <div role="option" id="multiple-id"></div>
+    <div role="option" id="multiple-id"></div>
+  </div>
+
+  <script>
+  test(function(t) {
+    const ancestor = document.getElementById("blank-id-parent");
+
+    // Get second child of parent. This violates the setting of a reflected element
+    // as it will not be the first child of the parent with that ID, which should
+    // result in an empty string for the content attribute.
+    ancestor.ariaActiveDescendantElement = ancestor.children[1];
+    assert_true(ancestor.hasAttribute("aria-activedescendant"));
+    assert_equals(ancestor.getAttribute("aria-activedescendant"), "");
+    assert_equals(ancestor.ariaActiveDescendantElement, ancestor.children[1]);
+  }, "Setting the IDL attribute to an element which is not the first element in DOM order with its ID causes the content attribute to be an empty string");
+  </script>
+
+  <div id="outer-container">
+    <p id="light-paragraph">Hello world!</p>
+    <span class="shadow-host">
+    </span>
+  </div>
+
+  <script>
+  test(function(t) {
+    const shadowElement = document.querySelector(".shadow-host");
+    const shadow = shadowElement.attachShadow({mode: "open"});
+    const link = document.createElement("a");
+    shadow.appendChild(link);
+
+    const lightPara = document.getElementById("light-paragraph");
+    assert_equals(lightPara.ariaActiveDescendantElement, null);
+
+    // The given element crosses a shadow dom boundary, so it cannot be
+    // set as an element reference.
+    lightPara.ariaActiveDescendantElement = link;
+    assert_equals(lightPara.ariaActiveDescendantElement, null);
+
+    // The given element crosses a shadow dom boundary (upwards), so
+    // can be used as an element reference, but the content attribute
+    // should reflect the empty string.
+    link.ariaActiveDescendantElement = lightPara;
+    assert_equals(link.ariaActiveDescendantElement, lightPara);
+    assert_equals(link.getAttribute("aria-activedescendant"), "");
+  }, "Setting an element reference that crosses into a shadow tree is disallowed, but setting one that is in a shadow inclusive ancestor is allowed.");
+  </script>
+
+  <input id="startTime" ></input>
+  <span id="errorMessage">Invalid Time</span>
+
+  <script>
+  test(function(t) {
+    const inputElement = document.getElementById("startTime");
+    const errorMessage = document.getElementById("errorMessage");
+
+    inputElement.ariaErrorMessageElement = errorMessage;
+    assert_equals(inputElement.getAttribute("aria-errormessage"), "errorMessage");
+
+    inputElement.ariaErrorMessageElement = null;
+    assert_equals(inputElement.ariaErrorMessageElement, null, "blah");
+    assert_false(inputElement.hasAttribute("aria-errormessage"));
+
+    inputElement.setAttribute("aria-errormessage", "errorMessage");
+    assert_equals(inputElement.ariaErrorMessageElement, errorMessage);
+
+  }, "aria-errormessage");
+
+  </script>
+
+  <label>
+    Password:
+    <input id="password-field" type="password" aria-details="pw">
+  </label>
+
+  <ul>
+    <li id="list-item-1">First description.</li>
+    <li id="list-item-2">Second description.</li>
+  </ul>
+
+  <script>
+
+  test(function(t) {
+    const inputElement = document.getElementById("password-field");
+    const ul1 = document.getElementById("list-item-1");
+    const ul2 = document.getElementById("list-item-2");
+
+    assert_equals(inputElement.ariaDetailsElement, null);
+    inputElement.ariaDetailsElement = ul1;
+    assert_equals(inputElement.getAttribute("aria-details"), "list-item-1");
+
+    inputElement.ariaDetailsElement = ul2;
+    assert_equals(inputElement.getAttribute("aria-details"), "list-item-2");
+  }, "aria-details");
+  </script>
+
+  <div id="old-parent" role="listbox" aria-activedescendant="content-attr-element">
+    <div role="option" id="content-attr-element">Item 1</div>
+    <div role="option" id="idl-attr-element">Item 2</div>
+  </div>
+
+  <script>
+
+  test(function(t) {
+    const deletionParent = document.getElementById("old-parent");
+
+    const descendant1 = document.getElementById("content-attr-element");
+    const descendant2 = document.getElementById("idl-attr-element");
+
+    // Deleting an element set via the content attribute.
+    assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
+    assert_equals(deletionParent.ariaActiveDescendantElement, descendant1);
+
+    deletionParent.removeChild(descendant1);
+    assert_equals(deletionParent.getAttribute("aria-activedescendant"), "content-attr-element");
+    assert_equals(deletionParent.ariaActiveDescendantElement, null);
+
+    // Deleting an element set via the IDL attribute.
+    deletionParent.ariaActiveDescendantElement = descendant2;
+    assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
+
+    deletionParent.removeChild(descendant2);
+    assert_equals(deletionParent.ariaActiveDescendantElement, null);
+
+    // The content attribute will still reflect the id.
+    assert_equals(deletionParent.getAttribute("aria-activedescendant"), "idl-attr-element");
+  }, "Deleting a reflected element should return null for the IDL attribute and cause the content attribute to become stale.");
+  </script>
+
+  <div id="parent" role="listbox" aria-activedescendant="original">
+    <div role="option" id="original">Item 1</div>
+    <div role="option" id="element-with-persistant-id">Item 2</div>
+  </div>
+
+  <script>
+  test(function(t) {
+    const parentNode = document.getElementById("parent");
+    const changingIdElement = document.getElementById("original");
+    const persistantIDElement = document.getElementById("element-with-persistant-id");
+
+    assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement);
+
+    // Modify the id attribute.
+    changingIdElement.setAttribute("id", "new-id");
+
+    // The content attribute still reflects the old id, and we expect the
+    // Element reference to be null as there is no DOM node with id "original"
+    assert_equals(parentNode.getAttribute("aria-activedescendant"), "original");
+    assert_equals(parentNode.ariaActiveDescendantElement, null, "Element set via content attribute with a changed id will return null on getting");
+
+    parentNode.ariaActiveDescendantElement = changingIdElement;
+    assert_equals(parentNode.getAttribute("aria-activedescendant"), "new-id");
+
+    // The explicitly set element takes precendance over the content attribute.
+    // This means that we still return the same element reference, but the
+    // content attribute reflects the old id.
+    changingIdElement.setAttribute("id", "newer-id");
+    assert_equals(parentNode.ariaActiveDescendantElement, changingIdElement, "explicitly set element is still present even after the id has been changed");
+    assert_equals(parentNode.getAttribute("aria-activedescendant"), "new-id", "content attribute reflects the id that was present upon explicitly setting the element reference.");
+  }, "Changing the ID of an element causes the content attribute to become out of sync.");
+  </script>
+
+  <div id="light-parent" role="listbox">
+    <div role="option" id="light-element">Hello world!</div>
+  </div>
+  <div id="shadowHost"></div>
+
+  <script>
+  test(function(t) {
+    const shadowElement = document.getElementById("shadowHost");
+    const shadowHost = shadowElement.attachShadow({mode: "open"});
+    const lightParent = document.getElementById("light-parent");
+    const optionElement = document.getElementById("light-element");
+
+    lightParent.ariaActiveDescendantElement = optionElement;
+    assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
+
+    // Move the referenced element into shadow DOM.
+    shadowHost.appendChild(optionElement);
+    assert_equals(lightParent.ariaActiveDescendantElement, null);
+    assert_equals(lightParent.getAttribute("aria-activedescendant"), "light-element");
+
+    // Move the referenced element back into light DOM.
+    lightParent.appendChild(optionElement);
+    assert_equals(lightParent.ariaActiveDescendantElement, optionElement);
+  }, "Reparenting an element into a descendant shadow scope nullifies the element reference.");
+  </script>
+</html>
index 2118893..dac191b 100644 (file)
@@ -604,7 +604,7 @@ test(function() {
 test(function() {
   var el = document.createElement("div");
   var other = document.createElement("div");
-  attr = document.createAttribute("foo");
+  var attr = document.createAttribute("foo");
   assert_equals(el.setAttributeNode(attr), null);
   assert_equals(attr.ownerElement, el);
   assert_throws("INUSE_ATTRIBUTE_ERR",
@@ -614,7 +614,7 @@ test(function() {
 
 test(function() {
   var el = document.createElement("div");
-  attr = document.createAttribute("foo");
+  var attr = document.createAttribute("foo");
   assert_equals(el.setAttributeNode(attr), null);
   el.setAttribute("bar", "qux");
   assert_equals(el.setAttributeNode(attr), attr);
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/pre-insertion-checks.js b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/pre-insertion-checks.js
new file mode 100644 (file)
index 0000000..ab4d811
--- /dev/null
@@ -0,0 +1,108 @@
+function getNonParentNodes() {
+  return [
+    document.implementation.createDocumentType("html", "", ""),
+    document.createTextNode("text"),
+    document.implementation.createDocument(null, "foo", null).createProcessingInstruction("foo", "bar"),
+    document.createComment("comment"),
+    document.implementation.createDocument(null, "foo", null).createCDATASection("data"),
+  ];
+}
+
+function getNonInsertableNodes() {
+  return [
+    document.implementation.createHTMLDocument("title")
+  ];
+}
+
+function getNonDocumentParentNodes() {
+  return [
+    document.createElement("div"),
+    document.createDocumentFragment(),
+  ];
+}
+
+// Test that the steps happen in the right order, to the extent that it's
+// observable.   The variable names "parent", "child", and "node" match the
+// corresponding variables in the replaceChild algorithm in these tests.
+
+// Step 1 happens before step 3.
+test(function() {
+  var illegalParents = getNonParentNodes();
+  var child = document.createElement("div");
+  var node = document.createElement("div");
+  illegalParents.forEach(function (parent) {
+    assert_throws("HierarchyRequestError", function() {
+      insertFunc.call(parent, node, child);
+    });
+  });
+}, "Should check the 'parent' type before checking whether 'child' is a child of 'parent'");
+
+// Step 2 happens before step 3.
+test(function() {
+  var parent = document.createElement("div");
+  var child = document.createElement("div");
+  var node = document.createElement("div");
+
+  node.appendChild(parent);
+  assert_throws("HierarchyRequestError", function() {
+    insertFunc.call(parent, node, child);
+  });
+}, "Should check that 'node' is not an ancestor of 'parent' before checking whether 'child' is a child of 'parent'");
+
+// Step 3 happens before step 4.
+test(function() {
+  var parent = document.createElement("div");
+  var child = document.createElement("div");
+
+  var illegalChildren = getNonInsertableNodes();
+  illegalChildren.forEach(function (node) {
+    assert_throws("NotFoundError", function() {
+      insertFunc.call(parent, node, child);
+    });
+  });
+}, "Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent.");
+
+
+// Step 3 happens before step 5.
+test(function() {
+  var child = document.createElement("div");
+
+  var node = document.createTextNode("");
+  var parent = document.implementation.createDocument(null, "foo", null);
+  assert_throws("NotFoundError", function() {
+    insertFunc.call(parent, node, child);
+  });
+
+  node = document.implementation.createDocumentType("html", "", "");
+  getNonDocumentParentNodes().forEach(function (parent) {
+    assert_throws("NotFoundError", function() {
+      insertFunc.call(parent, node, child);
+    });
+  });
+}, "Should check whether 'child' is a child of 'parent' before checking whether 'node' is of a type that can have a parent of the type that 'parent' is.");
+
+// Step 3 happens before step 6.
+test(function() {
+  var child = document.createElement("div");
+  var parent = document.implementation.createDocument(null, null, null);
+
+  var node = document.createDocumentFragment();
+  node.appendChild(document.createElement("div"));
+  node.appendChild(document.createElement("div"));
+  assert_throws("NotFoundError", function() {
+    insertFunc.call(parent, node, child);
+  });
+
+  node = document.createElement("div");
+  parent.appendChild(document.createElement("div"));
+  assert_throws("NotFoundError", function() {
+    insertFunc.call(parent, node, child);
+  });
+
+  parent.firstChild.remove();
+  parent.appendChild(document.implementation.createDocumentType("html", "", ""));
+  node = document.implementation.createDocumentType("html", "", "")
+  assert_throws("NotFoundError", function() {
+    insertFunc.call(parent, node, child);
+  });
+}, "Should check whether 'child' is a child of 'parent' before checking whether 'node' can be inserted into the document given the kids the document has right now.");
index 2b99590..218797f 100644 (file)
@@ -1,3 +1,3 @@
 var invalid_names = ["", "invalid^Name", "\\", "'", '"', "0", "0:a"] // XXX
-var valid_names = ["x", ":", "a:0"]
+var valid_names = ["x", "X", ":", "a:0"]
 var invalid_qnames = [":a", "b:", "x:y:z"] // XXX
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt
new file mode 100644 (file)
index 0000000..ae2cd7a
--- /dev/null
@@ -0,0 +1,4 @@
+
+
+PASS document.querySelector(":target") must work when called in the window.load event 
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html
new file mode 100644 (file)
index 0000000..2835286
--- /dev/null
@@ -0,0 +1,13 @@
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<iframe></iframe>
+
+<script>
+  let test = async_test('document.querySelector(":target") must work when called in the window.load event');
+  let iframe = document.querySelector("iframe");
+  window.addEventListener("message", test.step_func_done(event => {
+    assert_equals(event.data, "PASS");
+  }));
+  iframe.src = "./query-target-in-load-event.part.html#target";
+</script>
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html
new file mode 100644 (file)
index 0000000..7eb1baf
--- /dev/null
@@ -0,0 +1,10 @@
+<!-- Used by ./query-target-in-load-event.html -->
+<script>
+  window.onload = function() {
+    let target = document.querySelector(":target");
+    let expected = document.querySelector("#target");
+    window.parent.postMessage(target == expected ? "PASS" : "FAIL", "*");
+  };
+</script>
+
+<div id="target"></div>
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash-expected.txt
new file mode 100644 (file)
index 0000000..252eba4
--- /dev/null
@@ -0,0 +1,6 @@
+CONSOLE MESSAGE: line 96: TypeError: null is not an object (evaluating 'document.body.appendChild')
+#PID UNRESPONSIVE - WebKitTestRunner (pid 41723)
+FAIL: Timed out waiting for notifyDone to be called
+
+#EOF
+#EOF
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash.html
new file mode 100644 (file)
index 0000000..d37015e
--- /dev/null
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>Test for a Chrome crash when adopting a node into another document</title>
+<link rel="help" href="https://crbug.com/981384">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="d1"></div>
+<div id="d2"></div>
+<script>
+  test(() => {
+    d1.appendChild(document.createElement("iframe"));
+    d2.remove();
+    const adopted_div = d1;
+    const popup = window.open();
+    assert_equals(adopted_div.ownerDocument, document);
+    popup.document.body.appendChild(document.body);
+    assert_equals(adopted_div.ownerDocument, popup.document);
+  }, "Check that removing a node and then adopting its parent into a different window/document doesn't crash.");
+</script>
index aa8710e..ac0bf73 100644 (file)
@@ -1,4 +1,5 @@
 
+PASS getRootNode() must return context object's shadow-including root if options's composed is true, and context object's root otherwise 
 PASS getRootNode() must return the context object when it does not have any parent 
 PASS getRootNode() must return the parent node of the context object when the context object has a single ancestor not in a document 
 PASS getRootNode() must return the document when a node is in document 
index 66343e7..784831d 100644 (file)
 <script>
 
 test(function () {
+    var shadowHost = document.createElement('div');
+    document.body.appendChild(shadowHost);
+
+    var shadowRoot = shadowHost.attachShadow({mode: 'open'});
+    shadowRoot.innerHTML = '<div class="shadowChild">content</div>';
+
+    var shadowChild = shadowRoot.querySelector('.shadowChild');
+    assert_equals(shadowChild.getRootNode({composed: true}), document, "getRootNode() must return context object's shadow-including root if options's composed is true");
+    assert_equals(shadowChild.getRootNode({composed: false}), shadowRoot, "getRootNode() must return context object's root if options's composed is false");
+    assert_equals(shadowChild.getRootNode(), shadowRoot, "getRootNode() must return context object's root if options's composed is default false");
+
+}, "getRootNode() must return context object's shadow-including root if options's composed is true, and context object's root otherwise");
+
+test(function () {
     var element = document.createElement('div');
     assert_equals(element.getRootNode(), element, 'getRootNode() on an element without a parent must return the element itself');
 
index 941b3ac..c1680ce 100644 (file)
@@ -34,6 +34,7 @@ var invalidSelectors = [
   {name: "Invalid [att=value] selector", selector: "[class= space unquoted ]"},
   {name: "Unknown pseudo-class",         selector: "div:example"},
   {name: "Unknown pseudo-class",         selector: ":example"},
+  {name: "Unknown pseudo-class",         selector: "div:linkexample"},
   {name: "Unknown pseudo-element",       selector: "div::example"},
   {name: "Unknown pseudo-element",       selector: "::example"},
   {name: "Invalid pseudo-element",       selector: ":::before"},
@@ -69,7 +70,7 @@ var validSelectors = [
   {name: "Type selector, matching body element", selector: "body", expect: [] /*no matches*/, exclude: ["document"],                        level: 1, testType: TEST_QSA},
 
   // Universal Selector
-  // Testing "*" for entire an entire context node is handled separately.
+  {name: "Universal selector, matching all elements",                                    selector: "*",              expect: ["universal", "universal-p1", "universal-code1", "universal-hr1", "universal-pre1", "universal-span1", "universal-p2", "universal-a1", "universal-address1", "universal-code2", "universal-a2"], level: 2, testType: TEST_MATCH},
   {name: "Universal selector, matching all children of element with specified ID",       selector: "#universal>*",   expect: ["universal-p1", "universal-hr1", "universal-pre1", "universal-p2", "universal-address1"], level: 2, testType: TEST_QSA | TEST_MATCH},
   {name: "Universal selector, matching all grandchildren of element with specified ID",  selector: "#universal>*>*", expect: ["universal-code1", "universal-span1", "universal-a1", "universal-code2"],                 level: 2, testType: TEST_QSA | TEST_MATCH},
   {name: "Universal selector, matching all children of empty element with specified ID", selector: "#empty>*",       expect: [] /*no matches*/,                                                                         level: 2, testType: TEST_QSA},
@@ -236,10 +237,12 @@ var validSelectors = [
   // - :enabled              (Level 3)
   {name: ":enabled pseudo-class selector, matching all enabled form controls",  selector: "#pseudo-ui :enabled",  expect: ["pseudo-ui-input1", "pseudo-ui-input2", "pseudo-ui-input3", "pseudo-ui-input4", "pseudo-ui-input5", "pseudo-ui-input6",
                                                                                                                            "pseudo-ui-input7", "pseudo-ui-input8", "pseudo-ui-input9", "pseudo-ui-textarea1", "pseudo-ui-button1"],    level: 3, testType: TEST_QSA | TEST_MATCH},
+  {name: ":enabled pseudo-class selector, not matching link elements",  selector: "#pseudo-link :enabled",  expect: [] /*no matches*/, unexpected: ["pseudo-link-a1","pseudo-link-a2","pseudo-link-a3","pseudo-link-map1","pseudo-link-area1","pseudo-link-area2"],   level: 3, testType: TEST_QSA | TEST_MATCH},
 
   // - :disabled             (Level 3)
-  {name: ":enabled pseudo-class selector, matching all disabled form controls", selector: "#pseudo-ui :disabled", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
+  {name: ":disabled pseudo-class selector, matching all disabled form controls", selector: "#pseudo-ui :disabled", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
                                                                                                                            "pseudo-ui-input16", "pseudo-ui-input17", "pseudo-ui-input18", "pseudo-ui-textarea2", "pseudo-ui-button2"], level: 3, testType: TEST_QSA | TEST_MATCH},
+  {name: ":disabled pseudo-class selector, not matching link elements", selector: "#pseudo-link :disabled", expect: [] /*no matches*/, unexpected: ["pseudo-link-a1","pseudo-link-a2","pseudo-link-a3","pseudo-link-map1","pseudo-link-area1","pseudo-link-area2"], level: 3, testType: TEST_QSA | TEST_MATCH},
 
   // - :checked              (Level 3)
   {name: ":checked pseudo-class selector, matching checked radio buttons and checkboxes", selector: "#pseudo-ui :checked", expect: ["pseudo-ui-input4", "pseudo-ui-input6", "pseudo-ui-input13", "pseudo-ui-input15"],  level: 3, testType: TEST_QSA | TEST_MATCH},
@@ -249,6 +252,7 @@ var validSelectors = [
   {name: ":not pseudo-class selector, matching ", selector: "#not * :not(:first-child)",   expect: ["not-em1", "not-em2", "not-em3"], level: 3, testType: TEST_QSA | TEST_MATCH},
   {name: ":not pseudo-class selector, matching nothing", selector: ":not(*)",   expect: [] /* no matches */, level: 3, testType: TEST_QSA},
   {name: ":not pseudo-class selector, matching nothing", selector: ":not(*|*)", expect: [] /* no matches */, level: 3, testType: TEST_QSA},
+  {name: ":not pseudo-class selector argument surrounded by spaces, matching ", selector: "#not>:not( div )",   expect: ["not-p1", "not-p2", "not-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
 
   // Pseudo-elements
   // - ::first-line
@@ -451,10 +455,6 @@ var validSelectors = [
 var scopedSelectors = [
   //{name: "", selector: "", ctx: "", ref: "", expect: [], level: 1, testType: TEST_FIND | TEST_MATCH},
 
-  // Universal Selector
-  {name: "Universal selector, matching all descendants of the specified reference element",    selector: "*",    ctx: "#universal", expect: ["universal-p1", "universal-code1", "universal-hr1", "universal-pre1", "universal-span1",
-                                                                                                                                             "universal-p2", "universal-a1", "universal-address1", "universal-code2", "universal-a2"], unexpected: ["universal", "empty"], level: 2, testType: TEST_FIND | TEST_MATCH},
-
   // Attribute Selectors
   // - presence                  [att]
   {name: "Attribute presence selector, matching align attribute with value",                    selector: ".attr-presence-div1[align]",                             ctx: "#attr-presence", expect: ["attr-presence-div1"],                                             level: 2, testType: TEST_FIND | TEST_MATCH},
@@ -540,10 +540,13 @@ var scopedSelectors = [
   {name: ":root pseudo-class selector, not matching document root element",  selector: ":root", ctx: "#html", expect: [] /*no matches*/, exclude: ["fragment", "detached"],            level: 3, testType: TEST_FIND},
 
   // - :nth-child(n)         (Level 3)
-  {name: ":nth-child selector, matching the third child element",                              selector: ":nth-child(3)",      ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-td3", "pseudo-nth-td9", "pseudo-nth-tr3", "pseudo-nth-td15"],             level: 3, testType: TEST_FIND | TEST_MATCH},
-  {name: ":nth-child selector, matching every third child element",                            selector: "li:nth-child(3n)",   ctx: "#pseudo-nth", expect: ["pseudo-nth-li3", "pseudo-nth-li6", "pseudo-nth-li9", "pseudo-nth-li12"],                    level: 3, testType: TEST_FIND | TEST_MATCH},
-  {name: ":nth-child selector, matching every second child element, starting from the fourth", selector: "li:nth-child(2n+4)", ctx: "#pseudo-nth", expect: ["pseudo-nth-li4", "pseudo-nth-li6", "pseudo-nth-li8", "pseudo-nth-li10", "pseudo-nth-li12"], level: 3, testType: TEST_FIND | TEST_MATCH},
-  {name: ":nth-child selector, matching every fourth child element, starting from the third",  selector: ":nth-child(4n-1)",   ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2", "pseudo-nth-span3"],                                                    level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching the third child element",                                               selector: ":nth-child(3)",                    ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-td3", "pseudo-nth-td9", "pseudo-nth-tr3", "pseudo-nth-td15"],             level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching every third child element",                                             selector: "li:nth-child(3n)",                 ctx: "#pseudo-nth", expect: ["pseudo-nth-li3", "pseudo-nth-li6", "pseudo-nth-li9", "pseudo-nth-li12"],                    level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching every second child element, starting from the fourth",                  selector: "li:nth-child(2n+4)",               ctx: "#pseudo-nth", expect: ["pseudo-nth-li4", "pseudo-nth-li6", "pseudo-nth-li8", "pseudo-nth-li10", "pseudo-nth-li12"], level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching every second child element, starting from the fourth, with whitespace", selector: "li:nth-child(2n \t\r\n+ \t\r\n4)", ctx: "#pseudo-nth", expect: ["pseudo-nth-li4", "pseudo-nth-li6", "pseudo-nth-li8", "pseudo-nth-li10", "pseudo-nth-li12"], level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching every fourth child element, starting from the third",                   selector: ":nth-child(4n-1)",                 ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2", "pseudo-nth-span3"],                                                    level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector, matching every fourth child element, starting from the third, with whitespace",  selector: ":nth-child(4n \t\r\n- \t\r\n1)",   ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2", "pseudo-nth-span3"],                                                    level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":nth-child selector used twice, matching ",                                                           selector: ":nth-child(1) :nth-child(1)",      ctx: "#pseudo-nth", expect: ["pseudo-nth-table1", "pseudo-nth-tr1"],                                                      level: 3, testType: TEST_FIND | TEST_MATCH},
 
   // - :nth-last-child       (Level 3)
   {name: ":nth-last-child selector, matching the third last child element",                                           selector: ":nth-last-child(3)",      ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-tr1", "pseudo-nth-td4", "pseudo-nth-td10", "pseudo-nth-td16"],         level: 3, testType: TEST_FIND | TEST_MATCH},
@@ -618,10 +621,12 @@ var scopedSelectors = [
   // - :enabled              (Level 3)
   {name: ":enabled pseudo-class selector, matching all enabled form controls (1)",  selector: "#pseudo-ui :enabled",  ctx: "", expect: ["pseudo-ui-input1", "pseudo-ui-input2", "pseudo-ui-input3", "pseudo-ui-input4", "pseudo-ui-input5", "pseudo-ui-input6",
                                                                                                                            "pseudo-ui-input7", "pseudo-ui-input8", "pseudo-ui-input9", "pseudo-ui-textarea1", "pseudo-ui-button1"],    level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":enabled pseudo-class selector, not matching link elements (1)",  selector: "#pseudo-link :enabled",  ctx: "", expect: [] /*no matches*/, unexpected: ["pseudo-link-a1","pseudo-link-a2","pseudo-link-a3","pseudo-link-map1","pseudo-link-area1","pseudo-link-area2"],   level: 3, testType: TEST_QSA | TEST_MATCH},
 
   // - :disabled             (Level 3)
-  {name: ":enabled pseudo-class selector, matching all disabled form controls (1)", selector: "#pseudo-ui :disabled", ctx: "", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
+  {name: ":disabled pseudo-class selector, matching all disabled form controls (1)", selector: "#pseudo-ui :disabled", ctx: "", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
                                                                                                                            "pseudo-ui-input16", "pseudo-ui-input17", "pseudo-ui-input18", "pseudo-ui-textarea2", "pseudo-ui-button2"], level: 3, testType: TEST_FIND | TEST_MATCH},
+  {name: ":disabled pseudo-class selector, not matching link elements (1)", selector: "#pseudo-link :disabled", ctx: "", expect: [] /*no matches*/, unexpected: ["pseudo-link-a1","pseudo-link-a2","pseudo-link-a3","pseudo-link-map1","pseudo-link-area1","pseudo-link-area2"], level: 3, testType: TEST_QSA | TEST_MATCH},
 
   // - :checked              (Level 3)
   {name: ":checked pseudo-class selector, matching checked radio buttons and checkboxes (1)", selector: "#pseudo-ui :checked", ctx: "", expect: ["pseudo-ui-input4", "pseudo-ui-input6", "pseudo-ui-input13", "pseudo-ui-input15"],  level: 3, testType: TEST_FIND | TEST_MATCH},
index 552b9ce..bdcbe8e 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
@@ -36,7 +36,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/DOMImplementation-hasFeature.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js
-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-URL.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-adoptNode.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-characterSet-normalization.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-svg.svg
@@ -49,7 +49,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElementNS.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElementNS.js
-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createProcessingInstruction-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createProcessingInstruction.html
@@ -58,6 +58,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createTreeWalker.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-doctype.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementById.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS.html
@@ -66,22 +67,30 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/DocumentType-literal-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/DocumentType-literal.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/DocumentType-remove.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElement-null-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElement-null-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElement-null.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-add-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-add.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-remove-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-dynamic-remove.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-nochild-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-nochild.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-childElementCount.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-classlist.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-closest.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-entity-xhtml.xhtml
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-entity.svg
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-namespace-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-namespace.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-firstElementChild.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html
@@ -92,17 +101,21 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-hasAttributes.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-insertAdjacentElement.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-insertAdjacentText.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-lastElementChild-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-lastElementChild-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-lastElementChild.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-matches-init.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-matches.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-matches.js
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-nextElementSibling-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-nextElementSibling-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-nextElementSibling.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-previousElementSibling-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-previousElementSibling-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-previousElementSibling.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-remove.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-removeAttributeNS.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-siblingElement-null-svg.svg
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-siblingElement-null-xhtml.xhtml
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-siblingElement-null.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-tagName.html
@@ -144,6 +157,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-textContent.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/NodeList-Iterable.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-append.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-prepend.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht
@@ -156,6 +170,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Text-constructor.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Text-splitText.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/append-on-Document.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/aria-element-reflection.tentative.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/case.html
@@ -196,8 +211,12 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/getElementsByClassNameFrame.htm
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/insert-adjacent.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/mutationobservers.js
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/pre-insertion-checks.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/prepend-on-Document.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/productions.js
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-and-adopt-crash.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-unscopable.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/rootNode.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/selectors.js
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt
new file mode 100644 (file)
index 0000000..773239d
--- /dev/null
@@ -0,0 +1,4 @@
+s0s1s2
+
+FAIL Range.intersectsNode() simple cases assert_false: [s0] range.intersectsNode(s1) expected false got true
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html
new file mode 100644 (file)
index 0000000..48072d9
--- /dev/null
@@ -0,0 +1,36 @@
+<!doctype htlml>
+<title>Range.intersectsNode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="div"><span id="s0">s0</span><span id="s1">s1</span><span id="s2">s2</span></div>
+<script>
+// Taken from Chromium bug: http://crbug.com/822510
+test(() => {
+  const range = new Range();
+  const div = document.getElementById('div');
+  const s0 = document.getElementById('s0');
+  const s1 = document.getElementById('s1');
+  const s2 = document.getElementById('s2');
+
+  // Range encloses s0
+  range.setStart(div, 0);
+  range.setEnd(div, 1);
+  assert_true(range.intersectsNode(s0), '[s0] range.intersectsNode(s0)');
+  assert_false(range.intersectsNode(s1), '[s0] range.intersectsNode(s1)');
+  assert_false(range.intersectsNode(s2), '[s0] range.intersectsNode(s2)');
+
+  // Range encloses s1
+  range.setStart(div, 1);
+  range.setEnd(div, 2);
+  assert_false(range.intersectsNode(s0), '[s1] range.intersectsNode(s0)');
+  assert_true(range.intersectsNode(s1), '[s1] range.intersectsNode(s1)');
+  assert_false(range.intersectsNode(s2), '[s1] range.intersectsNode(s2)');
+
+  // Range encloses s2
+  range.setStart(div, 2);
+  range.setEnd(div, 3);
+  assert_false(range.intersectsNode(s0), '[s2] range.intersectsNode(s0)');
+  assert_false(range.intersectsNode(s1), '[s2] range.intersectsNode(s1)');
+  assert_true(range.intersectsNode(s2), '[s2] range.intersectsNode(s2)');
+}, 'Range.intersectsNode() simple cases');
+</script>
index 11b4285..5798d29 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
@@ -28,6 +28,7 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-detach.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-extractContents.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-insertNode.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-binding.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-isPointInRange.html
@@ -47,3 +48,4 @@ List of files:
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-stringifier.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-surroundContents.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-test-iframe.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/StaticRange-constructor.html
index 3d030af..2cd1773 100644 (file)
@@ -1,7 +1,7 @@
 The tests in this directory were imported from the W3C repository.
 Do NOT modify these tests directly in WebKit.
 Instead, create a pull request on the WPT github:
-       https://github.com/w3c/web-platform-tests
+       https://github.com/web-platform-tests/wpt
 
 Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
 
@@ -14,9 +14,10 @@ Property values requiring vendor prefixes:
 None
 ------------------------------------------------------------------------
 List of files:
-/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS
+/LayoutTests/imported/w3c/web-platform-tests/dom/META.yml
 /LayoutTests/imported/w3c/web-platform-tests/dom/common.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/constants.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/historical.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.any.js
+/LayoutTests/imported/w3c/web-platform-tests/dom/idlharness.window.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/interface-objects.html
-/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html
index f9c1d06..9f193f3 100644 (file)
@@ -3199,7 +3199,6 @@ webkit.org/b/153700 fast/ruby/ruby-expansion-cjk.html [ ImageOnlyFailure ]
 
 webkit.org/b/94952 platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html [ Failure ]
 
-webkit.org/b/153707 imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html [ Failure ]
 webkit.org/b/153707 imported/w3c/web-platform-tests/html/dom/interfaces.html [ Failure ]
 webkit.org/b/153707 imported/w3c/web-platform-tests/dom/events/EventTarget-dispatchEvent.html [ Failure ]
 
diff --git a/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt b/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.https-expected.txt
new file mode 100644 (file)
index 0000000..095603d
--- /dev/null
@@ -0,0 +1,293 @@
+
+PASS BeforeUnloadEvent should be an alias for BeforeUnloadEvent. 
+PASS createEvent('BeforeUnloadEvent') should be initialized correctly. 
+PASS beforeunloadevent should be an alias for BeforeUnloadEvent. 
+PASS createEvent('beforeunloadevent') should be initialized correctly. 
+PASS BEFOREUNLOADEVENT should be an alias for BeforeUnloadEvent. 
+PASS createEvent('BEFOREUNLOADEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "BeforeUnloadEvents" 
+PASS CompositionEvent should be an alias for CompositionEvent. 
+PASS createEvent('CompositionEvent') should be initialized correctly. 
+PASS compositionevent should be an alias for CompositionEvent. 
+PASS createEvent('compositionevent') should be initialized correctly. 
+PASS COMPOSITIONEVENT should be an alias for CompositionEvent. 
+PASS createEvent('COMPOSITIONEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "CompositionEvents" 
+PASS CustomEvent should be an alias for CustomEvent. 
+PASS createEvent('CustomEvent') should be initialized correctly. 
+PASS customevent should be an alias for CustomEvent. 
+PASS createEvent('customevent') should be initialized correctly. 
+PASS CUSTOMEVENT should be an alias for CustomEvent. 
+PASS createEvent('CUSTOMEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "CustomEvents" 
+PASS DeviceMotionEvent should be an alias for DeviceMotionEvent. 
+PASS createEvent('DeviceMotionEvent') should be initialized correctly. 
+PASS devicemotionevent should be an alias for DeviceMotionEvent. 
+PASS createEvent('devicemotionevent') should be initialized correctly. 
+PASS DEVICEMOTIONEVENT should be an alias for DeviceMotionEvent. 
+PASS createEvent('DEVICEMOTIONEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DeviceMotionEvents" 
+PASS DeviceOrientationEvent should be an alias for DeviceOrientationEvent. 
+PASS createEvent('DeviceOrientationEvent') should be initialized correctly. 
+PASS deviceorientationevent should be an alias for DeviceOrientationEvent. 
+PASS createEvent('deviceorientationevent') should be initialized correctly. 
+PASS DEVICEORIENTATIONEVENT should be an alias for DeviceOrientationEvent. 
+PASS createEvent('DEVICEORIENTATIONEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DeviceOrientationEvents" 
+FAIL DragEvent should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('DragEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL dragevent should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('dragevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL DRAGEVENT should be an alias for DragEvent. The operation is not supported.
+FAIL createEvent('DRAGEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "DragEvents" 
+PASS Event should be an alias for Event. 
+PASS createEvent('Event') should be initialized correctly. 
+PASS event should be an alias for Event. 
+PASS createEvent('event') should be initialized correctly. 
+PASS EVENT should be an alias for Event. 
+PASS createEvent('EVENT') should be initialized correctly. 
+PASS Events should be an alias for Event. 
+PASS createEvent('Events') should be initialized correctly. 
+PASS events should be an alias for Event. 
+PASS createEvent('events') should be initialized correctly. 
+PASS EVENTS should be an alias for Event. 
+PASS createEvent('EVENTS') should be initialized correctly. 
+PASS FocusEvent should be an alias for FocusEvent. 
+PASS createEvent('FocusEvent') should be initialized correctly. 
+PASS focusevent should be an alias for FocusEvent. 
+PASS createEvent('focusevent') should be initialized correctly. 
+PASS FOCUSEVENT should be an alias for FocusEvent. 
+PASS createEvent('FOCUSEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "FocusEvents" 
+PASS HashChangeEvent should be an alias for HashChangeEvent. 
+PASS createEvent('HashChangeEvent') should be initialized correctly. 
+PASS hashchangeevent should be an alias for HashChangeEvent. 
+PASS createEvent('hashchangeevent') should be initialized correctly. 
+PASS HASHCHANGEEVENT should be an alias for HashChangeEvent. 
+PASS createEvent('HASHCHANGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "HashChangeEvents" 
+PASS HTMLEvents should be an alias for Event. 
+PASS createEvent('HTMLEvents') should be initialized correctly. 
+PASS htmlevents should be an alias for Event. 
+PASS createEvent('htmlevents') should be initialized correctly. 
+PASS HTMLEVENTS should be an alias for Event. 
+PASS createEvent('HTMLEVENTS') should be initialized correctly. 
+PASS KeyboardEvent should be an alias for KeyboardEvent. 
+PASS createEvent('KeyboardEvent') should be initialized correctly. 
+PASS keyboardevent should be an alias for KeyboardEvent. 
+PASS createEvent('keyboardevent') should be initialized correctly. 
+PASS KEYBOARDEVENT should be an alias for KeyboardEvent. 
+PASS createEvent('KEYBOARDEVENT') should be initialized correctly. 
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "KeyboardEvents" assert_throws: function "function () {
+          var evt = document.createEvent(plural);
+        }" did not throw
+PASS MessageEvent should be an alias for MessageEvent. 
+PASS createEvent('MessageEvent') should be initialized correctly. 
+PASS messageevent should be an alias for MessageEvent. 
+PASS createEvent('messageevent') should be initialized correctly. 
+PASS MESSAGEEVENT should be an alias for MessageEvent. 
+PASS createEvent('MESSAGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "MessageEvents" 
+PASS MouseEvent should be an alias for MouseEvent. 
+PASS createEvent('MouseEvent') should be initialized correctly. 
+PASS mouseevent should be an alias for MouseEvent. 
+PASS createEvent('mouseevent') should be initialized correctly. 
+PASS MOUSEEVENT should be an alias for MouseEvent. 
+PASS createEvent('MOUSEEVENT') should be initialized correctly. 
+PASS MouseEvents should be an alias for MouseEvent. 
+PASS createEvent('MouseEvents') should be initialized correctly. 
+PASS mouseevents should be an alias for MouseEvent. 
+PASS createEvent('mouseevents') should be initialized correctly. 
+PASS MOUSEEVENTS should be an alias for MouseEvent. 
+PASS createEvent('MOUSEEVENTS') should be initialized correctly. 
+PASS StorageEvent should be an alias for StorageEvent. 
+PASS createEvent('StorageEvent') should be initialized correctly. 
+PASS storageevent should be an alias for StorageEvent. 
+PASS createEvent('storageevent') should be initialized correctly. 
+PASS STORAGEEVENT should be an alias for StorageEvent. 
+PASS createEvent('STORAGEEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "StorageEvents" 
+PASS SVGEvents should be an alias for Event. 
+PASS createEvent('SVGEvents') should be initialized correctly. 
+PASS svgevents should be an alias for Event. 
+PASS createEvent('svgevents') should be initialized correctly. 
+PASS SVGEVENTS should be an alias for Event. 
+PASS createEvent('SVGEVENTS') should be initialized correctly. 
+FAIL TextEvent should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('TextEvent') should be initialized correctly. 
+FAIL textevent should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('textevent') should be initialized correctly. 
+FAIL TEXTEVENT should be an alias for CompositionEvent. assert_equals: expected object "[object CompositionEventPrototype]" but got object "[object TextEventPrototype]"
+PASS createEvent('TEXTEVENT') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "TextEvents" 
+FAIL TouchEvent should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('TouchEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL touchevent should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('touchevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL TOUCHEVENT should be an alias for TouchEvent. The operation is not supported.
+FAIL createEvent('TOUCHEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "TouchEvents" 
+PASS UIEvent should be an alias for UIEvent. 
+PASS createEvent('UIEvent') should be initialized correctly. 
+PASS uievent should be an alias for UIEvent. 
+PASS createEvent('uievent') should be initialized correctly. 
+PASS UIEVENT should be an alias for UIEvent. 
+PASS createEvent('UIEVENT') should be initialized correctly. 
+PASS UIEvents should be an alias for UIEvent. 
+PASS createEvent('UIEvents') should be initialized correctly. 
+PASS uievents should be an alias for UIEvent. 
+PASS createEvent('uievents') should be initialized correctly. 
+PASS UIEVENTS should be an alias for UIEvent. 
+PASS createEvent('UIEVENTS') should be initialized correctly. 
+PASS Should throw NOT_SUPPORTED_ERR for unrecognized arguments 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationPlaybackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationPlaybackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AnimationPlayerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AnimationPlayerEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ApplicationCacheErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ApplicationCacheErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AudioProcessingEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AudioProcessingEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "AutocompleteErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "AutocompleteErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "BeforeInstallPromptEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "BeforeInstallPromptEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "BlobEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "BlobEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ClipboardEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ClipboardEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "CloseEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "CloseEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "CommandEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "CommandEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "DataContainerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "DataContainerEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ErrorEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ErrorEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ExtendableEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ExtendableEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ExtendableMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ExtendableMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "FetchEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "FetchEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "FontFaceSetLoadEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "FontFaceSetLoadEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "GamepadEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "GamepadEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "GeofencingEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "GeofencingEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "IDBVersionChangeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "IDBVersionChangeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "InstallEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "InstallEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "KeyEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "KeyEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MIDIConnectionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MIDIConnectionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MIDIMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MIDIMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaEncryptedEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaEncryptedEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaKeyEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaKeyEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaKeyMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaKeyMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaQueryListEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaQueryListEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaStreamEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaStreamEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MediaStreamTrackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MediaStreamTrackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MouseScrollEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MouseScrollEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "MutationEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "MutationEvents" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface + "s");
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "NotificationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "NotificationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "NotifyPaintEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "NotifyPaintEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "OfflineAudioCompletionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "OfflineAudioCompletionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "OrientationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "OrientationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PageTransition" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PageTransitions" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PageTransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PageTransitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PointerEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PointerEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PopStateEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PopStateEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PopUpEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PopUpEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PresentationConnectionAvailableEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PresentationConnectionAvailableEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PresentationConnectionCloseEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PresentationConnectionCloseEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ProgressEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ProgressEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PromiseRejectionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PromiseRejectionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "PushEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "PushEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCDTMFToneChangeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCDTMFToneChangeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCDataChannelEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCDataChannelEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RTCIceCandidateEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RTCIceCandidateEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "RelatedEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "RelatedEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ResourceProgressEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ResourceProgressEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SVGEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SVGZoomEvent" 
+FAIL Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SVGZoomEvents" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface + "s");
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ScrollAreaEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ScrollAreaEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SecurityPolicyViolationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SecurityPolicyViolationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ServicePortConnectEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ServicePortConnectEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "ServiceWorkerMessageEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "ServiceWorkerMessageEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SimpleGestureEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SimpleGestureEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechRecognitionError" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechRecognitionErrors" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechRecognitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechRecognitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SpeechSynthesisEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SpeechSynthesisEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "SyncEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "SyncEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TimeEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TimeEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TrackEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TrackEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "TransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "TransitionEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebGLContextEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebGLContextEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebKitAnimationEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebKitAnimationEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WebKitTransitionEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WebKitTransitionEvents" 
+FAIL Should throw NOT_SUPPORTED_ERR for non-legacy event interface "WheelEvent" assert_throws: function "function () {
+        var evt = document.createEvent(eventInterface);
+      }" did not throw
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "WheelEvents" 
+PASS Should throw NOT_SUPPORTED_ERR for non-legacy event interface "XULCommandEvent" 
+PASS Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "XULCommandEvents" 
+
index 643eb0f..97d8403 100644 (file)
@@ -128,7 +128,8 @@ PASS createElementNS HTML
 PASS createElementNS non-HTML 
 PASS createProcessingInstruction 
 PASS implementation.createDocumentType 
-FAIL implementation.createDocument assert_equals: origin value expected "null" but got "http://localhost:8800"
+PASS implementation.createDocument 
 PASS implementation.createHTMLDocument 
 PASS node with children 
+PASS Node with custom prototype 
 
index dfb0528..aabcf9a 100644 (file)
@@ -2423,7 +2423,6 @@ fast/forms/file/open-file-panel.html [ Skip ]
 # Tests that are failing after bug 157170 (WPT test sync). These tests may just need rebasing.
 imported/w3c/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html [ Failure ]
 [ Release ] imported/w3c/web-platform-tests/html/dom/interfaces.html [ Failure ]
-imported/w3c/web-platform-tests/dom/nodes/Document-createEvent.html [ Failure ]
 imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/selection.html [ Failure ]
 imported/w3c/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-badInput.html [ Failure ]
 imported/w3c/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html [ Failure ]
index 643eb0f..97d8403 100644 (file)
@@ -128,7 +128,8 @@ PASS createElementNS HTML
 PASS createElementNS non-HTML 
 PASS createProcessingInstruction 
 PASS implementation.createDocumentType 
-FAIL implementation.createDocument assert_equals: origin value expected "null" but got "http://localhost:8800"
+PASS implementation.createDocument 
 PASS implementation.createHTMLDocument 
 PASS node with children 
+PASS Node with custom prototype 
 
index 725e685..afb2462 100644 (file)
@@ -2787,7 +2787,6 @@ fast/events/pageshow-pagehide-on-back-uncached.html [ Skip ]
 # Newly imported W3C tests that are failing on Windows only.
 imported/w3c/web-platform-tests/html/dom/interfaces.html [ Skip ]
 imported/w3c/web-platform-tests/dom/nodes/Document-contentType/contentType/contenttype_css.html [ Skip ]
-imported/w3c/web-platform-tests/dom/nodes/Document-URL.sub.html [ Skip ]
 
 # Weird black images
 fast/filter-image/background-filter-image.html [ ImageOnlyFailure ]
index 511c5eb..a6be9af 100644 (file)
     "imported/w3c/web-platform-tests/dom/nodes/Document-characterSet-normalization.html": [
         "slow"
     ],
+    "imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-xht.xht": [
+        "slow"
+    ],
+    "imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All.html": [
+        "slow"
+    ],
     "imported/w3c/web-platform-tests/dom/ranges/Range-attributes.html": [
         "slow"
     ],