diff --git a/.eslintignore b/.eslintignore
index 8026d53f7..5e992599f 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,3 +1,4 @@
dist/**/*
external/**/*
+tests/lib/vendor/**/*
ui/vendor/**/*
diff --git a/Gruntfile.js b/Gruntfile.js
index 0471be52e..38d4fe199 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -272,18 +272,6 @@ grunt.initConfig( {
"qunit/qunit.css": "qunit/qunit/qunit.css",
"qunit/LICENSE.txt": "qunit/LICENSE.txt",
- "qunit-assert-classes/qunit-assert-classes.js":
- "qunit-assert-classes/qunit-assert-classes.js",
- "qunit-assert-classes/LICENSE.txt": "qunit-assert-classes/LICENSE",
-
- "qunit-assert-close/qunit-assert-close.js":
- "qunit-assert-close/qunit-assert-close.js",
- "qunit-assert-close/MIT-LICENSE.txt": "qunit-assert-close/MIT-LICENSE.txt",
-
- "qunit-composite/qunit-composite.js": "qunit-composite/qunit-composite.js",
- "qunit-composite/qunit-composite.css": "qunit-composite/qunit-composite.css",
- "qunit-composite/LICENSE.txt": "qunit-composite/LICENSE.txt",
-
"requirejs/require.js": "requirejs/require.js",
"jquery-mousewheel/jquery.mousewheel.js": "jquery-mousewheel/jquery.mousewheel.js",
diff --git a/bower.json b/bower.json
index d672cfb30..e239f0b17 100644
--- a/bower.json
+++ b/bower.json
@@ -16,9 +16,6 @@
"jquery-mousewheel": "3.1.12",
"jquery-simulate": "1.1.1",
"qunit": "2.19.4",
- "qunit-assert-classes": "1.0.2",
- "qunit-assert-close": "JamesMGreene/qunit-assert-close#v2.1.2",
- "qunit-composite": "JamesMGreene/qunit-composite#v2.0.0",
"requirejs": "2.1.14",
"jquery-1.8.0": "jquery#1.8.0",
diff --git a/tests/lib/bootstrap.js b/tests/lib/bootstrap.js
index 277fecca7..a5bb1711b 100644
--- a/tests/lib/bootstrap.js
+++ b/tests/lib/bootstrap.js
@@ -12,8 +12,8 @@ requirejs.config( {
"jquery-simulate": "../../../external/jquery-simulate/jquery.simulate",
"lib": "../../lib",
"phantom-bridge": "../../../node_modules/grunt-contrib-qunit/phantomjs/bridge",
- "qunit-assert-classes": "../../../external/qunit-assert-classes/qunit-assert-classes",
- "qunit-assert-close": "../../../external/qunit-assert-close/qunit-assert-close",
+ "qunit-assert-classes": "../../lib/vendor/qunit-assert-classes/qunit-assert-classes",
+ "qunit-assert-close": "../../lib/vendor/qunit-assert-close/qunit-assert-close",
"qunit": "../../../external/qunit/qunit",
"testswarm": "https://swarm.jquery.org/js/inject.js?" + ( new Date() ).getTime(),
"ui": "../../../ui"
diff --git a/tests/lib/qunit-assert-domequal.js b/tests/lib/qunit-assert-domequal.js
index bdad9844c..066eb203b 100644
--- a/tests/lib/qunit-assert-domequal.js
+++ b/tests/lib/qunit-assert-domequal.js
@@ -15,11 +15,16 @@ var domEqual = QUnit.assert.domEqual = function( selector, modifier, message ) {
var assert = this;
// Get current state prior to modifier
- var expected = extract( selector, message );
+ var expected = extract( assert, selector, message );
function done() {
- var actual = extract( selector, message );
- assert.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ var actual = extract( assert, selector, message );
+ assert.pushResult( {
+ result: QUnit.equiv( actual, expected ),
+ actual: actual,
+ expected: expected,
+ message: message
+ } );
}
// Run modifier (async or sync), then compare state via done()
@@ -116,11 +121,15 @@ function jQueryVersionSince( version ) {
return compareVersions( $.fn.jquery, version ) >= 0;
}
-function extract( selector, message ) {
+function extract( assert, selector, message ) {
var elem = $( selector );
if ( !elem.length ) {
- QUnit.push( false, null, null,
- "domEqual failed, can't extract " + selector + ", message was: " + message );
+ assert.pushResult( {
+ result: false,
+ actual: null,
+ expected: null,
+ message: "domEqual failed, can't extract " + selector + ", message was: " + message
+ } );
return;
}
@@ -190,7 +199,7 @@ function extract( selector, message ) {
children = elem.children();
if ( children.length ) {
result.children = elem.children().map( function() {
- return extract( $( this ) );
+ return extract( assert, $( this ) );
} ).get();
} else {
result.text = elem.text();
diff --git a/external/qunit-assert-classes/LICENSE.txt b/tests/lib/vendor/qunit-assert-classes/LICENSE.txt
similarity index 100%
rename from external/qunit-assert-classes/LICENSE.txt
rename to tests/lib/vendor/qunit-assert-classes/LICENSE.txt
diff --git a/external/qunit-assert-classes/qunit-assert-classes.js b/tests/lib/vendor/qunit-assert-classes/qunit-assert-classes.js
similarity index 64%
rename from external/qunit-assert-classes/qunit-assert-classes.js
rename to tests/lib/vendor/qunit-assert-classes/qunit-assert-classes.js
index 93edebf9d..3461f1d90 100644
--- a/external/qunit-assert-classes/qunit-assert-classes.js
+++ b/tests/lib/vendor/qunit-assert-classes/qunit-assert-classes.js
@@ -1,3 +1,5 @@
+// With custom modifications - all are marked with
+// a "Custom modification" comment.
( function( factory ) {
if ( typeof define === "function" && define.amd ) {
@@ -73,14 +75,22 @@
return message + ( classes.length > 1 ? "es" : "" );
}
- QUnit.extend( QUnit.assert, {
+ // Custom modification: removing QUnit.extend
+ var key;
+ var qunitAssertExtensions = {
hasClasses: function( element, classes, message ) {
var classArray = splitClasses( classes ),
results = check( element, classArray );
message = message || pluralize( "Element must have class", classArray );
- this.push( !results.missing.length, results.found.join( " " ), classes, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: !results.missing.length,
+ actual: results.found.join( " " ),
+ expected: classes,
+ message: message
+ } );
},
lacksClasses: function( element, classes, message ) {
var classArray = splitClasses( classes ),
@@ -88,7 +98,13 @@
message = message || pluralize( "Element must not have class", classArray );
- this.push( !results.found.length, results.found.join( " " ), classes, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: !results.found.length,
+ actual: results.found.join( " " ),
+ expected: classes,
+ message: message
+ } );
},
hasClassesStrict: function( element, classes, message ) {
var result,
@@ -101,49 +117,91 @@
splitClasses( results.element.getAttribute( "class" ) ).length ===
results.found.length;
- this.push( result, results.found.join( " " ), classes, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: result,
+ actual: results.found.join( " " ),
+ expected: classes,
+ message: message
+ } );
},
hasClassRegex: function( element, regex, message ) {
var results = check( element, regex );
message = message || "Element must have class matching " + regex;
- this.push( !!results.found.length, results.found.join( " " ), regex, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: !!results.found.length,
+ actual: results.found.join( " " ),
+ expected: regex,
+ message: message
+ } );
},
lacksClassRegex: function( element, regex, message ) {
var results = check( element, regex );
message = message || "Element must not have class matching " + regex;
- this.push( results.missing.length, results.missing.join( " " ), regex, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: results.missing.length,
+ actual: results.missing.join( " " ),
+ expected: regex,
+ message: message
+ } );
},
hasClassStart: function( element, partialClass, message ) {
var results = check( element, new RegExp( "^" + partialClass ) );
message = message || "Element must have class starting with " + partialClass;
- this.push( results.found.length, results.found.join( " " ), partialClass, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: results.found.length,
+ actual: results.found.join( " " ),
+ expected: partialClass,
+ message: message
+ } );
},
lacksClassStart: function( element, partialClass, message ) {
var results = check( element, new RegExp( "^" + partialClass ) );
message = message || "Element must not have class starting with " + partialClass;
- this.push( results.missing.length, results.missing.join( " " ), partialClass, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: results.missing.length,
+ actual: results.missing.join( " " ),
+ expected: partialClass,
+ message: message
+ } );
},
hasClassPartial: function( element, partialClass, message ) {
var results = check( element, new RegExp( partialClass ) );
message = message || "Element must have class containing '" + partialClass + "'";
- this.push( results.found.length, results.found.join( " " ), partialClass, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: results.found.length,
+ actual: results.found.join( " " ),
+ expected: partialClass,
+ message: message
+ } );
},
lacksClassPartial: function( element, partialClass, message ) {
var results = check( element, new RegExp( partialClass ) );
message = message || "Element must not have class containing '" + partialClass + "'";
- this.push( results.missing.length, results.missing.join( " " ), partialClass, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: results.missing.length,
+ actual: results.missing.join( " " ),
+ expected: partialClass,
+ message: message
+ } );
},
lacksAllClasses: function( element, message ) {
element = element.jquery ? element[ 0 ] : element;
@@ -153,7 +211,13 @@
message = message || "Element must not have any classes";
- this.push( !classes.length, !classes.length, true, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: !classes.length,
+ actual: !classes.length,
+ expected: true,
+ message: message
+ } );
},
hasSomeClass: function( element, message ) {
element = element.jquery ? element[ 0 ] : element;
@@ -163,7 +227,19 @@
message = message || "Element must have a class";
- this.push( classes.length, classes.length, true, message );
+ // Custom modification: push -> pushResult
+ this.pushResult( {
+ result: classes.length,
+ actual: classes.length,
+ expected: true,
+ message: message
+ } );
}
- });
+ };
+
+ // Custom modification: removing QUnit.extend
+ for ( key in qunitAssertExtensions ) {
+ QUnit.assert[ key ] = qunitAssertExtensions[ key ];
+ }
+
} ) );
diff --git a/external/qunit-assert-close/MIT-LICENSE.txt b/tests/lib/vendor/qunit-assert-close/MIT-LICENSE.txt
similarity index 100%
rename from external/qunit-assert-close/MIT-LICENSE.txt
rename to tests/lib/vendor/qunit-assert-close/MIT-LICENSE.txt
diff --git a/external/qunit-assert-close/qunit-assert-close.js b/tests/lib/vendor/qunit-assert-close/qunit-assert-close.js
similarity index 86%
rename from external/qunit-assert-close/qunit-assert-close.js
rename to tests/lib/vendor/qunit-assert-close/qunit-assert-close.js
index 2eee713a0..69d405205 100644
--- a/external/qunit-assert-close/qunit-assert-close.js
+++ b/tests/lib/vendor/qunit-assert-close/qunit-assert-close.js
@@ -1,3 +1,5 @@
+// With custom modifications - all are marked with
+// a "Custom modification" comment.
(function(factory) {
// NOTE:
@@ -12,11 +14,10 @@
else if (typeof module !== "undefined" && module && module.exports && typeof require === "function") {
module.exports = factory(require("qunitjs"));
}
- // For CommonJS with `exports`, but without `module.exports`, like Rhino
- else if (typeof exports !== "undefined" && exports && typeof require === "function") {
- var qunit = require("qunitjs");
- qunit.extend(exports, factory(qunit));
- }
+
+ // Custom modification: remove the non-Node.js CommonJS part due to its
+ // usage of QUnit.extend.
+ //
// For browser globals
else {
factory(QUnit);
@@ -75,7 +76,13 @@
message = message || (actual + " should be within " + maxDifference + " (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
- pushContext.push(result, actual, expected, message);
+ // Custom modification: push -> pushResult
+ pushContext.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
}
@@ -109,7 +116,13 @@
}
message = message || (actual + " should be within " + maxPercentDifference + "% (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
- pushContext.push(result, actual, expected, message);
+ // Custom modification: push -> pushResult
+ pushContext.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
};
@@ -131,7 +144,13 @@
message = message || (actual + " should not be within " + minDifference + " (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
- pushContext.push(result, actual, expected, message);
+ // Custom modification: push -> pushResult
+ pushContext.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
}
@@ -165,10 +184,16 @@
}
message = message || (actual + " should not be within " + minPercentDifference + "% (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
- pushContext.push(result, actual, expected, message);
+ // Custom modification: push -> pushResult
+ pushContext.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
};
-
+ var key;
var api = {
close: close,
notClose: notClose,
@@ -176,7 +201,9 @@
notClosePercent: notClose.percent
};
- QUnit.extend(QUnit.assert, api);
+ for (key in api) {
+ QUnit.assert[key] = api[key];
+ }
return api;
}));
diff --git a/external/qunit-composite/LICENSE.txt b/tests/lib/vendor/qunit-composite/LICENSE.txt
similarity index 100%
rename from external/qunit-composite/LICENSE.txt
rename to tests/lib/vendor/qunit-composite/LICENSE.txt
diff --git a/external/qunit-composite/qunit-composite.css b/tests/lib/vendor/qunit-composite/qunit-composite.css
similarity index 100%
rename from external/qunit-composite/qunit-composite.css
rename to tests/lib/vendor/qunit-composite/qunit-composite.css
diff --git a/external/qunit-composite/qunit-composite.js b/tests/lib/vendor/qunit-composite/qunit-composite.js
similarity index 96%
rename from external/qunit-composite/qunit-composite.js
rename to tests/lib/vendor/qunit-composite/qunit-composite.js
index 8e4fda45a..042d024b4 100644
--- a/external/qunit-composite/qunit-composite.js
+++ b/tests/lib/vendor/qunit-composite/qunit-composite.js
@@ -1,6 +1,9 @@
/**
* QUnit Composite
*
+ * With custom modifications - all are marked with
+ * a "Custom modification" comment.
+ *
* https://github.com/JamesMGreene/qunit-composite
*
* Copyright jQuery Foundation and other contributors
@@ -93,7 +96,12 @@ function initIframe() {
// Pass all test details through to the main page
var message = ( moduleName ? moduleName + ": " : "" ) + testName + ": " + ( data.message || ( data.result ? "okay" : "failed" ) );
suiteAssert.expect( ++count );
- suiteAssert.push( data.result, data.actual, data.expected, message );
+ suiteAssert.pushResult( {
+ result: data.result,
+ actual: data.actual,
+ expected: data.expected,
+ message: message
+ } );
});
// Continue the outer test when the iframe's test is done
diff --git a/tests/unit/accordion/all.html b/tests/unit/accordion/all.html
index 3c247cdae..71593dd39 100644
--- a/tests/unit/accordion/all.html
+++ b/tests/unit/accordion/all.html
@@ -7,9 +7,9 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+