Skip to content

Commit b3dcc68

Browse files
test: enhance skipPrototypeComparison tests for Assert class
1 parent dd0adbd commit b3dcc68

File tree

1 file changed

+121
-4
lines changed

1 file changed

+121
-4
lines changed

test/parallel/test-assert-class.js

Lines changed: 121 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,8 +498,14 @@ test('Assert class non strict with simple diff', () => {
498498
function CoolClass(name) { this.name = name; }
499499

500500
function AwesomeClass(name) { this.name = name; }
501-
const person = new CoolClass('Assert is inspiring');
502-
const user = new AwesomeClass('Assert is inspiring');
501+
502+
class Modern { constructor(value) { this.value = value; } }
503+
class Legacy { constructor(value) { this.value = value; } }
504+
505+
const cool = new CoolClass('Assert is inspiring');
506+
const awesome = new AwesomeClass('Assert is inspiring');
507+
const modern = new Modern(42);
508+
const legacy = new Legacy(42);
503509

504510
test('Assert class strict with skipPrototypeComparison', () => {
505511
const assertInstance = new Assert({ skipPrototypeComparison: true });
@@ -508,7 +514,25 @@ test('Assert class non strict with simple diff', () => {
508514
() => assertInstance.deepEqual([1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 9, 7]),
509515
{ message }
510516
);
511-
assertInstance.deepEqual(person, user);
517+
518+
assertInstance.deepEqual(cool, awesome);
519+
assertInstance.deepStrictEqual(cool, awesome);
520+
assertInstance.deepEqual(modern, legacy);
521+
assertInstance.deepStrictEqual(modern, legacy);
522+
523+
const cool2 = new CoolClass('Soooo coooool');
524+
assert.throws(
525+
() => assertInstance.deepStrictEqual(cool, cool2),
526+
{ code: 'ERR_ASSERTION' }
527+
);
528+
529+
const nested1 = { obj: new CoolClass('test'), arr: [1, 2, 3] };
530+
const nested2 = { obj: new AwesomeClass('test'), arr: [1, 2, 3] };
531+
assertInstance.deepStrictEqual(nested1, nested2);
532+
533+
const arr = new Uint8Array([1, 2, 3]);
534+
const buf = Buffer.from([1, 2, 3]);
535+
assertInstance.deepStrictEqual(arr, buf);
512536
});
513537

514538
test('Assert class non strict with skipPrototypeComparison', () => {
@@ -518,6 +542,99 @@ test('Assert class non strict with simple diff', () => {
518542
() => assertInstance.deepStrictEqual([1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 9, 7]),
519543
{ message }
520544
);
521-
assertInstance.deepStrictEqual(person, user);
545+
546+
assertInstance.deepStrictEqual(cool, awesome);
547+
assertInstance.deepStrictEqual(modern, legacy);
548+
});
549+
550+
test('Assert class skipPrototypeComparison with complex objects', () => {
551+
const assertInstance = new Assert({ skipPrototypeComparison: true });
552+
553+
function ComplexAwesomeClass(name, age) {
554+
this.name = name;
555+
this.age = age;
556+
this.settings = {
557+
theme: 'dark',
558+
lang: 'en'
559+
};
560+
}
561+
562+
function ComplexCoolClass(name, age) {
563+
this.name = name;
564+
this.age = age;
565+
this.settings = {
566+
theme: 'dark',
567+
lang: 'en'
568+
};
569+
}
570+
571+
const awesome1 = new ComplexAwesomeClass('Foo', 30);
572+
const cool1 = new ComplexCoolClass('Foo', 30);
573+
574+
assertInstance.deepStrictEqual(awesome1, cool1);
575+
576+
const cool2 = new ComplexCoolClass('Foo', 30);
577+
cool2.settings.theme = 'light';
578+
579+
assert.throws(
580+
() => assertInstance.deepStrictEqual(awesome1, cool2),
581+
{ code: 'ERR_ASSERTION' }
582+
);
583+
});
584+
585+
test('Assert class skipPrototypeComparison with arrays and special objects', () => {
586+
const assertInstance = new Assert({ skipPrototypeComparison: true });
587+
588+
const arr1 = [1, 2, 3];
589+
const arr2 = new Array(1, 2, 3);
590+
assertInstance.deepStrictEqual(arr1, arr2);
591+
592+
const date1 = new Date('2023-01-01');
593+
const date2 = new Date('2023-01-01');
594+
assertInstance.deepStrictEqual(date1, date2);
595+
596+
const regex1 = /test/g;
597+
const regex2 = new RegExp('test', 'g');
598+
assertInstance.deepStrictEqual(regex1, regex2);
599+
600+
const date3 = new Date('2023-01-02');
601+
assert.throws(
602+
() => assertInstance.deepStrictEqual(date1, date3),
603+
{ code: 'ERR_ASSERTION' }
604+
);
605+
});
606+
607+
test('Assert class skipPrototypeComparison with notDeepStrictEqual', () => {
608+
const assertInstance = new Assert({ skipPrototypeComparison: true });
609+
610+
assert.throws(
611+
() => assertInstance.notDeepStrictEqual(cool, awesome),
612+
{ code: 'ERR_ASSERTION' }
613+
);
614+
615+
const notAwesome = new AwesomeClass('Not so awesome');
616+
assertInstance.notDeepStrictEqual(cool, notAwesome);
617+
618+
const defaultAssertInstance = new Assert({ skipPrototypeComparison: false });
619+
defaultAssertInstance.notDeepStrictEqual(cool, awesome);
620+
});
621+
622+
test('Assert class skipPrototypeComparison with mixed types', () => {
623+
const assertInstance = new Assert({ skipPrototypeComparison: true });
624+
625+
const obj1 = { value: 42, nested: { prop: 'test' } };
626+
627+
function CustomObj(value, nested) {
628+
this.value = value;
629+
this.nested = nested;
630+
}
631+
632+
const obj2 = new CustomObj(42, { prop: 'test' });
633+
assertInstance.deepStrictEqual(obj1, obj2);
634+
635+
assert.throws(
636+
() => assertInstance.deepStrictEqual({ num: 42 }, { num: '42' }),
637+
{ code: 'ERR_ASSERTION' }
638+
);
522639
});
523640
}

0 commit comments

Comments
 (0)