Core: Support non-browser environments

Fixes gh-2133
Fixes gh-2501
Closes gh-2504
Refs gh-1950
Refs gh-1949
Refs gh-2397
Refs gh-1537
Refs gh-2504
Refs 842958e7ae
This commit is contained in:
Michał Gołębiowski
2015-07-28 12:58:44 +02:00
parent 9b04201ff2
commit 04ec688e80
45 changed files with 363 additions and 68 deletions

View File

@@ -0,0 +1,14 @@
{
"boss": true,
"curly": true,
"eqeqeq": true,
"eqnull": true,
"expr": true,
"immed": true,
"noarg": true,
"quotmark": "double",
"undef": true,
"unused": true,
"node": true
}

View File

@@ -0,0 +1,11 @@
"use strict";
var assert = require( "assert" ),
ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ),
jQueryFactory = require( "../../dist/jquery.js" );
assert.throws( function () {
jQueryFactory( {} );
}, /jQuery requires a window with a document/ );
ensureGlobalNotCreated( module.exports );

View File

@@ -0,0 +1,14 @@
"use strict";
var assert = require( "assert" );
require( "jsdom" ).env( "", function( errors, window ) {
assert.ifError( errors );
var ensureJQuery = require( "./lib/ensure_jquery" ),
ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ),
jQuery = require( "../../dist/jquery.js" )( window );
ensureJQuery( jQuery );
ensureGlobalNotCreated( module.exports );
} );

View File

@@ -0,0 +1,17 @@
"use strict";
var assert = require( "assert" );
require( "jsdom" ).env( "", function( errors, window ) {
assert.ifError( errors );
// 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" );
ensureJQuery( jQuery );
ensureGlobalNotCreated( module.exports, window );
} );

View File

@@ -0,0 +1,8 @@
"use strict";
if ( typeof Symbol === "undefined" ) {
console.log( "Symbols not supported, skipping the test..." );
process.exit();
}
require( "./lib/ensure_iterability_es6" )();

View File

@@ -0,0 +1,13 @@
/* jshint esnext: true */
"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" )();

View File

@@ -0,0 +1,15 @@
"use strict";
var 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 ) {
assert.strictEqual( object.jQuery, undefined,
"A jQuery global was created in a CommonJS environment." );
} );
};

View File

@@ -0,0 +1,25 @@
/* jshint esnext: true */
"use strict";
var assert = require( "assert" );
module.exports = function ensureIterability() {
require( "jsdom" ).env( "", function( errors, window ) {
assert.ifError( errors );
var i,
ensureJQuery = require( "./ensure_jquery" ),
jQuery = require( "../../../dist/jquery.js" )( window ),
elem = jQuery( "<div></div><span></span><a></a>" ),
result = "";
ensureJQuery( jQuery );
for ( i of elem ) {
result += i.nodeName;
}
assert.strictEqual( result, "DIVSPANA", "for-of doesn't work on jQuery objects" );
} );
};

View File

@@ -0,0 +1,9 @@
"use strict";
var assert = require( "assert" );
// Check if the object we got is the jQuery object by invoking a basic API.
module.exports = function ensureJQuery( jQuery ) {
assert( /^jQuery/.test( jQuery.expando ),
"jQuery.expando was not detected, the jQuery bootstrap process has failed" );
};

View File

@@ -0,0 +1,22 @@
/* jshint node: true */
"use strict";
require( "jsdom" ).env( "", function ( errors, window ) {
if ( errors ) {
console.error( errors );
return;
}
var jQuery = require( ".." )( window );
exports.deferred = function () {
var deferred = jQuery.Deferred();
return {
promise: deferred.promise(),
resolve: deferred.resolve.bind( deferred ),
reject: deferred.reject.bind( deferred )
};
};
} );