Skip to content
Permalink
Browse files

Build: Update jsdom; migrate a test with Symbol polyfill to an iframe…

… test

So far, we've been testing that jQuery element iteration works with polyfilled
Symbol & transpiled for-of via a Node test with jsdom with the Symbol global
removed. Unfortunately, jsdom now requires Symbol to be present for its internal
functionality so such a test is no longer possible. Instead, it's been migrated
to an iframe test with transpiled JavaScript.

This PR also enables us to use ECMAScript 2017 or newer in Node.js code.

Closes gh-4305
  • Loading branch information...
mgol committed Mar 4, 2019
1 parent c10945d commit 9cb124ed00aad8ac47690e31ad0bb8c3c365663d
@@ -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
@@ -4,10 +4,11 @@
"extends": "jquery",

"parserOptions": {
"ecmaVersion": 5
"ecmaVersion": 2017
},

"env": {
"es6": true,
"node": true
}
}
@@ -18,4 +18,4 @@ npm-debug.log*

/node_modules

/test/node_smoke_tests/lib/ensure_iterability.js
/test/data/core/jquery-iterability-transpiled.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"
}
}
},
@@ -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 );
@@ -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",
@@ -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
}
}
]
}
@@ -0,0 +1,14 @@
/* global startIframeTest */

jQuery( function() {
"use strict";

var elem = jQuery( "<div></div><span></span><a></a>" );
var result = "";
var i;
for ( i of elem ) {
result += i.nodeName;
}

startIframeTest( result );
} );
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery objects transpiled iterability test page</title>
<script src="../../../node_modules/core-js/client/core.min.js"></script>
<script src="../../jquery.js"></script>
<script src="../iframeTest.js"></script>
<script src="jquery-iterability-transpiled.js"></script>
</head>
<body>
<p>jQuery objects transpiled iterability test page</p>
</body>
</html>
@@ -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/ );

@@ -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 );
@@ -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 );

This file was deleted.

Oops, something went wrong.
@@ -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;
@@ -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( "<div></div><span></span><a></a>" ),
result = "";
const { window } = new JSDOM( "" );

ensureJQuery( jQuery );
let i;
const ensureJQuery = require( "./ensure_jquery" );
const jQuery = require( "../../../dist/jquery.js" )( window );
const elem = jQuery( "<div></div><span></span><a></a>" );
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;
@@ -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;
@@ -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 )
};
} );
};
Oops, something went wrong.

0 comments on commit 9cb124e

Please sign in to comment.
You can’t perform that action at this time.