Skip to content

Commit

Permalink
Build: Fork vendors to remove QUnit deprecated API usage
Browse files Browse the repository at this point in the history
Changes:
* add `tests/lib/vendor/**/*` to `.eslintignore`
* move `qunit-composite` to `tests/lib` so that we can modify it
* move `qunit-assert-classes` to `tests/lib` so that we can modify it
* move `qunit-assert-close` to `tests/lib` so that we can modify it
* replace `assert.push` with `assert.pushResult`
* remove usage of `QUnit.extend`

Closes gh-2157
  • Loading branch information
mgol committed May 10, 2023
1 parent f68d655 commit 546214e
Show file tree
Hide file tree
Showing 39 changed files with 241 additions and 109 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
dist/**/*
external/**/*
tests/lib/vendor/**/*
ui/vendor/**/*
12 changes: 0 additions & 12 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
3 changes: 0 additions & 3 deletions bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions tests/lib/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
23 changes: 16 additions & 7 deletions tests/lib/qunit-assert-domequal.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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();
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// With custom modifications - all are marked with
// a "Custom modification" comment.
( function( factory ) {
if ( typeof define === "function" && define.amd ) {

Expand Down Expand Up @@ -73,22 +75,36 @@
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 ),
results = check( element, classArray );

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,
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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 ];
}

} ) );
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// With custom modifications - all are marked with
// a "Custom modification" comment.
(function(factory) {

// NOTE:
Expand All @@ -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);
Expand Down Expand Up @@ -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
});
}


Expand Down Expand Up @@ -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
});
};


Expand All @@ -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
});
}


Expand Down Expand Up @@ -165,18 +184,26 @@
}
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,
closePercent: close.percent,
notClosePercent: notClose.percent
};

QUnit.extend(QUnit.assert, api);
for (key in api) {
QUnit.assert[key] = api[key];
}

return api;
}));
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 546214e

Please sign in to comment.