diff options
author | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2019-01-21 18:34:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-21 18:34:40 +0100 |
commit | e4de8b4626f8872a4cb1ee241b60902653567503 (patch) | |
tree | b5a7707bc09e0198cfff9b9919a0a1e4fb7a5370 /test/unit | |
parent | 543d3d24eaefe09c4012171f30267783d51602dc (diff) | |
download | jquery-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.js | 32 |
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 ); |