Skip to content

Commit 9b4aa78

Browse files
committed
test: refactor assert test
This adds puctiations to the comments, uses a capital letters for the first character, removes a few obsolete comments and switches to assert.ok when suitable. It also moves all `assert.deepEqual()` and `assert.deepStrictEqual()` tests to the appropriate file. PR-URL: nodejs#18610 Reviewed-By: Joyee Cheung <[email protected]>
1 parent 37c88f0 commit 9b4aa78

File tree

2 files changed

+349
-386
lines changed

2 files changed

+349
-386
lines changed

test/parallel/test-assert-deep.js

Lines changed: 298 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
'use strict';
2+
23
const common = require('../common');
34
const assert = require('assert');
45
const util = require('util');
6+
const { AssertionError } = assert;
57

68
// Template tag function turning an error message into a RegExp
79
// for assert.throws()
@@ -25,7 +27,7 @@ function re(literals, ...values) {
2527
// That is why we discourage using deepEqual in our own tests.
2628

2729
// Turn off no-restricted-properties because we are testing deepEqual!
28-
/* eslint-disable no-restricted-properties */
30+
/* eslint-disable no-restricted-properties, prefer-common-expectserror */
2931

3032
const arr = new Uint8Array([120, 121, 122, 10]);
3133
const buf = Buffer.from(arr);
@@ -545,4 +547,299 @@ assertDeepAndStrictEqual(-0, -0);
545547
assertDeepAndStrictEqual(a, b);
546548
}
547549

