]> source.dussan.org Git - jquery.git/commitdiff
Build:Tests: Fix custom build tests, verify on Travis; name Travis jobs
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 27 Jan 2020 17:54:47 +0000 (18:54 +0100)
committerGitHub <noreply@github.com>
Mon, 27 Jan 2020 17:54:47 +0000 (18:54 +0100)
This commit fixes unit tests for the following builds:

1. The no-deprecated build: `custom:-deprecated`
2. The current slim build: `custom:-ajax,-effects`
3. The 4.0 (#4553) slim build: `custom:-ajax,-callbacks,-deferred,-effects`

It also adds separate Travis jobs for the no-deprecated & slim builds.

Apart from that, add intuitive names to Travis jobs. Otherwise it's hard to see
at a glance that a particular job is running on Firefox ESR, for example.

Ref gh-4577
Ref gh-4596
Closes gh-4600

29 files changed:
.gitignore
.travis.yml
Gruntfile.js
build/tasks/node_smoke_tests.js
package.json
src/ajax.js
src/ajax/parseXML.js [deleted file]
src/core/parseXML.js [new file with mode: 0644]
src/jquery.js
test/data/core/dynamic_ready.html
test/data/offset/absolute.html
test/data/offset/body.html
test/data/offset/fixed.html
test/data/offset/relative.html
test/data/offset/scroll.html
test/data/offset/static.html
test/data/offset/table.html
test/data/qunit-fixture.js [deleted file]
test/unit/ajax.js
test/unit/callbacks.js
test/unit/data.js
test/unit/deferred.js
test/unit/deprecated.js
test/unit/event.js
test/unit/manipulation.js
test/unit/queue.js
test/unit/ready.js
test/unit/serialize.js
test/unit/support.js

index c00c4ac7eb58911c24a65883ca86104c0595bb40..44a868959817e4c140af83a55d3cee4f34f03291 100644 (file)
@@ -19,3 +19,4 @@ npm-debug.log*
 /node_modules
 
 /test/data/core/jquery-iterability-transpiled.js
+/test/data/qunit-fixture.js
index 43891aeb1804cb3ffd1fb06f159750858d8016e4..8fc6c710d04edf57a8c0c80c0264255c8cb56458 100644 (file)
@@ -9,23 +9,37 @@ env:
   - NPM_SCRIPT=test:browserless
 matrix:
   include:
-    # Run browser tests only on one Node.js version to save time.
-    - node_js: "12"
+    - name: "Browser tests: full build, Chrome & Firefox stable"
+      node_js: "12"
       env:
         - NPM_SCRIPT="test:browser"
         - BROWSERS="ChromeHeadless,FirefoxHeadless"
       addons:
         chrome: stable
         firefox: latest
-    # Run AMD tests.
-    - node_js: "12"
+    - name: "Browser tests: slim build, Chrome stable"
+      node_js: "12"
+      env:
+        - NPM_SCRIPT="test:slim"
+        - BROWSERS="ChromeHeadless"
+      addons:
+        chrome: stable
+    - name: "Browser tests: no-deprecated build, Chrome stable"
+      node_js: "12"
+      env:
+        - NPM_SCRIPT="test:no-deprecated"
+        - BROWSERS="ChromeHeadless"
+      addons:
+        chrome: stable
+    - name: "Browser tests: AMD build, Chrome stable"
+      node_js: "12"
       env:
         - NPM_SCRIPT="test:amd"
         - BROWSERS="ChromeHeadless"
       addons:
         chrome: stable
-    # Run tests on Firefox ESR as well.
-    - node_js: "12"
+    - name: "Browser tests: full build, Firefox ESR"
+      node_js: "12"
       env:
         - NPM_SCRIPT="test:browser"
         - BROWSERS="FirefoxHeadless"
index f3786d4eb85678a9bb4ba4077c3ef05f7af3e2d9..486a0f303932734b868b065d3c7b99a36002fac5 100644 (file)
@@ -41,7 +41,7 @@ module.exports = function( grunt ) {
                                retainLines: true,
                                plugins: [ "@babel/transform-for-of" ]
                        },
-                       nodeSmokeTests: {
+                       tests: {
                                files: {
                                        "test/data/core/jquery-iterability-transpiled.js":
                                                "test/data/core/jquery-iterability-transpiled-es6.js"
@@ -351,7 +351,13 @@ module.exports = function( grunt ) {
                "karma:jsdom"
        ] );
 
+       grunt.registerTask( "test:prepare", [
+               "qunit_fixture",
+               "babel:tests"
+       ] );
+
        grunt.registerTask( "test", [
+               "test:prepare",
                "test:fast",
                "test:slow"
        ] );
@@ -372,7 +378,7 @@ module.exports = function( grunt ) {
                "uglify",
                "remove_map_comment",
                "dist:*",
-               "qunit_fixture",
+               "test:prepare",
                "eslint:dist",
                "test:fast",
                "compare_size"
index 40c49a4d98a83a404da180d84f230ca7fcdc7890..574a63b4a48a978a8ec6a59bc70bc75f66b8ef05 100644 (file)
@@ -4,7 +4,7 @@ module.exports = ( grunt ) => {
        const fs = require( "fs" );
        const spawnTest = require( "./lib/spawn_test.js" );
        const testsDir = "./test/node_smoke_tests/";
-       const nodeSmokeTests = [ "babel:nodeSmokeTests" ];
+       const nodeSmokeTests = [];
 
        // Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
        // All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
index 905e6a15eb2549996ddad5076b2bbc930fbb4131..a38cf1c172c5944e091bfc0ac720e110579e92e2 100644 (file)
@@ -72,7 +72,9 @@
     "test:browserless": "grunt && grunt test:slow",
     "test:browser": "grunt && grunt karma:main",
     "test:amd": "grunt && grunt karma:amd",
-    "test": "grunt && grunt test:slow && grunt karma:main && grunt karma:amd",
+    "test:no-deprecated": "grunt test:prepare && grunt custom:-deprecated && grunt karma:main",
+    "test:slim": "grunt test:prepare && grunt custom:slim && grunt karma:main",
+    "test": "npm run test:slim && npm run test:no-deprecated && grunt && grunt test:slow && grunt karma:main && grunt karma:amd",
     "jenkins": "npm run test:browserless"
   },
   "commitplease": {
index b1f1608401b7c7ce73e14ebe998b0cf4f4b9c750..11eda0da05855d63b97af70345df01a643e49ec4 100644 (file)
@@ -8,7 +8,7 @@ define( [
        "./ajax/var/rquery",
 
        "./core/init",
-       "./ajax/parseXML",
+       "./core/parseXML",
        "./event/trigger",
        "./deferred",
        "./serialize" // jQuery.param
diff --git a/src/ajax/parseXML.js b/src/ajax/parseXML.js
deleted file mode 100644 (file)
index acf7ab2..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-define( [
-       "../core"
-], function( jQuery ) {
-
-"use strict";
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-       var xml;
-       if ( !data || typeof data !== "string" ) {
-               return null;
-       }
-
-       // Support: IE 9 - 11 only
-       // IE throws on parseFromString with invalid input.
-       try {
-               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
-       } catch ( e ) {
-               xml = undefined;
-       }
-
-       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
-               jQuery.error( "Invalid XML: " + data );
-       }
-       return xml;
-};
-
-return jQuery.parseXML;
-
-} );
diff --git a/src/core/parseXML.js b/src/core/parseXML.js
new file mode 100644 (file)
index 0000000..acf7ab2
--- /dev/null
@@ -0,0 +1,30 @@
+define( [
+       "../core"
+], function( jQuery ) {
+
+"use strict";
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+       var xml;
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+
+       // Support: IE 9 - 11 only
+       // IE throws on parseFromString with invalid input.
+       try {
+               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+       } catch ( e ) {
+               xml = undefined;
+       }
+
+       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+               jQuery.error( "Invalid XML: " + data );
+       }
+       return xml;
+};
+
+return jQuery.parseXML;
+
+} );
index 61c4b2f0ddbd8bc7dab1b11d912ce50cd7cc9846..0c144c19481dba244558c291e27151c384305580 100644 (file)
@@ -23,6 +23,8 @@ define( [
        "./ajax/script",
        "./ajax/jsonp",
        "./ajax/load",
+       "./core/parseXML",
+       "./core/parseHTML",
        "./effects",
        "./effects/animatedSelector",
        "./offset",
index e8180cd2b0fd1d6afa6a0fba8ef08fb390ffbce1..fade7adc2d67bb18194249a3ad59024618b2f380 100644 (file)
@@ -2,7 +2,7 @@
 <html>
 <head>
        <meta charset="utf-8">
-       <script src="../../jquery.js"></script>
+       <script src="../jquery-1.9.1.js"></script>
        <script>var $j = jQuery.noConflict();</script>
        <script src="../iframeTest.js"></script>
 </head>
index 9d87004652cfd16cd51a24d24bb751c1aa539de2..4883e81befc2800cac352ef0584de07fe9d73629 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               $(".absolute").click(function() {
-                                       $("#marker").css( $(this).offset() );
-                                       var pos = $(this).position();
-                                       $(this).css({ top: pos.top, left: pos.left });
+                       jQuery( function( $ ) {
+                               $( ".absolute" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
+                                       var pos = $( this ).position();
+                                       $( this ).css( { top: pos.top, left: pos.left } );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
index 75757d7e605dc2b2327599f85cdb2ed4d8398ea1..a27e242affbe0c22bca0bd6f28026e8dd4d3d75b 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               $("body").click(function() {
-                                       $("marker").css( $(this).offset() );
+                       jQuery( function( $ ) {
+                               $( "body" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
index 48a2c479756956ae77e833cfc1371fd21c9fd8ba..9016f87a9857fb19cccfbe07f5c1d9e7b1913367 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               window.scrollTo(1000,1000);
-                               $(".fixed").click(function() {
-                                       $("#marker").css( $(this).offset() );
+                       jQuery( function( $ ) {
+                               window.scrollTo( 1000, 1000 );
+                               $( ".fixed" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
                                        return false;
                                });
                                startIframeTest();
index 288fd4ea3828fe6b24f393db7ebc1adb82564e09..0a092375de8ef57fce21bfa2a3a3b6d244d1d8ad 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               $(".relative").click(function() {
-                                       $("#marker").css( $(this).offset() );
-                                       var pos = $(this).position();
-                                       $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
+                       jQuery( function( $ ) {
+                               $( ".relative" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
+                                       var pos = $( this ).position();
+                                       $( this ).css( { position: 'absolute', top: pos.top, left: pos.left } );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
index 28cade1c377c299848ba3f099306548ff8b308f7..3b9848fe49c234e11341b487768459ae913b785a 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               window.scrollTo(1000,1000);
-                               $("#scroll-1")[0].scrollLeft = 5;
-                               $("#scroll-1")[0].scrollTop = 5;
-                               $(".scroll").click(function() {
-                                       $("#marker").css( $(this).offset() );
+                       jQuery( function( $ ) {
+                               window.scrollTo( 1000, 1000 );
+                               $( "#scroll-1" )[ 0 ].scrollLeft = 5;
+                               $( "#scroll-1" )[ 0 ].scrollTop = 5;
+                               $( ".scroll" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
index 1f4c3dc3dc5e3b1d0ad8df0872e70e3a504e8ae6..913f9d260d6afcd5d92c50f1d8af241dc3eed971 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               $(".static").click(function() {
-                                       $("#marker").css( $(this).offset() );
-                                       var pos = $(this).position();
-                                       $(this).css({ position: 'absolute', top: pos.top, left: pos.left });
+                       jQuery( function( $ ) {
+                               $( ".static" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
+                                       var pos = $( this ).position();
+                                       $( this ).css( { position: 'absolute', top: pos.top, left: pos.left } );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
index eeac19b77c7e3ef56c73b197eb4019c2a8c5e24a..1650e729726278c8c0364ab6406e6982feba407d 100644 (file)
                <script src="../../jquery.js"></script>
                <script src="../iframeTest.js"></script>
                <script type="text/javascript" charset="utf-8">
-                       jQuery(function($) {
-                               $("table, th, td").click(function() {
-                                       $("#marker").css( $(this).offset() );
+                       jQuery( function( $ ) {
+                               $( "table, th, td" ).on( "click", function() {
+                                       $( "#marker" ).css( $( this ).offset() );
                                        return false;
-                               });
+                               } );
                                startIframeTest();
-                       });
+                       } );
                </script>
        </head>
        <body>
diff --git a/test/data/qunit-fixture.js b/test/data/qunit-fixture.js
deleted file mode 100644 (file)
index 46f0c3c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-// Generated by build/tasks/qunit_fixture.js
-QUnit.config.fixture = "<p id=\"firstp\">See <a id=\"simon1\" href=\"http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector\" rel=\"bookmark\">this blog entry</a> for more information.</p>\n<p id=\"ap\">\n\tHere are some links in a normal paragraph: <a id=\"google\" href=\"http://www.google.com/\" title=\"Google!\">Google</a>,\n\t<a id=\"groups\" href=\"http://groups.google.com/\" class=\"GROUPS\">Google Groups (Link)</a>.\n\tThis link has <code><a href=\"http://smin\" id=\"anchor1\">class=\"blog\"</a></code>:\n\t<a href=\"http://diveintomark.org/\" class=\"blog\" hreflang=\"en\" id=\"mark\">diveintomark</a>\n\n</p>\n<div id=\"foo\">\n\t<p id=\"sndp\">Everything inside the red border is inside a div with <code>id=\"foo\"</code>.</p>\n\t<p lang=\"en\" id=\"en\">This is a normal link: <a id=\"yahoo\" href=\"http://www.yahoo.com/\" class=\"blogTest\">Yahoo</a></p>\n\t<p id=\"sap\">This link has <code><a href=\"#2\" id=\"anchor2\">class=\"blog\"</a></code>: <a href=\"http://simon.incutio.com/\" class=\"blog link\" id=\"simon\">Simon Willison's Weblog</a></p>\n\n</div>\n<div id=\"nothiddendiv\" style=\"height:1px;background:white;\" class=\"nothiddendiv\">\n\t<div id=\"nothiddendivchild\"></div>\n</div>\n<span id=\"name+value\"></span>\n<p id=\"first\">Try them out:</p>\n<ul id=\"firstUL\"></ul>\n<ol id=\"empty\"></ol>\n<form id=\"form\" action=\"formaction\">\n\t<label for=\"action\" id=\"label-for\">Action:</label>\n\t<input type=\"text\" name=\"action\" value=\"Test\" id=\"text1\" maxlength=\"30\"/>\n\t<input type=\"text\" name=\"text2\" value=\"Test\" id=\"text2\" disabled=\"disabled\"/>\n\t<input type=\"radio\" name=\"radio1\" id=\"radio1\" value=\"on\"/>\n\n\t<input type=\"radio\" name=\"radio2\" id=\"radio2\" checked=\"checked\"/>\n\t<input type=\"checkbox\" name=\"check\" id=\"check1\" checked=\"checked\"/>\n\t<input type=\"checkbox\" id=\"check2\" value=\"on\"/>\n\n\t<input type=\"hidden\" name=\"hidden\" id=\"hidden1\"/>\n\t<input type=\"text\" style=\"display:none;\" name=\"foo[bar]\" id=\"hidden2\"/>\n\n\t<input type=\"text\" id=\"name\" name=\"name\" value=\"name\" />\n\t<input type=\"search\" id=\"search\" name=\"search\" value=\"search\" />\n\n\t<button id=\"button\" name=\"button\" type=\"button\">Button</button>\n\n\t<textarea id=\"area1\" maxlength=\"30\">foobar</textarea>\n\n\t<select name=\"select1\" id=\"select1\">\n\t\t<option id=\"option1a\" class=\"emptyopt\" value=\"\">Nothing</option>\n\t\t<option id=\"option1b\" value=\"1\">1</option>\n\t\t<option id=\"option1c\" value=\"2\">2</option>\n\t\t<option id=\"option1d\" value=\"3\">3</option>\n\t</select>\n\t<select name=\"select2\" id=\"select2\">\n\t\t<option id=\"option2a\" class=\"emptyopt\" value=\"\">Nothing</option>\n\t\t<option id=\"option2b\" value=\"1\">1</option>\n\t\t<option id=\"option2c\" value=\"2\">2</option>\n\t\t<option id=\"option2d\" selected=\"selected\" value=\"3\">3</option>\n\t</select>\n\t<select name=\"select3\" id=\"select3\" multiple=\"multiple\">\n\t\t<option id=\"option3a\" class=\"emptyopt\" value=\"\">Nothing</option>\n\t\t<option id=\"option3b\" selected=\"selected\" value=\"1\">1</option>\n\t\t<option id=\"option3c\" selected=\"selected\" value=\"2\">2</option>\n\t\t<option id=\"option3d\" value=\"3\">3</option>\n\t\t<option id=\"option3e\">no value</option>\n\t</select>\n\t<select name=\"select4\" id=\"select4\" multiple=\"multiple\">\n\t\t<optgroup disabled=\"disabled\">\n\t\t\t<option id=\"option4a\" class=\"emptyopt\" value=\"\">Nothing</option>\n\t\t\t<option id=\"option4b\" disabled=\"disabled\" selected=\"selected\" value=\"1\">1</option>\n\t\t\t<option id=\"option4c\" selected=\"selected\" value=\"2\">2</option>\n\t\t</optgroup>\n\t\t<option selected=\"selected\" disabled=\"disabled\" id=\"option4d\" value=\"3\">3</option>\n\t\t<option id=\"option4e\">no value</option>\n\t</select>\n\t<select name=\"select5\" id=\"select5\">\n\t\t<option id=\"option5a\" value=\"3\">1</option>\n\t\t<option id=\"option5b\" value=\"2\">2</option>\n\t\t<option id=\"option5c\" value=\"1\" data-attr=\"\">3</option>\n\t</select>\n\n\t<object id=\"object1\" codebase=\"stupid\">\n\t\t<param name=\"p1\" value=\"x1\" />\n\t\t<param name=\"p2\" value=\"x2\" />\n\t</object>\n\n\t<span id=\"台北Táiběi\"></span>\n\t<span id=\"台北\" lang=\"中文\"></span>\n\t<span id=\"utf8class1\" class=\"台北Táiběi 台北\"></span>\n\t<span id=\"utf8class2\" class=\"台北\"></span>\n\t<span id=\"foo:bar\" class=\"foo:bar\"></span>\n\t<span id=\"test.foo[5]bar\" class=\"test.foo[5]bar\"></span>\n\n\t<foo_bar id=\"foobar\">test element</foo_bar>\n</form>\n<b id=\"floatTest\">Float test.</b>\n<iframe id=\"iframe\" name=\"iframe\"></iframe>\n<form id=\"lengthtest\">\n\t<input type=\"text\" id=\"length\" name=\"test\"/>\n\t<input type=\"text\" id=\"idTest\" name=\"id\"/>\n</form>\n<table id=\"table\"></table>\n\n<form id=\"name-tests\">\n\t<!-- Inputs with a grouped name attribute. -->\n\t<input name=\"types[]\" id=\"types_all\" type=\"checkbox\" value=\"all\" />\n\t<input name=\"types[]\" id=\"types_anime\" type=\"checkbox\" value=\"anime\" />\n\t<input name=\"types[]\" id=\"types_movie\" type=\"checkbox\" value=\"movie\" />\n</form>\n\n<form id=\"testForm\" action=\"#\" method=\"get\">\n\t<textarea name=\"T3\" rows=\"2\" cols=\"15\">?\nZ</textarea>\n\t<input type=\"hidden\" name=\"H1\" value=\"x\" />\n\t<input type=\"hidden\" name=\"H2\" />\n\t<input name=\"PWD\" type=\"password\" value=\"\" />\n\t<input name=\"T1\" type=\"text\" />\n\t<input name=\"T2\" type=\"text\" value=\"YES\" readonly=\"readonly\" />\n\t<input type=\"checkbox\" name=\"C1\" value=\"1\" />\n\t<input type=\"checkbox\" name=\"C2\" />\n\t<input type=\"radio\" name=\"R1\" value=\"1\" />\n\t<input type=\"radio\" name=\"R1\" value=\"2\" />\n\t<input type=\"text\" name=\"My Name\" value=\"me\" />\n\t<input type=\"reset\" name=\"reset\" value=\"NO\" />\n\t<select name=\"S1\">\n\t\t<option value=\"abc\">ABC</option>\n\t\t<option value=\"abc\">ABC</option>\n\t\t<option value=\"abc\">ABC</option>\n\t</select>\n\t<select name=\"S2\" multiple=\"multiple\" size=\"3\">\n\t\t<option value=\"abc\">ABC</option>\n\t\t<option value=\"abc\">ABC</option>\n\t\t<option value=\"abc\">ABC</option>\n\t</select>\n\t<select name=\"S3\">\n\t\t<option selected=\"selected\">YES</option>\n\t</select>\n\t<select name=\"S4\">\n\t\t<option value=\"\" selected=\"selected\">NO</option>\n\t</select>\n\t<input type=\"submit\" name=\"sub1\" value=\"NO\" />\n\t<input type=\"submit\" name=\"sub2\" value=\"NO\" />\n\t<input type=\"image\" name=\"sub3\" value=\"NO\" />\n\t<button name=\"sub4\" type=\"submit\" value=\"NO\">NO</button>\n\t<input name=\"D1\" type=\"text\" value=\"NO\" disabled=\"disabled\" />\n\t<input type=\"checkbox\" checked=\"checked\" disabled=\"disabled\" name=\"D2\" value=\"NO\" />\n\t<input type=\"radio\" name=\"D3\" value=\"NO\" checked=\"checked\" disabled=\"disabled\" />\n\t<select name=\"D4\" disabled=\"disabled\">\n\t\t<option selected=\"selected\" value=\"NO\">NO</option>\n\t</select>\n\t<input id=\"list-test\" type=\"text\" />\n\t<datalist id=\"datalist\">\n\t\t<option value=\"option\"></option>\n\t</datalist>\n</form>\n<div id=\"moretests\">\n\t<form>\n\t\t<div id=\"checkedtest\" style=\"display:none;\">\n\t\t\t<input type=\"radio\" name=\"checkedtestradios\" checked=\"checked\"/>\n\t\t\t<input type=\"radio\" name=\"checkedtestradios\" value=\"on\"/>\n\t\t\t<input type=\"checkbox\" name=\"checkedtestcheckboxes\" checked=\"checked\"/>\n\t\t\t<input type=\"checkbox\" name=\"checkedtestcheckboxes\" />\n\t\t</div>\n\t</form>\n\t<div id=\"nonnodes\"><span id=\"nonnodesElement\">hi</span> there <!-- mon ami --></div>\n\t<div id=\"t2037\">\n\t\t<div><div class=\"hidden\">hidden</div></div>\n\t</div>\n\t<div id=\"t6652\">\n\t\t<div></div>\n\t</div>\n\t<div id=\"no-clone-exception\"><object><embed></embed></object></div>\n</div>\n\n<div id=\"tabindex-tests\">\n\t<ol id=\"listWithTabIndex\" tabindex=\"5\">\n\t\t<li id=\"foodWithNegativeTabIndex\" tabindex=\"-1\">Rice</li>\n\t\t<li id=\"foodNoTabIndex\">Beans</li>\n\t\t<li>Blinis</li>\n\t\t<li>Tofu</li>\n\t</ol>\n\n\t<div id=\"divWithNoTabIndex\">I'm hungry. I should...</div>\n\t<span>...</span><a href=\"#\" id=\"linkWithNoTabIndex\">Eat lots of food</a><span>...</span> |\n\t<span>...</span><a href=\"#\" id=\"linkWithTabIndex\" tabindex=\"2\">Eat a little food</a><span>...</span> |\n\t<span>...</span><a href=\"#\" id=\"linkWithNegativeTabIndex\" tabindex=\"-1\">Eat no food</a><span>...</span>\n\t<span>...</span><a id=\"linkWithNoHrefWithNoTabIndex\">Eat a burger</a><span>...</span>\n\t<span>...</span><a id=\"linkWithNoHrefWithTabIndex\" tabindex=\"1\">Eat some funyuns</a><span>...</span>\n\t<span>...</span><a id=\"linkWithNoHrefWithNegativeTabIndex\" tabindex=\"-1\">Eat some funyuns</a><span>...</span>\n\t<input id=\"inputWithoutTabIndex\"/>\n\t<button id=\"buttonWithoutTabIndex\"></button>\n\t<textarea id=\"textareaWithoutTabIndex\"></textarea>\n\t<menu type=\"popup\">\n\t\t<menuitem id=\"menuitemWithoutTabIndex\" command=\"submitbutton\" default/>\n\t</menu>\n</div>\n\n<div id=\"liveHandlerOrder\">\n\t<span id=\"liveSpan1\"><a href=\"#\" id=\"liveLink1\"></a></span>\n\t<span id=\"liveSpan2\"><a href=\"#\" id=\"liveLink2\"></a></span>\n</div>\n\n<div id=\"siblingTest\">\n\t<em id=\"siblingfirst\">1</em>\n\t<em id=\"siblingnext\">2</em>\n\t<em id=\"siblingthird\">\n\t\t<em id=\"siblingchild\">\n\t\t\t<em id=\"siblinggrandchild\">\n\t\t\t\t<em id=\"siblinggreatgrandchild\"></em>\n\t\t\t</em>\n\t\t</em>\n\t</em>\n\t<span id=\"siblingspan\"></span>\n</div>\n<div id=\"fx-test-group\" style=\"position: absolute; width: 1px; height: 1px; overflow: hidden;\">\n\t<div id=\"fx-queue\" name=\"test\">\n\t\t<div id=\"fadein\" class='chain-test' name='div'>fadeIn<div>fadeIn</div></div>\n\t\t<div id=\"fadeout\" class='chain-test chain-test-out'>fadeOut<div>fadeOut</div></div>\n\n\t\t<div id=\"show\" class='chain-test'>show<div>show</div></div>\n\t\t<div id=\"hide\" class='chain-test chain-test-out'>hide<div>hide</div></div>\n\t\t<div id=\"easehide\" class='chain-test chain-test-out'>hide<div>hide</div></div>\n\n\t\t<div id=\"togglein\" class='chain-test'>togglein<div>togglein</div></div>\n\t\t<div id=\"toggleout\" class='chain-test chain-test-out'>toggleout<div>toggleout</div></div>\n\t\t<div id=\"easetoggleout\" class='chain-test chain-test-out'>toggleout<div>toggleout</div></div>\n\n\t\t<div id=\"slideup\" class='chain-test'>slideUp<div>slideUp</div></div>\n\t\t<div id=\"slidedown\" class='chain-test chain-test-out'>slideDown<div>slideDown</div></div>\n\t\t<div id=\"easeslideup\" class='chain-test'>slideUp<div>slideUp</div></div>\n\n\t\t<div id=\"slidetogglein\" class='chain-test'>slideToggleIn<div>slideToggleIn</div></div>\n\t\t<div id=\"slidetoggleout\" class='chain-test chain-test-out'>slideToggleOut<div>slideToggleOut</div></div>\n\n\t\t<div id=\"fadetogglein\" class='chain-test'>fadeToggleIn<div>fadeToggleIn</div></div>\n\t\t<div id=\"fadetoggleout\" class='chain-test chain-test-out'>fadeToggleOut<div>fadeToggleOut</div></div>\n\n\t\t<div id=\"fadeto\" class='chain-test'>fadeTo<div>fadeTo</div></div>\n\t</div>\n\n\t<div id=\"fx-tests\"></div>\n\t<span id=\"display\"></span>\n</div>\n";
index fda7a9daf08317608ebab277b2dc926395e5b2cf..bcf7202cd44ca2dd3df3792ec4549df5131c7162 100644 (file)
@@ -257,7 +257,7 @@ QUnit.module( "ajax", {
        ajaxTest( "jQuery.ajax() - headers", 8, function( assert ) {
                return {
                        setup: function() {
-                               jQuery( document ).ajaxSend( function( evt, xhr ) {
+                               jQuery( document ).on( "ajaxSend", function( evt, xhr ) {
                                        xhr.setRequestHeader( "ajax-send", "test" );
                                } );
                        },
@@ -611,10 +611,10 @@ QUnit.module( "ajax", {
                return {
                        setup: function() {
                                jQuery( context ).appendTo( "#foo" )
-                                       .ajaxSend( event )
-                                       .ajaxComplete( event )
-                                       .ajaxError( event )
-                                       .ajaxSuccess( event );
+                                       .on( "ajaxSend", event )
+                                       .on( "ajaxComplete", event )
+                                       .on( "ajaxError", event )
+                                       .on( "ajaxSuccess", event );
                        },
                        requests: [ {
                                url: url( "name.html" ),
@@ -2455,7 +2455,7 @@ if ( typeof window.ArrayBuffer === "undefined" || typeof new XMLHttpRequest().re
                var done = assert.async();
 
                addGlobalEvents( "ajaxStart ajaxStop ajaxSend ajaxComplete ajaxError", assert )();
-               jQuery( document ).ajaxStop( done );
+               jQuery( document ).on( "ajaxStop", done );
                jQuery( "<div/>" ).load( baseURL + "404.txt", function() {
                        assert.ok( true, "complete" );
                } );
@@ -2643,7 +2643,7 @@ if ( typeof window.ArrayBuffer === "undefined" || typeof new XMLHttpRequest().re
                jQuery.ajaxSetup( {
                        dataType: "json"
                } );
-               jQuery( document ).ajaxComplete( function( e, xml, s ) {
+               jQuery( document ).on( "ajaxComplete", function( e, xml, s ) {
                        assert.strictEqual( s.dataType, "html", "Verify the load() dataType was html" );
                        jQuery( document ).off( "ajaxComplete" );
                        done();
@@ -2664,7 +2664,7 @@ if ( typeof window.ArrayBuffer === "undefined" || typeof new XMLHttpRequest().re
                        }
                } );
                jQuery( "#foo" ).load( baseURL + "mock.php?action=echoQuery", data );
-               jQuery( document ).ajaxComplete( function( event, jqXHR, options ) {
+               jQuery( document ).on( "ajaxComplete", function( event, jqXHR, options ) {
                        assert.ok( ~options.data.indexOf( "foo=bar" ), "Data from ajaxSettings was used" );
                        done();
                } );
index b440f382278411ef16e745dc6de659812a2f39af..c1a6eacf6c0a2befc09824e17db6e4f4bbed4b63 100644 (file)
@@ -4,6 +4,12 @@ QUnit.module( "callbacks", {
 
 ( function() {
 
+if ( !jQuery.Callbacks ) {
+       return;
+}
+
+( function() {
+
 var output,
        addToOutput = function( string ) {
                return function() {
@@ -387,3 +393,5 @@ QUnit.test( "jQuery.Callbacks() - list with memory stays locked (gh-3469)", func
        cb.fire();
        assert.equal( fired, 11, "Post-lock() fire ignored" );
 } );
+
+} )();
index 32605cff8f29f094e1d1e41d37d4fc3dba332eb6..bd0b4e8829537a256b1fc6c17a6b6fa1388698af 100644 (file)
@@ -737,6 +737,7 @@ QUnit.test( ".data supports interoperable hyphenated/camelCase get/set of proper
 
 QUnit.test( ".data supports interoperable removal of hyphenated/camelCase properties", function( assert ) {
        var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ),
+               rdashAlpha = /-([a-z])/g,
                datas = {
                        "non-empty": "a string",
                        "empty-string": "",
@@ -755,11 +756,19 @@ QUnit.test( ".data supports interoperable removal of hyphenated/camelCase proper
 
        assert.expect( 27 );
 
+       function fcamelCase( all, letter ) {
+               return letter.toUpperCase();
+       }
+
        jQuery.each( datas, function( key, val ) {
                div.data( key, val );
 
                assert.deepEqual( div.data( key ), val, "get: " + key );
-               assert.deepEqual( div.data( jQuery.camelCase( key ) ), val, "get: " + jQuery.camelCase( key ) );
+               assert.deepEqual(
+                       div.data( key.replace( rdashAlpha, fcamelCase ) ),
+                       val,
+                       "get: " + key.replace( rdashAlpha, fcamelCase )
+               );
 
                div.removeData( key );
 
index c704f905f9e144d5bf581a3be4feeef5622e91bb..0132a0129c0e6cfbfa0e35ef8a190c9576d511f6 100644 (file)
@@ -2,6 +2,12 @@ QUnit.module( "deferred", {
        afterEach: moduleTeardown
 } );
 
+( function() {
+
+if ( !jQuery.Deferred ) {
+       return;
+}
+
 jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
 
        function createDeferred( fn ) {
@@ -1154,3 +1160,5 @@ QUnit.test( "jQuery.when(...) - opportunistically synchronous", function( assert
 
        when = "after";
 } );
+
+} )();
index 977ab35eb62129710185a3b1f5922900dcb412c7..8ab520e58593463df6c640e8ec3818992d5dc4ce 100644 (file)
@@ -1,7 +1,7 @@
 QUnit.module( "deprecated", { afterEach: moduleTeardown } );
 
 
-QUnit.test( "bind/unbind", function( assert ) {
+QUnit[ jQuery.fn.bind ? "test" : "skip" ]( "bind/unbind", function( assert ) {
        assert.expect( 4 );
 
        var markup = jQuery(
@@ -22,7 +22,7 @@ QUnit.test( "bind/unbind", function( assert ) {
                .remove();
 } );
 
-QUnit.test( "delegate/undelegate", function( assert ) {
+QUnit[ jQuery.fn.delegate ? "test" : "skip" ]( "delegate/undelegate", function( assert ) {
        assert.expect( 2 );
 
        var markup = jQuery(
@@ -41,28 +41,25 @@ QUnit.test( "delegate/undelegate", function( assert ) {
                .remove();
 } );
 
-if ( jQuery.fn.hover ) {
-       QUnit.test( "hover() mouseenter mouseleave", function( assert ) {
-               assert.expect( 1 );
-
-               var times = 0,
-                       handler1 = function() { ++times; },
-                       handler2 = function() { ++times; };
-
-               jQuery( "#firstp" )
-                       .hover( handler1, handler2 )
-                       .mouseenter().mouseleave()
-                       .off( "mouseenter", handler1 )
-                       .off( "mouseleave", handler2 )
-                       .hover( handler1 )
-                       .mouseenter().mouseleave()
-                       .off( "mouseenter mouseleave", handler1 )
-                       .mouseenter().mouseleave();
-
-               assert.equal( times, 4, "hover handlers fired" );
+QUnit[ jQuery.fn.hover ? "test" : "skip" ]( "hover() mouseenter mouseleave", function( assert ) {
+       assert.expect( 1 );
 
-       } );
-}
+       var times = 0,
+               handler1 = function() { ++times; },
+               handler2 = function() { ++times; };
+
+       jQuery( "#firstp" )
+               .hover( handler1, handler2 )
+               .mouseenter().mouseleave()
+               .off( "mouseenter", handler1 )
+               .off( "mouseleave", handler2 )
+               .hover( handler1 )
+               .mouseenter().mouseleave()
+               .off( "mouseenter mouseleave", handler1 )
+               .mouseenter().mouseleave();
+
+       assert.equal( times, 4, "hover handlers fired" );
+} );
 
 
 QUnit[ jQuery.fn.click ? "test" : "skip" ]( "trigger() shortcuts", function( assert ) {
@@ -99,6 +96,45 @@ QUnit[ jQuery.fn.click ? "test" : "skip" ]( "trigger() shortcuts", function( ass
        assert.equal( clickCounter, 1, "Check that click, triggers onclick event handler on an a tag also" );
 } );
 
+if ( jQuery.ajax && jQuery.fn.ajaxSend ) {
+       ajaxTest( "jQuery.ajax() - events with context", 12, function( assert ) {
+               var context = document.createElement( "div" );
+
+               function event( e ) {
+                       assert.equal( this, context, e.type );
+               }
+
+               function callback( msg ) {
+                       return function() {
+                               assert.equal( this, context, "context is preserved on callback " + msg );
+                       };
+               }
+
+               return {
+                       setup: function() {
+                               jQuery( context ).appendTo( "#foo" )
+                                       .ajaxSend( event )
+                                       .ajaxComplete( event )
+                                       .ajaxError( event )
+                                       .ajaxSuccess( event );
+                       },
+                       requests: [ {
+                               url: url( "name.html" ),
+                               context: context,
+                               beforeSend: callback( "beforeSend" ),
+                               success: callback( "success" ),
+                               complete: callback( "complete" )
+                       }, {
+                               url: url( "404.txt" ),
+                               context: context,
+                               beforeSend: callback( "beforeSend" ),
+                               error: callback( "error" ),
+                               complete: callback( "complete" )
+                       } ]
+               };
+       } );
+}
+
 QUnit[ jQuery.fn.click ? "test" : "skip" ]( "Event aliases", function( assert ) {
 
        // Explicitly skipping focus/blur events due to their flakiness
@@ -117,7 +153,7 @@ QUnit[ jQuery.fn.click ? "test" : "skip" ]( "Event aliases", function( assert )
        } );
 } );
 
-QUnit.test( "jQuery.parseJSON", function( assert ) {
+QUnit[ jQuery.parseJSON ? "test" : "skip" ]( "jQuery.parseJSON", function( assert ) {
        assert.expect( 20 );
 
        assert.strictEqual( jQuery.parseJSON( null ), null, "primitive null" );
@@ -187,13 +223,13 @@ QUnit.test( "jQuery.parseJSON", function( assert ) {
        assert.strictEqual( jQuery.parseJSON( [ 0 ] ), 0, "Input cast to string" );
 } );
 
-QUnit.test( "jQuery.isArray", function( assert ) {
+QUnit[ jQuery.isArray ? "test" : "skip" ]( "jQuery.isArray", function( assert ) {
        assert.expect( 1 );
 
        assert.strictEqual( jQuery.isArray, Array.isArray, "Array.isArray equals jQuery.isArray" );
 } );
 
-QUnit.test( "jQuery.nodeName", function( assert ) {
+QUnit[ jQuery.nodeName ? "test" : "skip" ]( "jQuery.nodeName", function( assert ) {
        assert.expect( 8 );
 
        assert.strictEqual( typeof jQuery.nodeName, "function", "jQuery.nodeName is a function" );
@@ -242,7 +278,7 @@ QUnit.test( "jQuery.nodeName", function( assert ) {
 } );
 
 
-QUnit.test( "type", function( assert ) {
+QUnit[ jQuery.type ? "test" : "skip" ]( "type", function( assert ) {
        assert.expect( 28 );
 
        assert.equal( jQuery.type( null ), "null", "null" );
@@ -281,14 +317,15 @@ QUnit.test( "type", function( assert ) {
        assert.equal( jQuery.type( new MyObject() ), "object", "Object" );
 } );
 
-QUnit[ typeof Symbol === "function" ? "test" : "skip" ]( "type for `Symbol`", function( assert ) {
+QUnit[ jQuery.type && typeof Symbol === "function" ? "test" : "skip" ](
+       "type for `Symbol`", function( assert ) {
        assert.expect( 2 );
 
        assert.equal( jQuery.type( Symbol() ), "symbol", "Symbol" );
        assert.equal( jQuery.type( Object( Symbol() ) ), "symbol", "Symbol" );
 } );
 
-QUnit.test( "isFunction", function( assert ) {
+QUnit[ jQuery.isFunction ? "test" : "skip" ]( "isFunction", function( assert ) {
        assert.expect( 20 );
 
        var mystr, myarr, myfunction, fn, obj, nodes, first, input, a;
@@ -376,7 +413,7 @@ QUnit.test( "isFunction", function( assert ) {
        } );
 } );
 
-QUnit.test( "isFunction(cross-realm function)", function( assert ) {
+QUnit[ jQuery.isFunction ? "test" : "skip" ]( "isFunction(cross-realm function)", function( assert ) {
        assert.expect( 1 );
 
        var iframe, doc,
@@ -409,7 +446,7 @@ supportjQuery.each(
                        fn = Function( "return " + source )();
                } catch ( e ) {}
 
-               QUnit[ fn ? "test" : "skip" ]( "isFunction(" + subclass + ")",
+               QUnit[ jQuery.isFunction && fn ? "test" : "skip" ]( "isFunction(" + subclass + ")",
                        function( assert ) {
                                assert.expect( 1 );
 
@@ -419,7 +456,7 @@ supportjQuery.each(
        }
 );
 
-QUnit[ typeof Symbol === "function" && Symbol.toStringTag ? "test" : "skip" ](
+QUnit[ jQuery.isFunction && typeof Symbol === "function" && Symbol.toStringTag ? "test" : "skip" ](
        "isFunction(custom @@toStringTag)",
        function( assert ) {
                assert.expect( 2 );
@@ -434,7 +471,7 @@ QUnit[ typeof Symbol === "function" && Symbol.toStringTag ? "test" : "skip" ](
        }
 );
 
-QUnit.test( "jQuery.isWindow", function( assert ) {
+QUnit[ jQuery.isWindow ? "test" : "skip" ]( "jQuery.isWindow", function( assert ) {
        assert.expect( 14 );
 
        assert.ok( jQuery.isWindow( window ), "window" );
@@ -453,7 +490,7 @@ QUnit.test( "jQuery.isWindow", function( assert ) {
        assert.ok( !jQuery.isWindow( function() {} ), "function" );
 } );
 
-QUnit.test( "jQuery.camelCase()", function( assert ) {
+QUnit[ jQuery.camelCase ? "test" : "skip" ]( "jQuery.camelCase()", function( assert ) {
 
        var tests = {
                "foo-bar": "fooBar",
@@ -472,13 +509,13 @@ QUnit.test( "jQuery.camelCase()", function( assert ) {
        } );
 } );
 
-QUnit.test( "jQuery.now", function( assert ) {
+QUnit[ jQuery.now ? "test" : "skip" ]( "jQuery.now", function( assert ) {
        assert.expect( 1 );
 
        assert.ok( typeof jQuery.now() === "number", "jQuery.now is a function" );
 } );
 
-QUnit.test( "jQuery.proxy", function( assert ) {
+QUnit[ jQuery.proxy ? "test" : "skip" ]( "jQuery.proxy", function( assert ) {
        assert.expect( 9 );
 
        var test2, test3, test4, fn, cb,
@@ -526,7 +563,7 @@ QUnit.test( "jQuery.proxy", function( assert ) {
        cb.call( thisObject, "arg3" );
 } );
 
-QUnit.test( "isNumeric", function( assert ) {
+QUnit[ jQuery.isNumeric ? "test" : "skip" ]( "isNumeric", function( assert ) {
        assert.expect( 43 );
 
        var t = jQuery.isNumeric,
@@ -594,14 +631,15 @@ QUnit.test( "isNumeric", function( assert ) {
        assert.equal( t( new Date() ), false, "Instance of a Date" );
 } );
 
-QUnit[ typeof Symbol === "function" ? "test" : "skip" ]( "isNumeric(Symbol)", function( assert ) {
+QUnit[ jQuery.isNumeric && typeof Symbol === "function" ? "test" : "skip" ](
+       "isNumeric(Symbol)", function( assert ) {
        assert.expect( 2 );
 
        assert.equal( jQuery.isNumeric( Symbol() ), false, "Symbol" );
        assert.equal( jQuery.isNumeric( Object( Symbol() ) ), false, "Symbol inside an object" );
 } );
 
-QUnit.test( "trim", function( assert ) {
+QUnit[ jQuery.trim ? "test" : "skip" ]( "trim", function( assert ) {
        assert.expect( 13 );
 
        var nbsp = String.fromCharCode( 160 );
index 9a76920235b16b4bf7944c8ebc2279f356678035..fdddb0ba6e4e4f9286d88a3e216bf13d963bfca9 100644 (file)
@@ -1317,7 +1317,7 @@ QUnit.test( "Delegated events with malformed selectors (gh-3071)", function( ass
                jQuery( "#foo" ).on( "click", "nonexistent:not", function() {} );
        }, "short-circuitable malformed selector throws on attach" );
 
-       jQuery( "#foo > :first-child" ).click();
+       jQuery( "#foo > :first-child" ).trigger( "click" );
        assert.ok( true, "malformed selector does not throw on event" );
 } );
 
@@ -2490,7 +2490,7 @@ QUnit.test( "drag/drop events copy mouse-related event properties (gh-1925, gh-2
 
        fireNative( $fixture[ 0 ], "drop" );
 
-       $fixture.unbind( "dragmove drop" ).remove();
+       $fixture.off( "dragmove drop" ).remove();
 } );
 
 QUnit.test( "focusin using non-element targets", function( assert ) {
@@ -2543,7 +2543,8 @@ testIframe(
        function( assert, jQuery, window, document, isOk ) {
                assert.expect( 1 );
                assert.ok( isOk, "$.when( $.ready ) works" );
-       }
+       },
+       jQuery.when ? QUnit.test : QUnit.skip
 );
 
 // need PHP here to make the incepted IFRAME hang
index d3f719d1ba9109ebced1913c12a11ca493a1d806..b7fc95a0a55010ad1a56249cdeede36bc2da15f4 100644 (file)
@@ -2441,7 +2441,6 @@ QUnit.test( "html() - script exceptions bubble (#11743)", function( assert ) {
                        assert.ok( true, "Exception ignored" );
                } else {
                        assert.ok( true, "No jQuery.ajax" );
-                       assert.ok( true, "No jQuery.ajax" );
                }
        };
 
@@ -2531,7 +2530,7 @@ QUnit.test( "script evaluation (#11795)", function( assert ) {
        }
 } );
 
-QUnit.test( "jQuery._evalUrl (#12838)", function( assert ) {
+QUnit[ jQuery.ajax ? "test" : "skip" ]( "jQuery._evalUrl (#12838)", function( assert ) {
 
        assert.expect( 5 );
 
@@ -2825,7 +2824,8 @@ QUnit.test( "Make sure tags with single-character names are found (gh-4124)", fu
        assert.strictEqual( htmlOut, htmlIn );
 } );
 
-QUnit.test( "Insert script with data-URI (gh-1887)", function( assert ) {
+// The AJAX module is needed for jQuery._evalUrl.
+QUnit[ jQuery.ajax ? "test" : "skip" ]( "Insert script with data-URI (gh-1887)", function( assert ) {
        assert.expect( 1 );
        Globals.register( "testFoo" );
        Globals.register( "testSrcFoo" );
@@ -2908,13 +2908,14 @@ testIframe(
                } );
        },
 
+       // The AJAX module is needed for jQuery._evalUrl.
        // Support: Edge 18+, iOS 7-9 only, Android 4.0-4.4 only
        // Edge doesn't support nonce in non-inline scripts.
        // See https://web.archive.org/web/20171203124125/https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/13246371/
        // Old iOS & Android Browser versions support script-src but not nonce, making this test
        // impossible to run. Browsers not supporting CSP at all are not a problem as they'll skip
        // script-src restrictions completely.
-       QUnit[ /\bedge\/|iphone os [789]|android 4\./i.test( navigator.userAgent ) ? "skip" : "test" ]
+       QUnit[ jQuery.ajax && !/\bedge\/|iphone os [789]|android 4\./i.test( navigator.userAgent ) ? "test" : "skip" ]
 );
 
 testIframe(
index 6c8ad762d3611f5448536f67cae464e2b183ce5d..7735544bce34004729ac24ca1694d149329128ba 100644 (file)
@@ -1,5 +1,11 @@
 QUnit.module( "queue", { afterEach: moduleTeardown } );
 
+( function() {
+
+if ( !jQuery.fn.queue ) {
+       return;
+}
+
 QUnit.test( "queue() with other types", function( assert ) {
        var done = assert.async( 2 );
        assert.expect( 14 );
@@ -271,64 +277,63 @@ QUnit.test( ".promise(obj)", function( assert ) {
        assert.strictEqual( promise, obj, ".promise(type, obj) returns obj" );
 } );
 
-if ( jQuery.fn.stop ) {
-       QUnit.test( "delay() can be stopped", function( assert ) {
-               var done = assert.async();
-               assert.expect( 3 );
-               var storage = {};
-               jQuery( {} )
-                       .queue( "alternate", function( next ) {
-                               storage.alt1 = true;
-                               assert.ok( true, "This first function was dequeued" );
-                               next();
-                       } )
-                       .delay( 1000, "alternate" )
-                       .queue( "alternate", function() {
-                               storage.alt2 = true;
-                               assert.ok( true, "The function was dequeued immediately, the delay was stopped" );
-                       } )
-                       .dequeue( "alternate" )
-
-                       // stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
-                       .stop( "alternate", false, false )
-
-                       // this test
-                       .delay( 1 )
-                       .queue( function() {
-                               storage.default1 = true;
-                               assert.ok( false, "This queue should never run" );
-                       } )
-
-                       // stop( clearQueue ) should clear the queue
-                       .stop( true, false );
-
-               assert.deepEqual( storage, { alt1: true, alt2: true }, "Queue ran the proper functions" );
+QUnit[ jQuery.fn.stop ? "test" : "skip" ]( "delay() can be stopped", function( assert ) {
+       var done = assert.async();
+       assert.expect( 3 );
+       var storage = {};
+       jQuery( {} )
+               .queue( "alternate", function( next ) {
+                       storage.alt1 = true;
+                       assert.ok( true, "This first function was dequeued" );
+                       next();
+               } )
+               .delay( 1000, "alternate" )
+               .queue( "alternate", function() {
+                       storage.alt2 = true;
+                       assert.ok( true, "The function was dequeued immediately, the delay was stopped" );
+               } )
+               .dequeue( "alternate" )
 
-               setTimeout( function() {
-                       done();
-               }, 1500 );
-       } );
+               // stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
+               .stop( "alternate", false, false )
 
-       QUnit.test( "queue stop hooks", function( assert ) {
-               assert.expect( 2 );
-               var done = assert.async();
-               var foo = jQuery( "#foo" );
+               // this test
+               .delay( 1 )
+               .queue( function() {
+                       storage.default1 = true;
+                       assert.ok( false, "This queue should never run" );
+               } )
 
-               foo.queue( function( next, hooks ) {
-                       hooks.stop = function( gotoEnd ) {
-                               assert.equal( !!gotoEnd, false, "Stopped without gotoEnd" );
-                       };
-               } );
-               foo.stop();
+               // stop( clearQueue ) should clear the queue
+               .stop( true, false );
 
-               foo.queue( function( next, hooks ) {
-                       hooks.stop = function( gotoEnd ) {
-                               assert.equal( gotoEnd, true, "Stopped with gotoEnd" );
-                               done();
-                       };
-               } );
+       assert.deepEqual( storage, { alt1: true, alt2: true }, "Queue ran the proper functions" );
+
+       setTimeout( function() {
+               done();
+       }, 1500 );
+} );
+
+QUnit[ jQuery.fn.stop ? "test" : "skip" ]( "queue stop hooks", function( assert ) {
+       assert.expect( 2 );
+       var done = assert.async();
+       var foo = jQuery( "#foo" );
+
+       foo.queue( function( next, hooks ) {
+               hooks.stop = function( gotoEnd ) {
+                       assert.equal( !!gotoEnd, false, "Stopped without gotoEnd" );
+               };
+       } );
+       foo.stop();
 
-               foo.stop( false, true );
+       foo.queue( function( next, hooks ) {
+               hooks.stop = function( gotoEnd ) {
+                       assert.equal( gotoEnd, true, "Stopped with gotoEnd" );
+                       done();
+               };
        } );
 
-} // if ( jQuery.fn.stop )
+       foo.stop( false, true );
+} );
+
+} )();
index d3396b1c49731a556d760b3a05f81356cce22079..fd33c0a18fc887de5005a577319d5cec6be0c248 100644 (file)
@@ -2,7 +2,7 @@ QUnit.module( "ready" );
 
 ( function() {
        var notYetReady, noEarlyExecution,
-               whenified = jQuery.when( jQuery.ready ),
+               whenified = jQuery.when && jQuery.when( jQuery.ready ),
                promisified = Promise.resolve( jQuery.ready ),
                start = new Date(),
                order = [],
@@ -105,7 +105,7 @@ QUnit.module( "ready" );
                } );
        } );
 
-       QUnit.test( "jQuery.when(jQuery.ready)", function( assert ) {
+       QUnit[ jQuery.when ? "test" : "skip" ]( "jQuery.when(jQuery.ready)", function( assert ) {
                assert.expect( 2 );
                var done = jQuery.map( new Array( 2 ), function() { return assert.async(); } );
 
@@ -149,15 +149,18 @@ QUnit.module( "ready" );
                } );
        } );
 
-       testIframe(
-               "holdReady test needs to be a standalone test since it deals with DOM ready",
-               "readywait.html",
-               function( assert, jQuery, window, document, releaseCalled ) {
-                       assert.expect( 2 );
-                       var now = new Date();
-                       assert.ok( now - start >= 300, "Needs to have waited at least half a second" );
-                       assert.ok( releaseCalled, "The release function was called, which resulted in ready" );
-               }
-       );
+       // jQuery.holdReady is deprecated, skip the test if it was excluded.
+       if ( jQuery.holdReady ) {
+               testIframe(
+                       "holdReady test needs to be a standalone test since it deals with DOM ready",
+                       "readywait.html",
+                       function( assert, jQuery, window, document, releaseCalled ) {
+                               assert.expect( 2 );
+                               var now = new Date();
+                               assert.ok( now - start >= 300, "Needs to have waited at least half a second" );
+                               assert.ok( releaseCalled, "The release function was called, which resulted in ready" );
+                       }
+               );
+       }
 
 } )();
index d23421ddd26752773b6bbfb5c6bf54f8707a91fc..c4e6a6c5ed71adca29679bc90dd788d492bdef7b 100644 (file)
@@ -77,7 +77,7 @@ QUnit.test( "jQuery.param()", function( assert ) {
        assert.equal( jQuery.param( params ), "", "jQuery.param( undefined ) === empty string" );
 } );
 
-QUnit.test( "jQuery.param() not affected by ajaxSettings", function( assert ) {
+QUnit[ jQuery.ajax ? "test" : "skip" ]( "jQuery.param() not affected by ajaxSettings", function( assert ) {
        assert.expect( 1 );
 
        var oldTraditional = jQuery.ajaxSettings.traditional;
index d7de8ac5c89e1b2c4fc1686e2943a80acf70ebdc..e293c742365b91786beb763368e07fa12c3d4041 100644 (file)
@@ -55,7 +55,7 @@ testIframe(
 );
 
 ( function() {
-       var expected,
+       var browserKey, expected,
                userAgent = window.navigator.userAgent,
                expectedMap = {
                        edge: {
@@ -294,6 +294,14 @@ testIframe(
                        }
                };
 
+       // Make the slim build pass tests.
+       for ( browserKey in expectedMap ) {
+               if ( !jQuery.ajax ) {
+                       delete expectedMap[ browserKey ].ajax;
+                       delete expectedMap[ browserKey ].cors;
+               }
+       }
+
        if ( /edge\//i.test( userAgent ) ) {
                expected = expectedMap.edge;
        } else if ( /(msie 10\.0|trident\/7\.0)/i.test( userAgent ) ) {