Skip to content

Commit

Permalink
Tests: Clean up hierarchy of our own test modules
Browse files Browse the repository at this point in the history
Our internal tests mostly predate support for nested modules
so that's why these are mostly flat and messy.
Re-structure them so that related tests are under the same
module. This makes it easier to scan the results and to re-run
tests in a given file.

Also:
* Use assert.test instead of QUnit.config.current where possible.
* Remove redundant use of assert.expect() from most tests.
* Remove some duplicate tests.
* Clarify local name in setTimeout.js as globalThis instead of
  window, since the test is used in Node.js as well.

Ref #1511.
  • Loading branch information
Krinkle committed Nov 23, 2020
1 parent 2bf39f7 commit a1bf287
Show file tree
Hide file tree
Showing 17 changed files with 1,128 additions and 1,255 deletions.
30 changes: 4 additions & 26 deletions test/main/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ QUnit.test( "notStrictEqual", function( assert ) {
} );

QUnit.test( "propEqual", function( assert ) {
assert.expect( 5 );
var objectCreate = Object.create || function( origin ) {
function O() {}
O.prototype = origin;
Expand Down Expand Up @@ -164,7 +163,6 @@ QUnit.test( "propEqual", function( assert ) {
} );

QUnit.test( "throws", function( assert ) {
assert.expect( 20 );
function CustomError( message ) {
this.message = message;
}
Expand Down Expand Up @@ -354,9 +352,11 @@ QUnit.test( "throws", function( assert ) {
);
} );

QUnit.test( "rejects", function( assert ) {
assert.expect( 16 );
QUnit.test( "raises", function( assert ) {
assert.strictEqual( assert.raises, assert.throws, "alias for throws" );
} );

QUnit.test( "rejects", function( assert ) {
function CustomError( message ) {
this.message = message;
}
Expand Down Expand Up @@ -471,10 +471,6 @@ QUnit.test( "rejects", function( assert ) {
);
} );

QUnit.test( "raises, alias for throws", function( assert ) {
assert.strictEqual( assert.raises, assert.throws );
} );

QUnit.module( "failing assertions", {
beforeEach: function( assert ) {
var originalPushResult = assert.pushResult;
Expand Down Expand Up @@ -664,21 +660,3 @@ QUnit.test( "rejects", function( assert ) {
"rejects fails when provided an array"
);
} );

( function() {
var previousTestAssert;

QUnit.module( "delayed assertions" );

QUnit.test( "assertions after test finishes throws an error - part 1", function( assert ) {
assert.expect( 0 );
previousTestAssert = assert;
} );

QUnit.test( "assertions after test finishes throws an error - part 2", function( assert ) {
assert.expect( 1 );
assert.throws( function() {
previousTestAssert.ok( true );
}, /Assertion occurred after test had finished/ );
} );
}() );
227 changes: 109 additions & 118 deletions test/main/assert/step.js
Original file line number Diff line number Diff line change
@@ -1,161 +1,152 @@
QUnit.module( "assert.step" );
QUnit.module( "assert.step", function() {

QUnit.test( "pushes a failing assertion if no message is given", function( assert ) {
assert.expect( 3 );
QUnit.test( "pushes a failing assertion if no message is given", function( assert ) {
var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a message to assert.step" );
};

assert.step();

assert.verifySteps( [ undefined ] );
} );

QUnit.test( "pushes a failing assertion if empty message is given", function( assert ) {
assert.expect( 3 );

var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a message to assert.step" );
};
assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a message to assert.step" );
};

assert.step( "" );

assert.verifySteps( [ "" ] );
} );

QUnit.test( "pushes a failing assertion if a non string message is given", function( assert ) {
assert.expect( 7 );
assert.step();
assert.verifySteps( [ undefined ] );
} );

var count = 0;
var originalPushResult = assert.pushResult;
QUnit.test( "pushes a failing assertion if empty message is given", function( assert ) {
var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;
assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a message to assert.step" );
};

count += 1;
assert.step( "" );
assert.verifySteps( [ "" ] );
} );

assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a string value to assert.step" );
QUnit.test( "pushes a failing assertion if a non string message is given", function( assert ) {
var count = 0;
var originalPushResult = assert.pushResult;

if ( count < 3 ) {
assert.pushResult = pushResultStub;
}
};
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

assert.step( 1 );
assert.step( null );
assert.step( false );
count += 1;

assert.verifySteps( [ 1, null, false ] );
} );
assert.false( resultInfo.result );
assert.equal( resultInfo.message, "You must provide a string value to assert.step" );

QUnit.test( "pushes a passing assertion if a message is given", function( assert ) {
assert.expect( 3 );
if ( count < 3 ) {
assert.pushResult = pushResultStub;
}
};

assert.step( "One step" );
assert.step( "Two step" );
assert.step( 1 );
assert.step( null );
assert.step( false );

assert.verifySteps( [ "One step", "Two step" ] );
} );
assert.verifySteps( [ 1, null, false ] );
} );

QUnit.module( "assert.verifySteps" );
QUnit.test( "pushes a passing assertion if a message is given", function( assert ) {
assert.step( "One step" );
assert.step( "Two step" );

QUnit.test( "verifies the order and value of steps", function( assert ) {
assert.expect( 10 );
assert.verifySteps( [ "One step", "Two step" ] );
} );

assert.step( "One step" );
assert.step( "Two step" );
assert.step( "Red step" );
assert.step( "Blue step" );
QUnit.test( "step() and verifySteps() count as assertions", function( assert ) {
assert.expect( 3 );

assert.verifySteps( [ "One step", "Two step", "Red step", "Blue step" ] );
assert.step( "One" );
assert.step( "Two" );

assert.step( "One step" );
assert.step( "Two step" );
assert.step( "Red step" );
assert.step( "Blue step" );
assert.verifySteps( [ "One", "Two" ], "Three" );
} );

var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;
QUnit.module( "assert.verifySteps" );

assert.false( resultInfo.result );
};
QUnit.test( "verifies the order and value of steps", function( assert ) {
assert.step( "One step" );
assert.step( "Two step" );
assert.step( "Red step" );
assert.step( "Blue step" );

assert.verifySteps( [ "One step", "Red step", "Two step", "Blue step" ] );
} );
assert.verifySteps( [ "One step", "Two step", "Red step", "Blue step" ] );

QUnit.test( "verifies the order and value of failed steps", function( assert ) {
assert.expect( 3 );
assert.step( "One step" );
assert.step( "Two step" );
assert.step( "Red step" );
assert.step( "Blue step" );

var originalPushResult = assert.pushResult;
var originalPushResult = assert.pushResult;
assert.pushResult = function pushResultStub( resultInfo ) {
assert.pushResult = originalPushResult;

assert.step( "One step" );
assert.false( resultInfo.result );
};

assert.pushResult = function noop() {};
assert.step();
assert.step( "" );
assert.pushResult = originalPushResult;
assert.verifySteps( [ "One step", "Red step", "Two step", "Blue step" ] );
} );

assert.step( "Two step" );
QUnit.test( "verifies the order and value of failed steps", function( assert ) {
var originalPushResult = assert.pushResult;

assert.verifySteps( [ "One step", undefined, "", "Two step" ] );
} );
assert.step( "One step" );

QUnit.test( "resets the step list after verification", function( assert ) {
assert.expect( 4 );
assert.pushResult = function noop() {};
assert.step();
assert.step( "" );
assert.pushResult = originalPushResult;

assert.step( "one" );
assert.verifySteps( [ "one" ] );
assert.step( "Two step" );

assert.step( "two" );
assert.verifySteps( [ "two" ] );
} );
assert.verifySteps( [ "One step", undefined, "", "Two step" ] );
} );

QUnit.test( "errors if not called when `assert.step` is used", function( assert ) {
assert.expect( 2 );
assert.step( "one" );
QUnit.test( "resets the step list after verification", function( assert ) {
assert.step( "one" );
assert.verifySteps( [ "one" ] );

var originalPushFailure = QUnit.config.current.pushFailure;
QUnit.config.current.pushFailure = function pushFailureStub( message ) {
QUnit.config.current.pushFailure = originalPushFailure;
assert.step( "two" );
assert.verifySteps( [ "two" ] );
} );

assert.equal( message, "Expected assert.verifySteps() to be called before end of test after using assert.step(). Unverified steps: one" );
};
} );
QUnit.test( "errors if not called when `assert.step` is used", function( assert ) {
assert.expect( 2 );
assert.step( "one" );

// Testing to ensure steps array is not passed by reference: https://github.com/qunitjs/qunit/issues/1266
QUnit.module( "assert.verifySteps value reference", function() {
var original = assert.test.pushFailure;
assert.test.pushFailure = function( message ) {
assert.test.pushFailure = original;

var loggedAssertions = {};
assert.equal( message, "Expected assert.verifySteps() to be called before end of test after using assert.step(). Unverified steps: one" );
};
} );

QUnit.log( function( details ) {
// Testing to ensure steps array is not passed by reference: https://github.com/qunitjs/qunit/issues/1266
QUnit.module( "assert.verifySteps value reference", function() {

if ( details.message === "verification-assertion" ) {
loggedAssertions[ details.message ] = details;
}
var loggedAssertions = {};

} );
QUnit.log( function( details ) {
if ( details.message === "verification-assertion" ) {
loggedAssertions[ details.message ] = details;
}
} );

QUnit.test( "passing test to see if steps array is passed by reference to logging function", function( assert ) {
assert.step( "step one" );
assert.step( "step two" );
QUnit.test( "passing test to see if steps array is passed by reference to logging function", function( assert ) {
assert.step( "step one" );
assert.step( "step two" );

assert.verifySteps( [ "step one", "step two" ], "verification-assertion" );
} );
assert.verifySteps( [ "step one", "step two" ], "verification-assertion" );
} );

QUnit.test( "steps array should not be reset in logging function", function( assert ) {
var result = loggedAssertions[ "verification-assertion" ].actual;
assert.deepEqual( result, [ "step one", "step two" ] );
QUnit.test( "steps array should not be reset in logging function", function( assert ) {
var result = loggedAssertions[ "verification-assertion" ].actual;
assert.deepEqual( result, [ "step one", "step two" ] );
} );
} );

} );
24 changes: 12 additions & 12 deletions test/main/assert/timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ QUnit.module( "assert.timeout", function() {
assert.timeout( 10 );
assert.expect( 1 );

var originalPushFailure = QUnit.config.current.pushFailure;
QUnit.config.current.pushFailure = function pushFailureStub( message ) {
QUnit.config.current.pushFailure = originalPushFailure;
var original = assert.test.pushFailure;
assert.test.pushFailure = function( message ) {
assert.test.pushFailure = original;

assert.equal( message, "Test took longer than 10ms; test timed out." );
};
Expand All @@ -17,9 +17,9 @@ QUnit.module( "assert.timeout", function() {
assert.timeout( 10 );
assert.expect( 1 );

var originalPushFailure = QUnit.config.current.pushFailure;
QUnit.config.current.pushFailure = function pushFailureStub( message ) {
QUnit.config.current.pushFailure = originalPushFailure;
var original = assert.test.pushFailure;
assert.test.pushFailure = function( message ) {
assert.test.pushFailure = original;

assert.equal( message, "Test took longer than 10ms; test timed out." );
};
Expand Down Expand Up @@ -51,9 +51,9 @@ QUnit.module( "assert.timeout", function() {

setTimeout( function() {
assert.timeout( 10 );
var originalPushFailure = QUnit.config.current.pushFailure;
QUnit.config.current.pushFailure = function pushFailureStub( message ) {
QUnit.config.current.pushFailure = originalPushFailure;
var original = assert.test.pushFailure;
assert.test.pushFailure = function( message ) {
assert.test.pushFailure = original;

assert.equal( message, "Test took longer than 10ms; test timed out." );
done();
Expand All @@ -64,9 +64,9 @@ QUnit.module( "assert.timeout", function() {

QUnit.module( "a value of zero", function() {
function stubPushFailure( assert ) {
var originalPushFailure = QUnit.config.current.pushFailure;
QUnit.config.current.pushFailure = function pushFailureStub( message ) {
QUnit.config.current.pushFailure = originalPushFailure;
var original = assert.test.pushFailure;
assert.test.pushFailure = function( message ) {
assert.test.pushFailure = original;

assert.equal(
message,
Expand Down
Loading

0 comments on commit a1bf287

Please sign in to comment.