550+
assert.doesNotThrow(
551+
() => assert.deepEqual(new Date(2000, 3, 14), new Date(2000, 3, 14)),
552+
'deepEqual(new Date(2000, 3, 14), new Date(2000, 3, 14))');
553+
554+
assert.throws(() => assert.deepEqual(new Date(), new Date(2000, 3, 14)),
555+
AssertionError,
556+
'deepEqual(new Date(), new Date(2000, 3, 14))');
557+
558+
assert.throws(
559+
() => assert.notDeepEqual(new Date(2000, 3, 14), new Date(2000, 3, 14)),
560+
AssertionError,
561+
'notDeepEqual(new Date(2000, 3, 14), new Date(2000, 3, 14))'
562+
);
563+
564+
assert.doesNotThrow(
565+
() => assert.notDeepEqual(new Date(), new Date(2000, 3, 14)),
566+
'notDeepEqual(new Date(), new Date(2000, 3, 14))'
567+
);
568+
569+
assert.doesNotThrow(() => assert.deepEqual(/a/, /a/));
570+
assert.doesNotThrow(() => assert.deepEqual(/a/g, /a/g));
571+
assert.doesNotThrow(() => assert.deepEqual(/a/i, /a/i));
572+
assert.doesNotThrow(() => assert.deepEqual(/a/m, /a/m));
573+
assert.doesNotThrow(() => assert.deepEqual(/a/igm, /a/igm));
574+
assert.throws(() => assert.deepEqual(/ab/, /a/),
575+
{
576+
code: 'ERR_ASSERTION',
577+
name: 'AssertionError [ERR_ASSERTION]',
578+
message: '/ab/ deepEqual /a/'
579+
});
580+
assert.throws(() => assert.deepEqual(/a/g, /a/),
581+
{
582+
code: 'ERR_ASSERTION',
583+
name: 'AssertionError [ERR_ASSERTION]',
584+
message: '/a/g deepEqual /a/'
585+
});
586+
assert.throws(() => assert.deepEqual(/a/i, /a/),
587+
{
588+
code: 'ERR_ASSERTION',
589+
name: 'AssertionError [ERR_ASSERTION]',
590+
message: '/a/i deepEqual /a/'
591+
});
592+
assert.throws(() => assert.deepEqual(/a/m, /a/),
593+
{
594+
code: 'ERR_ASSERTION',
595+
name: 'AssertionError [ERR_ASSERTION]',
596+
message: '/a/m deepEqual /a/'
597+
});
598+
assert.throws(() => assert.deepEqual(/a/igm, /a/im),
599+
{
600+
code: 'ERR_ASSERTION',
601+
name: 'AssertionError [ERR_ASSERTION]',
602+
message: '/a/gim deepEqual /a/im'
603+
});
604+
605+
{
606+
const re1 = /a/g;
607+
re1.lastIndex = 3;
608+
assert.doesNotThrow(() => assert.deepEqual(re1, /a/g));
609+
}
610+
611+
assert.doesNotThrow(() => assert.deepEqual(4, '4'), 'deepEqual(4, \'4\')');
612+
assert.doesNotThrow(() => assert.deepEqual(true, 1), 'deepEqual(true, 1)');
613+
assert.throws(() => assert.deepEqual(4, '5'),
614+
AssertionError,
615+
'deepEqual( 4, \'5\')');
616+
617+
// Having the same number of owned properties && the same set of keys.
618+
assert.doesNotThrow(() => assert.deepEqual({ a: 4 }, { a: 4 }));
619+
assert.doesNotThrow(() => assert.deepEqual({ a: 4, b: '2' }, { a: 4, b: '2' }));
620+
assert.doesNotThrow(() => assert.deepEqual([4], ['4']));
621+
assert.throws(
622+
() => assert.deepEqual({ a: 4 }, { a: 4, b: true }), AssertionError);
623+
assert.doesNotThrow(() => assert.deepEqual(['a'], { 0: 'a' }));
624+
assert.doesNotThrow(() => assert.deepEqual({ a: 4, b: '1' }, { b: '1', a: 4 }));
625+
const a1 = [1, 2, 3];
626+
const a2 = [1, 2, 3];
627+
a1.a = 'test';
628+
a1.b = true;
629+
a2.b = true;
630+
a2.a = 'test';
631+
assert.throws(() => assert.deepEqual(Object.keys(a1), Object.keys(a2)),
632+
AssertionError);
633+
assert.doesNotThrow(() => assert.deepEqual(a1, a2));
634+
635+
// Having an identical prototype property.
636+
const nbRoot = {
637+
toString() { return `${this.first} ${this.last}`; }
638+
};
639+
640+
function nameBuilder(first, last) {
641+
this.first = first;
642+
this.last = last;
643+
return this;
644+
}
645+
nameBuilder.prototype = nbRoot;
646+
647+
function nameBuilder2(first, last) {
648+
this.first = first;
649+
this.last = last;
650+
return this;
651+
}
652+
nameBuilder2.prototype = nbRoot;
653+
654+
const nb1 = new nameBuilder('Ryan', 'Dahl');
655+
let nb2 = new nameBuilder2('Ryan', 'Dahl');
656+
657+
assert.doesNotThrow(() => assert.deepEqual(nb1, nb2));
658+
659+
nameBuilder2.prototype = Object;
660+
nb2 = new nameBuilder2('Ryan', 'Dahl');
661+
assert.doesNotThrow(() => assert.deepEqual(nb1, nb2));
662+
663+
// Primitives and object.
664+
assert.throws(() => assert.deepEqual(null, {}), AssertionError);
665+
assert.throws(() => assert.deepEqual(undefined, {}), AssertionError);
666+
assert.throws(() => assert.deepEqual('a', ['a']), AssertionError);
667+
assert.throws(() => assert.deepEqual('a', { 0: 'a' }), AssertionError);
668+
assert.throws(() => assert.deepEqual(1, {}), AssertionError);
669+
assert.throws(() => assert.deepEqual(true, {}), AssertionError);
670+
assert.throws(() => assert.deepEqual(Symbol(), {}), AssertionError);
671+
672+
// Primitive wrappers and object.
673+
assert.doesNotThrow(() => assert.deepEqual(new String('a'), ['a']),
674+
AssertionError);
675+
assert.doesNotThrow(() => assert.deepEqual(new String('a'), { 0: 'a' }),
676+
AssertionError);
677+
assert.doesNotThrow(() => assert.deepEqual(new Number(1), {}), AssertionError);
678+
assert.doesNotThrow(() => assert.deepEqual(new Boolean(true), {}),
679+
AssertionError);
680+
681+
// Same number of keys but different key names.
682+
assert.throws(() => assert.deepEqual({ a: 1 }, { b: 1 }), AssertionError);
683+
684+
assert.doesNotThrow(
685+
() => assert.deepStrictEqual(new Date(2000, 3, 14), new Date(2000, 3, 14)),
686+
'deepStrictEqual(new Date(2000, 3, 14), new Date(2000, 3, 14))'
687+
);
688+
689+
assert.throws(
690+
() => assert.deepStrictEqual(new Date(), new Date(2000, 3, 14)),
691+
AssertionError,
692+
'deepStrictEqual(new Date(), new Date(2000, 3, 14))'
693+
);
694+
695+
assert.throws(
696+
() => assert.notDeepStrictEqual(new Date(2000, 3, 14), new Date(2000, 3, 14)),
697+
AssertionError,
698+
'notDeepStrictEqual(new Date(2000, 3, 14), new Date(2000, 3, 14))'
699+
);
700+
701+
assert.doesNotThrow(
702+
() => assert.notDeepStrictEqual(new Date(), new Date(2000, 3, 14)),
703+
'notDeepStrictEqual(new Date(), new Date(2000, 3, 14))'
704+
);
705+
706+
assert.doesNotThrow(() => assert.deepStrictEqual(/a/, /a/));
707+
assert.doesNotThrow(() => assert.deepStrictEqual(/a/g, /a/g));
708+
assert.doesNotThrow(() => assert.deepStrictEqual(/a/i, /a/i));
709+
assert.doesNotThrow(() => assert.deepStrictEqual(/a/m, /a/m));
710+
assert.doesNotThrow(() => assert.deepStrictEqual(/a/igm, /a/igm));
711+
assert.throws(
712+
() => assert.deepStrictEqual(/ab/, /a/),
713+
{
714+
code: 'ERR_ASSERTION',
715+
name: 'AssertionError [ERR_ASSERTION]',
716+
message: '/ab/ deepStrictEqual /a/'
717+
});
718+
assert.throws(
719+
() => assert.deepStrictEqual(/a/g, /a/),
720+
{
721+
code: 'ERR_ASSERTION',
722+
name: 'AssertionError [ERR_ASSERTION]',
723+
message: '/a/g deepStrictEqual /a/'
724+
});
725+
assert.throws(
726+
() => assert.deepStrictEqual(/a/i, /a/),
727+
{
728+
code: 'ERR_ASSERTION',
729+
name: 'AssertionError [ERR_ASSERTION]',
730+
message: '/a/i deepStrictEqual /a/'
731+
});
732+
assert.throws(
733+
() => assert.deepStrictEqual(/a/m, /a/),
734+
{
735+
code: 'ERR_ASSERTION',
736+
name: 'AssertionError [ERR_ASSERTION]',
737+
message: '/a/m deepStrictEqual /a/'
738+
});
739+
assert.throws(
740+
() => assert.deepStrictEqual(/a/igm, /a/im),
741+
{
742+
code: 'ERR_ASSERTION',
743+
name: 'AssertionError [ERR_ASSERTION]',
744+
message: '/a/gim deepStrictEqual /a/im'
745+
});
746+
747+
{
748+
const re1 = /a/;
749+
re1.lastIndex = 3;
750+
assert.doesNotThrow(() => assert.deepStrictEqual(re1, /a/));
751+
}
752+
753+
assert.throws(() => assert.deepStrictEqual(4, '4'),
754+
AssertionError,
755+
'deepStrictEqual(4, \'4\')');
756+
757+
assert.throws(() => assert.deepStrictEqual(true, 1),
758+
AssertionError,
759+
'deepStrictEqual(true, 1)');
760+
761+
assert.throws(() => assert.deepStrictEqual(4, '5'),
762+
AssertionError,
763+
'deepStrictEqual(4, \'5\')');
764+
765+
// Having the same number of owned properties && the same set of keys.
766+
assert.doesNotThrow(() => assert.deepStrictEqual({ a: 4 }, { a: 4 }));
767+
assert.doesNotThrow(
768+
() => assert.deepStrictEqual({ a: 4, b: '2' }, { a: 4, b: '2' }));
769+
assert.throws(() => assert.deepStrictEqual([4], ['4']),
770+
{
771+
code: 'ERR_ASSERTION',
772+
name: 'AssertionError [ERR_ASSERTION]',
773+
message: "[ 4 ] deepStrictEqual [ '4' ]"
774+
});
775+
assert.throws(() => assert.deepStrictEqual({ a: 4 }, { a: 4, b: true }),
776+
{
777+
code: 'ERR_ASSERTION',
778+
name: 'AssertionError [ERR_ASSERTION]',
779+
message: '{ a: 4 } deepStrictEqual { a: 4, b: true }'
780+
});
781+
assert.throws(() => assert.deepStrictEqual(['a'], { 0: 'a' }),
782+
{
783+
code: 'ERR_ASSERTION',
784+
name: 'AssertionError [ERR_ASSERTION]',
785+
message: "[ 'a' ] deepStrictEqual { '0': 'a' }"
786+
});
787+
548788
/* eslint-enable */
789+
790+
assert.doesNotThrow(
791+
() => assert.deepStrictEqual({ a: 4, b: '1' }, { b: '1', a: 4 }));
792+
793+
assert.throws(
794+
() => assert.deepStrictEqual([0, 1, 2, 'a', 'b'], [0, 1, 2, 'b', 'a']),
795+
AssertionError);
796+
797+
assert.doesNotThrow(() => assert.deepStrictEqual(a1, a2));
798+
799+
// Prototype check.
800+
function Constructor1(first, last) {
801+
this.first = first;
802+
this.last = last;
803+
}
804+
805+
function Constructor2(first, last) {
806+
this.first = first;
807+
this.last = last;
808+
}
809+
810+
const obj1 = new Constructor1('Ryan', 'Dahl');
811+
let obj2 = new Constructor2('Ryan', 'Dahl');
812+
813+
assert.throws(() => assert.deepStrictEqual(obj1, obj2), AssertionError);
814+
815+
Constructor2.prototype = Constructor1.prototype;
816+
obj2 = new Constructor2('Ryan', 'Dahl');
817+
818+
assert.doesNotThrow(() => assert.deepStrictEqual(obj1, obj2));
819+
820+
// primitives
821+
assert.throws(() => assert.deepStrictEqual(4, '4'), AssertionError);
822+
assert.throws(() => assert.deepStrictEqual(true, 1), AssertionError);
823+
assert.throws(() => assert.deepStrictEqual(Symbol(), Symbol()),
824+
AssertionError);
825+
826+
const s = Symbol();
827+
assert.doesNotThrow(() => assert.deepStrictEqual(s, s));
828+
829+
// Primitives and object.
830+
assert.throws(() => assert.deepStrictEqual(null, {}), AssertionError);
831+
assert.throws(() => assert.deepStrictEqual(undefined, {}), AssertionError);
832+
assert.throws(() => assert.deepStrictEqual('a', ['a']), AssertionError);
833+
assert.throws(() => assert.deepStrictEqual('a', { 0: 'a' }), AssertionError);
834+
assert.throws(() => assert.deepStrictEqual(1, {}), AssertionError);
835+
assert.throws(() => assert.deepStrictEqual(true, {}), AssertionError);
836+
assert.throws(() => assert.deepStrictEqual(Symbol(), {}), AssertionError);
837+
838+
// Primitive wrappers and object.
839+
assert.throws(() => assert.deepStrictEqual(new String('a'), ['a']),
840+
AssertionError);
841+
assert.throws(() => assert.deepStrictEqual(new String('a'), { 0: 'a' }),
842+
AssertionError);
843+
assert.throws(() => assert.deepStrictEqual(new Number(1), {}), AssertionError);
844+
assert.throws(() => assert.deepStrictEqual(new Boolean(true), {}),
845+
AssertionError);

0 commit comments

Comments
 (0)