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 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +