Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Document-prototype-currentScript.html |
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Document-prototype-currentScript.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Document-prototype-currentScript.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e902ec514951d4769daa843868fc24383e0f2e9b |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Document-prototype-currentScript.html |
@@ -0,0 +1,98 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<title>HTML: Document.prototype.currentScript</title> |
+<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> |
+<meta name="assert" content="If the script element is in a document, then set the script element's node document's currentScript attribute to the script element."> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block"> |
+<script src="../../../resources/testharness.js"></script> |
+<script src="../../../resources/testharnessreport.js"></script> |
+</head> |
+<body> |
+<div id="log"></div> |
+<script id="outerScriptElement"> |
+ |
+var outerScriptElement = document.currentScript; |
+ |
+function testInlineScript(mode) |
+{ |
+ test(function () { |
+ var host = document.createElement('div'); |
+ var shadowRoot = host.attachShadow({mode: mode}); |
+ var scriptElement = document.createElement('script'); |
+ scriptElement.textContent = 'assert_equals(document.currentScript, outerScriptElement)'; |
+ shadowRoot.appendChild(scriptElement); |
+ |
+ assert_equals(document.currentScript, outerScriptElement, |
+ 'document.currentScript must be set to the currently excusing script element in a document tree before executing a script in a shadow tree'); |
+ document.body.appendChild(host); |
+ assert_equals(document.currentScript, outerScriptElement, |
+ 'document.currentScript must be set to the currently excusing script element in a document tree after executing a script in a shadow tree'); |
+ |
+ }, 'document.currentScript must not to be set to a script element in a shadow tree in ' + mode + ' mode'); |
+} |
+ |
+testInlineScript('open'); |
+testInlineScript('closed'); |
+ |
+var executeExternalScript = null; |
+var testedScriptElement = null; |
+function executeNextTest() |
+{ |
+ var testCase = asyncScriptTests.shift(); |
+ var mode = testCase.mode; |
+ if (!testCase) |
+ return; |
+ |
+ testCase.test.step(function () { |
+ testedScriptElement = document.createElement('script'); |
+ testedScriptElement.src = 'resources/Document-prototype-currentScript-helper.js'; |
+ |
+ if (mode !== null) { |
+ var host = document.createElement('div'); |
+ var shadowRoot = host.attachShadow({mode: mode}); |
+ shadowRoot.appendChild(testedScriptElement); |
+ document.body.appendChild(host); |
+ } else { |
+ document.body.appendChild(testedScriptElement); |
+ } |
+ |
+ if (testCase.remove) |
+ testedScriptElement.parentNode.removeChild(testedScriptElement); |
+ }); |
+ |
+ executeExternalScript = function () { |
+ testCase.test.step(function () { |
+ assert_equals(document.currentScript, testCase.expected()); |
+ }); |
+ testCase.test.done(); |
+ setTimeout(executeNextTest, 1); |
+ } |
+} |
+ |
+var asyncScriptTests = [ |
+ { |
+ test: async_test('document.currentScript must be set to a script element that loads an external script in a document tree'), |
+ mode: null, remove: false, expected: function () { return testedScriptElement; }}, |
+ { |
+ test: async_test('document.currentScript must be set to a script element that loads an external script in a document tree'), |
+ mode: null, remove: true, expected: function () { return testedScriptElement; }}, |
+ { |
+ test: async_test('document.currentScript must not be set to a script element that loads an external script in an open shadow tree'), |
+ mode: 'open', remove: false, expected: function () { return null; }}, |
+ { |
+ test: async_test('document.currentScript must not be set to a script element that loads an external script in a closed shadow tree'), |
+ mode: 'closed', remove: false, expected: function () { return null; }}, |
+ { |
+ test: async_test('document.currentScript must be set to a script element that loads an external script that was in an open shadow tree and then removed'), |
+ mode: 'open', remove: true, expected: function () { return testedScriptElement; }}, |
+ { |
+ test: async_test('document.currentScript must be set to a script element that loads an external script that was in a closed shadow tree and then removed'), |
+ mode: 'closed', remove: true, expected: function () { return testedScriptElement; }}, |
+]; |
+ |
+executeNextTest(); |
+ |
+</script> |
+</body> |
+</html> |