diff --git a/.eslintignore b/.eslintignore index 415493351..3ee82bba3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,4 +11,4 @@ test/data/readywaitasset.js test/data/readywaitloader.js test/data/support/csp.js test/data/support/getComputedSupport.js -test/node_smoke_tests/lib/ensure_iterability.js +test/data/core/jquery-iterability-transpiled.js diff --git a/.eslintrc-node.json b/.eslintrc-node.json index 904e7ba94..589144272 100644 --- a/.eslintrc-node.json +++ b/.eslintrc-node.json @@ -4,10 +4,11 @@ "extends": "jquery", "parserOptions": { - "ecmaVersion": 5 + "ecmaVersion": 2017 }, "env": { + "es6": true, "node": true } } diff --git a/.gitignore b/.gitignore index 6b00bc2e2..c00c4ac7e 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,4 @@ npm-debug.log* /node_modules -/test/node_smoke_tests/lib/ensure_iterability.js +/test/data/core/jquery-iterability-transpiled.js diff --git a/Gruntfile.js b/Gruntfile.js index ca82e8016..cf11680c4 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -42,8 +42,8 @@ module.exports = function( grunt ) { }, nodeSmokeTests: { files: { - "test/node_smoke_tests/lib/ensure_iterability.js": - "test/node_smoke_tests/lib/ensure_iterability_es6.js" + "test/data/core/jquery-iterability-transpiled.js": + "test/data/core/jquery-iterability-transpiled-es6.js" } } }, diff --git a/build/tasks/node_smoke_tests.js b/build/tasks/node_smoke_tests.js index bd0a9150e..e3d69db88 100644 --- a/build/tasks/node_smoke_tests.js +++ b/build/tasks/node_smoke_tests.js @@ -1,11 +1,11 @@ -module.exports = function( grunt ) { +module.exports = ( grunt ) => { "use strict"; - var fs = require( "fs" ), - spawnTest = require( "./lib/spawn_test.js" ), - testsDir = "./test/node_smoke_tests/", - nodeSmokeTests = [ "babel:nodeSmokeTests" ]; + const fs = require( "fs" ); + const spawnTest = require( "./lib/spawn_test.js" ); + const testsDir = "./test/node_smoke_tests/"; + const nodeSmokeTests = [ "babel: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 @@ -14,15 +14,15 @@ module.exports = function( grunt ) { // each other, e.g. so that they don't share the require cache. fs.readdirSync( testsDir ) - .filter( function( testFilePath ) { - return fs.statSync( testsDir + testFilePath ).isFile() && - /\.js$/.test( testFilePath ); - } ) - .forEach( function( testFilePath ) { - var taskName = "node_" + testFilePath.replace( /\.js$/, "" ); + .filter( ( testFilePath ) => + fs.statSync( testsDir + testFilePath ).isFile() && + /\.js$/.test( testFilePath ) + ) + .forEach( ( testFilePath ) => { + const taskName = `node_${ testFilePath.replace( /\.js$/, "" ) }`; grunt.registerTask( taskName, function() { - spawnTest( this.async(), "node \"test/node_smoke_tests/" + testFilePath + "\"" ); + spawnTest( this.async(), `node "test/node_smoke_tests/${ testFilePath }"` ); } ); nodeSmokeTests.push( taskName ); diff --git a/package.json b/package.json index 43c8b6271..e09a4765e 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "gzip-js": "0.3.2", "husky": "1.3.1", "insight": "0.10.1", - "jsdom": "5.6.1", + "jsdom": "13.2.0", "karma": "4.0.0", "karma-browserstack-launcher": "1.4.0", "karma-chrome-launcher": "2.2.0", diff --git a/test/.eslintrc.json b/test/.eslintrc.json index c3924fbc6..2c724626f 100644 --- a/test/.eslintrc.json +++ b/test/.eslintrc.json @@ -51,5 +51,14 @@ // Not really too many - waiting for autofix features for these rules "lines-around-comment": "off", "dot-notation": "off" - } + }, + + "overrides": [ + { + "files": ["data/core/jquery-iterability-transpiled-es6.js"], + "parserOptions": { + "ecmaVersion": 2015 + } + } + ] } diff --git a/test/data/core/jquery-iterability-transpiled-es6.js b/test/data/core/jquery-iterability-transpiled-es6.js new file mode 100644 index 000000000..0c3bda624 --- /dev/null +++ b/test/data/core/jquery-iterability-transpiled-es6.js @@ -0,0 +1,14 @@ +/* global startIframeTest */ + +jQuery( function() { + "use strict"; + + var elem = jQuery( "
" ); + var result = ""; + var i; + for ( i of elem ) { + result += i.nodeName; + } + + startIframeTest( result ); +} ); diff --git a/test/data/core/jquery-iterability-transpiled.html b/test/data/core/jquery-iterability-transpiled.html new file mode 100644 index 000000000..69ac18252 --- /dev/null +++ b/test/data/core/jquery-iterability-transpiled.html @@ -0,0 +1,14 @@ + + + + +jQuery objects transpiled iterability test page
+ + diff --git a/test/node_smoke_tests/document_missing.js b/test/node_smoke_tests/document_missing.js index 348e9a4ef..0f6a3f78b 100644 --- a/test/node_smoke_tests/document_missing.js +++ b/test/node_smoke_tests/document_missing.js @@ -1,10 +1,10 @@ "use strict"; -var assert = require( "assert" ), - ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ), - jQueryFactory = require( "../../dist/jquery.js" ); +const assert = require( "assert" ); +const ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ); +const jQueryFactory = require( "../../dist/jquery.js" ); -assert.throws( function() { +assert.throws( () => { jQueryFactory( {} ); }, /jQuery requires a window with a document/ ); diff --git a/test/node_smoke_tests/document_passed.js b/test/node_smoke_tests/document_passed.js index 5999cc744..b1154d3a3 100644 --- a/test/node_smoke_tests/document_passed.js +++ b/test/node_smoke_tests/document_passed.js @@ -1,14 +1,12 @@ "use strict"; -var assert = require( "assert" ); +const { JSDOM } = require( "jsdom" ); -require( "jsdom" ).env( "", function( errors, window ) { - assert.ifError( errors ); +const { window } = new JSDOM( "" ); - var ensureJQuery = require( "./lib/ensure_jquery" ), - ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ), - jQuery = require( "../../dist/jquery.js" )( window ); +const ensureJQuery = require( "./lib/ensure_jquery" ); +const ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ); +const jQuery = require( "../../dist/jquery.js" )( window ); - ensureJQuery( jQuery ); - ensureGlobalNotCreated( module.exports ); -} ); +ensureJQuery( jQuery ); +ensureGlobalNotCreated( module.exports ); diff --git a/test/node_smoke_tests/document_present_originally.js b/test/node_smoke_tests/document_present_originally.js index f75148708..89b0c7bd8 100644 --- a/test/node_smoke_tests/document_present_originally.js +++ b/test/node_smoke_tests/document_present_originally.js @@ -1,17 +1,15 @@ "use strict"; -var assert = require( "assert" ); +const { JSDOM } = require( "jsdom" ); -require( "jsdom" ).env( "", function( errors, window ) { - assert.ifError( errors ); +const { window } = new JSDOM( "" ); - // Pretend the window is a global. - global.window = window; +// Pretend the window is a global. +global.window = window; - var ensureJQuery = require( "./lib/ensure_jquery" ), - ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ), - jQuery = require( "../../dist/jquery.js" ); +const ensureJQuery = require( "./lib/ensure_jquery" ); +const ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ); +const jQuery = require( "../../dist/jquery.js" ); - ensureJQuery( jQuery ); - ensureGlobalNotCreated( module.exports, window ); -} ); +ensureJQuery( jQuery ); +ensureGlobalNotCreated( module.exports, window ); diff --git a/test/node_smoke_tests/iterable_with_symbol_polyfill.js b/test/node_smoke_tests/iterable_with_symbol_polyfill.js deleted file mode 100644 index 34701d691..000000000 --- a/test/node_smoke_tests/iterable_with_symbol_polyfill.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var assert = require( "assert" ); - -delete global.Symbol; -require( "core-js" ); - -assert.strictEqual( typeof Symbol, "function", "Expected Symbol to be a function" ); -assert.notEqual( typeof Symbol.iterator, "symbol", "Expected Symbol.iterator to be polyfilled" ); - -require( "./lib/ensure_iterability" )(); diff --git a/test/node_smoke_tests/lib/ensure_global_not_created.js b/test/node_smoke_tests/lib/ensure_global_not_created.js index 7cc83b541..95db62226 100644 --- a/test/node_smoke_tests/lib/ensure_global_not_created.js +++ b/test/node_smoke_tests/lib/ensure_global_not_created.js @@ -1,15 +1,15 @@ "use strict"; -var assert = require( "assert" ); +const assert = require( "assert" ); // Ensure the jQuery property on global/window/module.exports/etc. was not // created in a CommonJS environment. // `global` is always checked in addition to passed parameters. -module.exports = function ensureGlobalNotCreated() { - var args = [].slice.call( arguments ).concat( global ); - - args.forEach( function( object ) { +const ensureGlobalNotCreated = ( ...args ) => { + [ ...args, global ].forEach( function( object ) { assert.strictEqual( object.jQuery, undefined, "A jQuery global was created in a CommonJS environment." ); } ); }; + +module.exports = ensureGlobalNotCreated; diff --git a/test/node_smoke_tests/lib/ensure_iterability_es6.js b/test/node_smoke_tests/lib/ensure_iterability_es6.js index 4b30690a5..a948f1996 100644 --- a/test/node_smoke_tests/lib/ensure_iterability_es6.js +++ b/test/node_smoke_tests/lib/ensure_iterability_es6.js @@ -1,23 +1,25 @@ "use strict"; -var assert = require( "assert" ); +const assert = require( "assert" ); -module.exports = function ensureIterability() { - require( "jsdom" ).env( "", function( errors, window ) { - assert.ifError( errors ); +const ensureIterability = () => { + const { JSDOM } = require( "jsdom" ); - var i, - ensureJQuery = require( "./ensure_jquery" ), - jQuery = require( "../../../dist/jquery.js" )( window ), - elem = jQuery( "" ), - result = ""; + const { window } = new JSDOM( "" ); - ensureJQuery( jQuery ); + let i; + const ensureJQuery = require( "./ensure_jquery" ); + const jQuery = require( "../../../dist/jquery.js" )( window ); + const elem = jQuery( "" ); + let result = ""; - for ( i of elem ) { - result += i.nodeName; - } + ensureJQuery( jQuery ); - assert.strictEqual( result, "DIVSPANA", "for-of works on jQuery objects" ); - } ); + for ( i of elem ) { + result += i.nodeName; + } + + assert.strictEqual( result, "DIVSPANA", "for-of works on jQuery objects" ); }; + +module.exports = ensureIterability; diff --git a/test/node_smoke_tests/lib/ensure_jquery.js b/test/node_smoke_tests/lib/ensure_jquery.js index 0933a1d33..5b7c064f1 100644 --- a/test/node_smoke_tests/lib/ensure_jquery.js +++ b/test/node_smoke_tests/lib/ensure_jquery.js @@ -1,9 +1,11 @@ "use strict"; -var assert = require( "assert" ); +const assert = require( "assert" ); // Check if the object we got is the jQuery object by invoking a basic API. -module.exports = function ensureJQuery( jQuery ) { +const ensureJQuery = ( jQuery ) => { assert( /^jQuery/.test( jQuery.expando ), "jQuery.expando was not detected, the jQuery bootstrap process has failed" ); }; + +module.exports = ensureJQuery; diff --git a/test/promises_aplus_adapters/deferred.js b/test/promises_aplus_adapters/deferred.js index 31af16655..5e3ffe2d8 100644 --- a/test/promises_aplus_adapters/deferred.js +++ b/test/promises_aplus_adapters/deferred.js @@ -1,20 +1,17 @@ "use strict"; -require( "jsdom" ).env( "", function( errors, window ) { - if ( errors ) { - console.error( errors ); - return; - } +const { JSDOM } = require( "jsdom" ); - var jQuery = require( "../../" )( window ); +const { window } = new JSDOM( "" ); - module.exports.deferred = function() { - var deferred = jQuery.Deferred(); +const jQuery = require( "../../" )( window ); - return { - promise: deferred.promise(), - resolve: deferred.resolve.bind( deferred ), - reject: deferred.reject.bind( deferred ) - }; +module.exports.deferred = () => { + const deferred = jQuery.Deferred(); + + return { + promise: deferred.promise(), + resolve: deferred.resolve.bind( deferred ), + reject: deferred.reject.bind( deferred ) }; -} ); +}; diff --git a/test/promises_aplus_adapters/when.js b/test/promises_aplus_adapters/when.js index adde1a13a..3e945d475 100644 --- a/test/promises_aplus_adapters/when.js +++ b/test/promises_aplus_adapters/when.js @@ -1,49 +1,45 @@ "use strict"; -require( "jsdom" ).env( "", function( errors, window ) { - if ( errors ) { - console.error( errors ); - return; - } +const { JSDOM } = require( "jsdom" ); - var jQuery = require( "../../" )( window ); +const { window } = new JSDOM( "" ); - module.exports.deferred = function() { - var adopted, promised, - obj = { - resolve: function() { - if ( !adopted ) { - adopted = jQuery.when.apply( jQuery, arguments ); - if ( promised ) { - adopted.then( promised.resolve, promised.reject ); - } - } - return adopted; - }, - reject: function( value ) { - if ( !adopted ) { - adopted = jQuery.when( jQuery.Deferred().reject( value ) ); - if ( promised ) { - adopted.then( promised.resolve, promised.reject ); - } - } - return adopted; - }, +const jQuery = require( "../../" )( window ); - // A manually-constructed thenable that works even if calls precede resolve/reject - promise: { - then: function() { - if ( !adopted ) { - if ( !promised ) { - promised = jQuery.Deferred(); - } - return promised.then.apply( promised, arguments ); - } - return adopted.then.apply( adopted, arguments ); - } +module.exports.deferred = () => { + let adopted, promised; + + return { + resolve: function() { + if ( !adopted ) { + adopted = jQuery.when.apply( jQuery, arguments ); + if ( promised ) { + adopted.then( promised.resolve, promised.reject ); } - }; + } + return adopted; + }, + reject: function( value ) { + if ( !adopted ) { + adopted = jQuery.when( jQuery.Deferred().reject( value ) ); + if ( promised ) { + adopted.then( promised.resolve, promised.reject ); + } + } + return adopted; + }, - return obj; + // A manually-constructed thenable that works even if calls precede resolve/reject + promise: { + then: function() { + if ( !adopted ) { + if ( !promised ) { + promised = jQuery.Deferred(); + } + return promised.then.apply( promised, arguments ); + } + return adopted.then.apply( adopted, arguments ); + } + } }; -} ); +}; diff --git a/test/unit/core.js b/test/unit/core.js index 260038300..8205aa242 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1425,6 +1425,17 @@ QUnit.test( "Iterability of jQuery objects (gh-1693)", function( assert ) { } } ); +testIframe( + "Iterability of jQuery objects with Symbol polyfill (gh-1693)", + "core/jquery-iterability-transpiled.html", + function( assert, jQuery, window, document, testString ) { + assert.expect( 1 ); + + assert.strictEqual( testString, "DIVSPANA", + "for-of works on jQuery objects with Symbol polyfilled" ); + } +); + QUnit[ jQuery.Deferred ? "test" : "skip" ]( "jQuery.readyException (original)", function( assert ) { assert.expect( 1 );