@@ -541,17 +541,52 @@ describe('Database Functions', () => {
541
541
expect ( subject . val ( ) ) . to . equal ( 0 ) ;
542
542
populate ( { myKey : 0 } ) ;
543
543
expect ( subject . val ( ) ) . to . deep . equal ( { myKey : 0 } ) ;
544
-
545
- // Null values are still reported as null.
546
- populate ( { myKey : null } ) ;
547
- expect ( subject . val ( ) ) . to . deep . equal ( { myKey : null } ) ;
548
544
} ) ;
549
545
550
546
// Regression test: .val() was returning array of nulls when there's a property called length (BUG#37683995)
551
547
it ( 'should return correct values when data has "length" property' , ( ) => {
552
548
populate ( { length : 3 , foo : 'bar' } ) ;
553
549
expect ( subject . val ( ) ) . to . deep . equal ( { length : 3 , foo : 'bar' } ) ;
554
550
} ) ;
551
+
552
+ it ( 'should deal with null-values appropriately' , ( ) => {
553
+ populate ( null ) ;
554
+ expect ( subject . val ( ) ) . to . be . null ;
555
+
556
+ populate ( { myKey : null } ) ;
557
+ expect ( subject . val ( ) ) . to . be . null ;
558
+ } ) ;
559
+
560
+ it ( 'should deal with empty object values appropriately' , ( ) => {
561
+ populate ( { } ) ;
562
+ expect ( subject . val ( ) ) . to . be . null ;
563
+
564
+ populate ( { myKey : { } } ) ;
565
+ expect ( subject . val ( ) ) . to . be . null ;
566
+
567
+ populate ( { myKey : { child : null } } ) ;
568
+ expect ( subject . val ( ) ) . to . be . null ;
569
+ } ) ;
570
+
571
+ it ( 'should deal with empty array values appropriately' , ( ) => {
572
+ populate ( [ ] ) ;
573
+ expect ( subject . val ( ) ) . to . be . null ;
574
+
575
+ populate ( { myKey : [ ] } ) ;
576
+ expect ( subject . val ( ) ) . to . be . null ;
577
+
578
+ populate ( { myKey : [ null ] } ) ;
579
+ expect ( subject . val ( ) ) . to . be . null ;
580
+
581
+ populate ( { myKey : [ { } ] } ) ;
582
+ expect ( subject . val ( ) ) . to . be . null ;
583
+
584
+ populate ( { myKey : [ { myKey : null } ] } ) ;
585
+ expect ( subject . val ( ) ) . to . be . null ;
586
+
587
+ populate ( { myKey : [ { myKey : { } } ] } ) ;
588
+ expect ( subject . val ( ) ) . to . be . null ;
589
+ } ) ;
555
590
} ) ;
556
591
557
592
describe ( '#child(): DataSnapshot' , ( ) => {
@@ -578,14 +613,37 @@ describe('Database Functions', () => {
578
613
} ) ;
579
614
580
615
it ( 'should be false for a non-existent value' , ( ) => {
581
- populate ( { a : { b : 'c' } } ) ;
616
+ populate ( { a : { b : 'c' , nullChild : null } } ) ;
582
617
expect ( subject . child ( 'd' ) . exists ( ) ) . to . be . false ;
618
+ expect ( subject . child ( 'nullChild' ) . exists ( ) ) . to . be . false ;
583
619
} ) ;
584
620
585
621
it ( 'should be false for a value pathed beyond a leaf' , ( ) => {
586
622
populate ( { a : { b : 'c' } } ) ;
587
623
expect ( subject . child ( 'a/b/c' ) . exists ( ) ) . to . be . false ;
588
624
} ) ;
625
+
626
+ it ( 'should be false for an empty object value' , ( ) => {
627
+ populate ( { a : { } } ) ;
628
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
629
+
630
+ populate ( { a : { child : null } } ) ;
631
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
632
+
633
+ populate ( { a : { child : { } } } ) ;
634
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
635
+ } ) ;
636
+
637
+ it ( 'should be false for an empty array value' , ( ) => {
638
+ populate ( { a : [ ] } ) ;
639
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
640
+
641
+ populate ( { a : [ null ] } ) ;
642
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
643
+
644
+ populate ( { a : [ { } ] } ) ;
645
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
646
+ } ) ;
589
647
} ) ;
590
648
591
649
describe ( '#forEach(action: (a: DataSnapshot) => boolean): boolean' , ( ) => {
@@ -614,6 +672,17 @@ describe('Database Functions', () => {
614
672
615
673
expect ( subject . forEach ( counter ) ) . to . equal ( false ) ;
616
674
expect ( count ) . to . eq ( 0 ) ;
675
+
676
+ populate ( {
677
+ a : 'foo' ,
678
+ nullChild : null ,
679
+ emptyObjectChild : { } ,
680
+ emptyArrayChild : [ ] ,
681
+ } ) ;
682
+ count = 0 ;
683
+
684
+ expect ( subject . forEach ( counter ) ) . to . equal ( false ) ;
685
+ expect ( count ) . to . eq ( 1 ) ;
617
686
} ) ;
618
687
619
688
it ( 'should cancel further enumeration if callback returns true' , ( ) => {
@@ -653,13 +722,51 @@ describe('Database Functions', () => {
653
722
654
723
describe ( '#numChildren()' , ( ) => {
655
724
it ( 'should be key count for objects' , ( ) => {
656
- populate ( { a : 'b' , c : 'd' } ) ;
725
+ populate ( {
726
+ a : 'b' ,
727
+ c : 'd' ,
728
+ nullChild : null ,
729
+ emptyObjectChild : { } ,
730
+ emptyArrayChild : [ ] ,
731
+ } ) ;
657
732
expect ( subject . numChildren ( ) ) . to . eq ( 2 ) ;
658
733
} ) ;
659
734
660
735
it ( 'should be 0 for non-objects' , ( ) => {
661
736
populate ( 23 ) ;
662
737
expect ( subject . numChildren ( ) ) . to . eq ( 0 ) ;
738
+
739
+ populate ( {
740
+ nullChild : null ,
741
+ emptyObjectChild : { } ,
742
+ emptyArrayChild : [ ] ,
743
+ } ) ;
744
+ expect ( subject . numChildren ( ) ) . to . eq ( 0 ) ;
745
+ } ) ;
746
+ } ) ;
747
+
748
+ describe ( '#hasChildren()' , ( ) => {
749
+ it ( 'should true for objects' , ( ) => {
750
+ populate ( {
751
+ a : 'b' ,
752
+ c : 'd' ,
753
+ nullChild : null ,
754
+ emptyObjectChild : { } ,
755
+ emptyArrayChild : [ ] ,
756
+ } ) ;
757
+ expect ( subject . hasChildren ( ) ) . to . be . true ;
758
+ } ) ;
759
+
760
+ it ( 'should be false for non-objects' , ( ) => {
761
+ populate ( 23 ) ;
762
+ expect ( subject . hasChildren ( ) ) . to . be . false ;
763
+
764
+ populate ( {
765
+ nullChild : null ,
766
+ emptyObjectChild : { } ,
767
+ emptyArrayChild : [ ] ,
768
+ } ) ;
769
+ expect ( subject . hasChildren ( ) ) . to . be . false ;
663
770
} ) ;
664
771
} ) ;
665
772
@@ -671,9 +778,17 @@ describe('Database Functions', () => {
671
778
} ) ;
672
779
673
780
it ( 'should return false if a child is missing' , ( ) => {
674
- populate ( { a : 'b' } ) ;
781
+ populate ( {
782
+ a : 'b' ,
783
+ nullChild : null ,
784
+ emptyObjectChild : { } ,
785
+ emptyArrayChild : [ ] ,
786
+ } ) ;
675
787
expect ( subject . hasChild ( 'c' ) ) . to . be . false ;
676
788
expect ( subject . hasChild ( 'a/b' ) ) . to . be . false ;
789
+ expect ( subject . hasChild ( 'nullChild' ) ) . to . be . false ;
790
+ expect ( subject . hasChild ( 'emptyObjectChild' ) ) . to . be . false ;
791
+ expect ( subject . hasChild ( 'emptyArrayChild' ) ) . to . be . false ;
677
792
} ) ;
678
793
} ) ;
679
794
@@ -703,11 +818,21 @@ describe('Database Functions', () => {
703
818
704
819
describe ( '#toJSON(): Object' , ( ) => {
705
820
it ( 'should return the current value' , ( ) => {
706
- populate ( { a : 'b' } ) ;
821
+ populate ( {
822
+ a : 'b' ,
823
+ nullChild : null ,
824
+ emptyObjectChild : { } ,
825
+ emptyArrayChild : [ ] ,
826
+ } ) ;
707
827
expect ( subject . toJSON ( ) ) . to . deep . equal ( subject . val ( ) ) ;
708
828
} ) ;
709
829
it ( 'should be stringifyable' , ( ) => {
710
- populate ( { a : 'b' } ) ;
830
+ populate ( {
831
+ a : 'b' ,
832
+ nullChild : null ,
833
+ emptyObjectChild : { } ,
834
+ emptyArrayChild : [ ] ,
835
+ } ) ;
711
836
expect ( JSON . stringify ( subject ) ) . to . deep . equal ( '{"a":"b"}' ) ;
712
837
} ) ;
713
838
} ) ;
0 commit comments