Skip to content

Commit b5c2ad7

Browse files
committed
Bug 1875237 - add date support to Assert less/greater/lessOrEqual/greaterOrEqual methods, r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D198973
1 parent 79aabcc commit b5c2ad7

File tree

2 files changed

+58
-31
lines changed

2 files changed

+58
-31
lines changed

testing/modules/Assert.sys.mjs

+17-3
Original file line numberDiff line numberDiff line change
@@ -561,12 +561,26 @@ function compareNumbers(expression, lhs, rhs, message, operator) {
561561
this.report(expression, lhs, rhs, message, operator);
562562
return;
563563
}
564+
let lhsIsDate =
565+
typeof lhs == "object" && lhs.constructor.name == "Date" && !isNaN(lhs);
566+
let rhsIsDate =
567+
typeof rhs == "object" && rhs.constructor.name == "Date" && !isNaN(rhs);
568+
if (lhsIsDate && rhsIsDate) {
569+
this.report(expression, lhs, rhs, message, operator);
570+
return;
571+
}
564572

565573
let errorMessage;
566-
if (!lhsIsNumber && !rhsIsNumber) {
567-
errorMessage = "Neither '" + lhs + "' nor '" + rhs + "' are numbers";
574+
if (!lhsIsNumber && !rhsIsNumber && !lhsIsDate && !rhsIsDate) {
575+
errorMessage = `Neither '${lhs}' nor '${rhs}' are numbers or dates.`;
576+
} else if ((lhsIsNumber && rhsIsDate) || (lhsIsDate && rhsIsNumber)) {
577+
errorMessage = `'${lhsIsNumber ? lhs : rhs}' is a number and '${
578+
rhsIsDate ? rhs : lhs
579+
}' is a date.`;
568580
} else {
569-
errorMessage = "'" + (lhsIsNumber ? rhs : lhs) + "' is not a number";
581+
errorMessage = `'${
582+
lhsIsNumber || lhsIsDate ? rhs : lhs
583+
}' is not a number or date.`;
570584
}
571585
this.report(true, lhs, rhs, errorMessage);
572586
}

testing/modules/tests/xpcshell/test_assert.js

+41-28
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var { Assert } = ChromeUtils.importESModule(
99
"resource://testing-common/Assert.sys.mjs"
1010
);
1111

12-
function run_test() {
12+
add_task(function test_basic_asserts() {
1313
let assert = new Assert();
1414

1515
function makeBlock(f, ...args) {
@@ -378,34 +378,49 @@ function run_test() {
378378
assert.equal(message, "AssertionError: 1 >= 2");
379379

380380
assert.less(1, 2);
381-
try {
382-
assert.less(2, 2);
383-
} catch (e) {
384-
message = e.toString().split("\n")[0];
385-
}
386-
assert.equal(message, "AssertionError: 2 < 2");
381+
assert.throws(
382+
() => assert.less(2, 2),
383+
e => e == "AssertionError: 2 < 2"
384+
);
387385

388386
assert.lessOrEqual(2, 2);
389-
try {
390-
assert.lessOrEqual(2, 1);
391-
} catch (e) {
392-
message = e.toString().split("\n")[0];
393-
}
394-
assert.equal(message, "AssertionError: 2 <= 1");
387+
assert.throws(
388+
() => assert.lessOrEqual(2, 1),
389+
e => e == "AssertionError: 2 <= 1"
390+
);
395391

396-
try {
397-
assert.greater(NaN, 0);
398-
} catch (e) {
399-
message = e.toString().split("\n")[0];
400-
}
401-
assert.equal(message, "AssertionError: 'NaN' is not a number");
392+
assert.throws(
393+
() => assert.greater(NaN, 0),
394+
e => e == "AssertionError: 'NaN' is not a number or date."
395+
);
402396

403-
try {
404-
assert.greater(0, NaN);
405-
} catch (e) {
406-
message = e.toString().split("\n")[0];
407-
}
408-
assert.equal(message, "AssertionError: 'NaN' is not a number");
397+
assert.throws(
398+
() => assert.greater(0, NaN),
399+
e => e == "AssertionError: 'NaN' is not a number or date."
400+
);
401+
402+
let now = new Date();
403+
let firefoxReleaseDate = new Date("2004-11-09");
404+
assert.less(firefoxReleaseDate, now);
405+
assert.throws(
406+
() => assert.less(now, now),
407+
e => e == `AssertionError: "${now.toJSON()}" < "${now.toJSON()}"`
408+
);
409+
410+
assert.lessOrEqual(now, now);
411+
assert.greaterOrEqual(now, now);
412+
assert.throws(
413+
() => assert.greaterOrEqual(firefoxReleaseDate, now),
414+
e =>
415+
e ==
416+
`AssertionError: "${firefoxReleaseDate.toJSON()}" >= "${now.toJSON()}"`
417+
);
418+
419+
// Invalid date:
420+
assert.throws(
421+
() => assert.greater(firefoxReleaseDate, new Date("invalid")),
422+
e => e == "AssertionError: 'Invalid Date' is not a number or date."
423+
);
409424

410425
/* ---- stringMatches ---- */
411426
assert.stringMatches("hello world", /llo\s/);
@@ -429,9 +444,7 @@ function run_test() {
429444
() => assert.stringContains(5, "foo"),
430445
/^AssertionError: Expected a string for both lhs and rhs, but either "5" or "foo" is not a string./
431446
);
432-
433-
run_next_test();
434-
}
447+
});
435448

436449
add_task(async function test_rejects() {
437450
let assert = new Assert();

0 commit comments

Comments
 (0)