1
1
'use strict' ;
2
+
2
3
const common = require ( '../common' ) ;
3
4
const assert = require ( 'assert' ) ;
4
5
const util = require ( 'util' ) ;
6
+ const { AssertionError } = assert ;
5
7
6
8
// Template tag function turning an error message into a RegExp
7
9
// for assert.throws()
@@ -25,7 +27,7 @@ function re(literals, ...values) {
25
27
// That is why we discourage using deepEqual in our own tests.
26
28
27
29
// 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 */
29
31
30
32
const arr = new Uint8Array ( [ 120 , 121 , 122 , 10 ] ) ;
31
33
const buf = Buffer . from ( arr ) ;
@@ -545,4 +547,298 @@ assertDeepAndStrictEqual(-0, -0);
545
547
assertDeepAndStrictEqual ( a , b ) ;
546
548
}
547
549
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 . deepEqual ( / a / , / a / ) ;
570
+ assert . deepEqual ( / a / g, / a / g) ;
571
+ assert . deepEqual ( / a / i, / a / i) ;
572
+ assert . deepEqual ( / a / m, / a / m) ;
573
+ assert . deepEqual ( / a / igm, / a / igm) ;
574
+ common . expectsError ( ( ) => assert . deepEqual ( / a b / , / a / ) ,
575
+ {
576
+ code : 'ERR_ASSERTION' ,
577
+ name : 'AssertionError [ERR_ASSERTION]' ,
578
+ message : '/ab/ deepEqual /a/'
579
+ } ) ;
580
+ common . expectsError ( ( ) => assert . deepEqual ( / a / g, / a / ) ,
581
+ {
582
+ code : 'ERR_ASSERTION' ,
583
+ name : 'AssertionError [ERR_ASSERTION]' ,
584
+ message : '/a/g deepEqual /a/'
585
+ } ) ;
586
+ common . expectsError ( ( ) => assert . deepEqual ( / a / i, / a / ) ,
587
+ {
588
+ code : 'ERR_ASSERTION' ,
589
+ name : 'AssertionError [ERR_ASSERTION]' ,
590
+ message : '/a/i deepEqual /a/'
591
+ } ) ;
592
+ common . expectsError ( ( ) => assert . deepEqual ( / a / m, / a / ) ,
593
+ {
594
+ code : 'ERR_ASSERTION' ,
595
+ name : 'AssertionError [ERR_ASSERTION]' ,
596
+ message : '/a/m deepEqual /a/'
597
+ } ) ;
598
+ common . expectsError ( ( ) => 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 . deepStrictEqual ( / a / , / a / ) ;
707
+ assert . deepStrictEqual ( / a / g, / a / g) ;
708
+ assert . deepStrictEqual ( / a / i, / a / i) ;
709
+ assert . deepStrictEqual ( / a / m, / a / m) ;
710
+ assert . deepStrictEqual ( / a / igm, / a / igm) ;
711
+ common . expectsError (
712
+ ( ) => assert . deepStrictEqual ( / a b / , / a / ) ,
713
+ {
714
+ code : 'ERR_ASSERTION' ,
715
+ name : 'AssertionError [ERR_ASSERTION]' ,
716
+ message : '/ab/ deepStrictEqual /a/'
717
+ } ) ;
718
+ common . expectsError (
719
+ ( ) => assert . deepStrictEqual ( / a / g, / a / ) ,
720
+ {
721
+ code : 'ERR_ASSERTION' ,
722
+ name : 'AssertionError [ERR_ASSERTION]' ,
723
+ message : '/a/g deepStrictEqual /a/'
724
+ } ) ;
725
+ common . expectsError (
726
+ ( ) => assert . deepStrictEqual ( / a / i, / a / ) ,
727
+ {
728
+ code : 'ERR_ASSERTION' ,
729
+ name : 'AssertionError [ERR_ASSERTION]' ,
730
+ message : '/a/i deepStrictEqual /a/'
731
+ } ) ;
732
+ common . expectsError (
733
+ ( ) => assert . deepStrictEqual ( / a / m, / a / ) ,
734
+ {
735
+ code : 'ERR_ASSERTION' ,
736
+ name : 'AssertionError [ERR_ASSERTION]' ,
737
+ message : '/a/m deepStrictEqual /a/'
738
+ } ) ;
739
+ common . expectsError (
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 . deepStrictEqual ( { a : 4 } , { a : 4 } ) ;
767
+ assert . deepStrictEqual ( { a : 4 , b : '2' } , { a : 4 , b : '2' } ) ;
768
+ common . expectsError ( ( ) => assert . deepStrictEqual ( [ 4 ] , [ '4' ] ) ,
769
+ {
770
+ code : 'ERR_ASSERTION' ,
771
+ name : 'AssertionError [ERR_ASSERTION]' ,
772
+ message : "[ 4 ] deepStrictEqual [ '4' ]"
773
+ } ) ;
774
+ common . expectsError ( ( ) => assert . deepStrictEqual ( { a : 4 } , { a : 4 , b : true } ) ,
775
+ {
776
+ code : 'ERR_ASSERTION' ,
777
+ name : 'AssertionError [ERR_ASSERTION]' ,
778
+ message : '{ a: 4 } deepStrictEqual { a: 4, b: true }'
779
+ } ) ;
780
+ common . expectsError ( ( ) => assert . deepStrictEqual ( [ 'a' ] , { 0 : 'a' } ) ,
781
+ {
782
+ code : 'ERR_ASSERTION' ,
783
+ name : 'AssertionError [ERR_ASSERTION]' ,
784
+ message : "[ 'a' ] deepStrictEqual { '0': 'a' }"
785
+ } ) ;
786
+
548
787
/* eslint-enable */
788
+
789
+ assert . doesNotThrow (
790
+ ( ) => assert . deepStrictEqual ( { a : 4 , b : '1' } , { b : '1' , a : 4 } ) ) ;
791
+
792
+ assert . throws (
793
+ ( ) => assert . deepStrictEqual ( [ 0 , 1 , 2 , 'a' , 'b' ] , [ 0 , 1 , 2 , 'b' , 'a' ] ) ,
794
+ AssertionError ) ;
795
+
796
+ assert . doesNotThrow ( ( ) => assert . deepStrictEqual ( a1 , a2 ) ) ;
797
+
798
+ // Prototype check.
799
+ function Constructor1 ( first , last ) {
800
+ this . first = first ;
801
+ this . last = last ;
802
+ }
803
+
804
+ function Constructor2 ( first , last ) {
805
+ this . first = first ;
806
+ this . last = last ;
807
+ }
808
+
809
+ const obj1 = new Constructor1 ( 'Ryan' , 'Dahl' ) ;
810
+ let obj2 = new Constructor2 ( 'Ryan' , 'Dahl' ) ;
811
+
812
+ assert . throws ( ( ) => assert . deepStrictEqual ( obj1 , obj2 ) , AssertionError ) ;
813
+
814
+ Constructor2 . prototype = Constructor1 . prototype ;
815
+ obj2 = new Constructor2 ( 'Ryan' , 'Dahl' ) ;
816
+
817
+ assert . doesNotThrow ( ( ) => assert . deepStrictEqual ( obj1 , obj2 ) ) ;
818
+
819
+ // primitives
820
+ assert . throws ( ( ) => assert . deepStrictEqual ( 4 , '4' ) , AssertionError ) ;
821
+ assert . throws ( ( ) => assert . deepStrictEqual ( true , 1 ) , AssertionError ) ;
822
+ assert . throws ( ( ) => assert . deepStrictEqual ( Symbol ( ) , Symbol ( ) ) ,
823
+ AssertionError ) ;
824
+
825
+ const s = Symbol ( ) ;
826
+ assert . doesNotThrow ( ( ) => assert . deepStrictEqual ( s , s ) ) ;
827
+
828
+ // Primitives and object.
829
+ assert . throws ( ( ) => assert . deepStrictEqual ( null , { } ) , AssertionError ) ;
830
+ assert . throws ( ( ) => assert . deepStrictEqual ( undefined , { } ) , AssertionError ) ;
831
+ assert . throws ( ( ) => assert . deepStrictEqual ( 'a' , [ 'a' ] ) , AssertionError ) ;
832
+ assert . throws ( ( ) => assert . deepStrictEqual ( 'a' , { 0 : 'a' } ) , AssertionError ) ;
833
+ assert . throws ( ( ) => assert . deepStrictEqual ( 1 , { } ) , AssertionError ) ;
834
+ assert . throws ( ( ) => assert . deepStrictEqual ( true , { } ) , AssertionError ) ;
835
+ assert . throws ( ( ) => assert . deepStrictEqual ( Symbol ( ) , { } ) , AssertionError ) ;
836
+
837
+ // Primitive wrappers and object.
838
+ assert . throws ( ( ) => assert . deepStrictEqual ( new String ( 'a' ) , [ 'a' ] ) ,
839
+ AssertionError ) ;
840
+ assert . throws ( ( ) => assert . deepStrictEqual ( new String ( 'a' ) , { 0 : 'a' } ) ,
841
+ AssertionError ) ;
842
+ assert . throws ( ( ) => assert . deepStrictEqual ( new Number ( 1 ) , { } ) , AssertionError ) ;
843
+ assert . throws ( ( ) => assert . deepStrictEqual ( new Boolean ( true ) , { } ) ,
844
+ AssertionError ) ;
0 commit comments