aboutsummaryrefslogtreecommitdiffstats
path: root/test/unit
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2019-01-21 18:34:40 +0100
committerGitHub <noreply@github.com>2019-01-21 18:34:40 +0100
commite4de8b4626f8872a4cb1ee241b60902653567503 (patch)
treeb5a7707bc09e0198cfff9b9919a0a1e4fb7a5370 /test/unit
parent543d3d24eaefe09c4012171f30267783d51602dc (diff)
downloadjquery-e4de8b4626f8872a4cb1ee241b60902653567503.tar.gz
jquery-e4de8b4626f8872a4cb1ee241b60902653567503.zip
Manipulation: Respect script nomodule attribute in DOM manipulation
PR #3869 added support for `<script type="module">` & some support for the `nomodule` attribute but with no tests for `nomodule` and with the attribute only respected on inline scripts. This commit adds support for source-based scripts as well. It also adds tests for `nomodule`, including making sure legacy browsers execute such scripts as they'd natively do - that's the whole point of `nomodule` scripts, after all. Fixes gh-4281 Closes gh-4282 Ref gh-3871 Ref gh-3869
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/manipulation.js32
1 files changed, 31 insertions, 1 deletions
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 672f397ad..7f30ddf25 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -1798,7 +1798,7 @@ QUnit.test( "html(Function)", function( assert ) {
} );
QUnit[
- // Support: Edge 16-17
+ // Support: Edge 16-18+
// Edge sometimes doesn't execute module scripts so skip the test there.
( QUnit.moduleTypeSupported && !/edge\//i.test( navigator.userAgent ) ) ?
"test" :
@@ -1825,6 +1825,36 @@ QUnit[
}, 1000 );
} );
+QUnit[
+ // Support: IE 9-11 only, Android 4.0-4.4 only, iOS 7-10 only
+ // `nomodule` scripts should be executed by legacy browsers only.
+ // iOS 10 supports `<script type="module">` but doesn't support the nomodule attribute
+ // so let's skip it here; sites supporting it must handle `nomodule` in a custom way anyway.
+ !/iphone os 10_/i.test( navigator.userAgent ) ?
+ "test" :
+ "skip"
+]( "html(script nomodule)", function( assert ) {
+ assert.expect( QUnit.moduleTypeSupported ? 0 : 4 );
+ var done = assert.async(),
+ $fixture = jQuery( "#qunit-fixture" );
+
+ $fixture.html(
+ [
+ "<script nomodule>ok( !QUnit.moduleTypeSupported, 'evaluated: nomodule script' );</script>",
+ "<script nomodule src='" + url( "nomodule.js" ) + "'></script>",
+ "<div>",
+ "<script nomodule>ok( !QUnit.moduleTypeSupported, 'evaluated: inner nomodule script' );</script>",
+ "<script nomodule src='" + url( "inner_nomodule.js" ) + "'></script>",
+ "</div>"
+ ].join( "" )
+ );
+
+ // Allow asynchronous script execution to generate assertions
+ setTimeout( function() {
+ done();
+ }, 1000 );
+} );
+
QUnit.test( "html(Function) with incoming value -- direct selection", function( assert ) {
assert.expect( 4 );