@@ -639,17 +639,52 @@ describe('Database Functions', () => {
639
639
expect ( subject . val ( ) ) . to . equal ( 0 ) ;
640
640
populate ( { myKey : 0 } ) ;
641
641
expect ( subject . val ( ) ) . to . deep . equal ( { myKey : 0 } ) ;
642
-
643
- // Null values are still reported as null.
644
- populate ( { myKey : null } ) ;
645
- expect ( subject . val ( ) ) . to . deep . equal ( { myKey : null } ) ;
646
642
} ) ;
647
643
648
644
// Regression test: .val() was returning array of nulls when there's a property called length (BUG#37683995)
649
645
it ( 'should return correct values when data has "length" property' , ( ) => {
650
646
populate ( { length : 3 , foo : 'bar' } ) ;
651
647
expect ( subject . val ( ) ) . to . deep . equal ( { length : 3 , foo : 'bar' } ) ;
652
648
} ) ;
649
+
650
+ it ( 'should deal with null-values appropriately' , ( ) => {
651
+ populate ( null ) ;
652
+ expect ( subject . val ( ) ) . to . be . null ;
653
+
654
+ populate ( { myKey : null } ) ;
655
+ expect ( subject . val ( ) ) . to . be . null ;
656
+ } ) ;
657
+
658
+ it ( 'should deal with empty object values appropriately' , ( ) => {
659
+ populate ( { } ) ;
660
+ expect ( subject . val ( ) ) . to . be . null ;
661
+
662
+ populate ( { myKey : { } } ) ;
663
+ expect ( subject . val ( ) ) . to . be . null ;
664
+
665
+ populate ( { myKey : { child : null } } ) ;
666
+ expect ( subject . val ( ) ) . to . be . null ;
667
+ } ) ;
668
+
669
+ it ( 'should deal with empty array values appropriately' , ( ) => {
670
+ populate ( [ ] ) ;
671
+ expect ( subject . val ( ) ) . to . be . null ;
672
+
673
+ populate ( { myKey : [ ] } ) ;
674
+ expect ( subject . val ( ) ) . to . be . null ;
675
+
676
+ populate ( { myKey : [ null ] } ) ;
677
+ expect ( subject . val ( ) ) . to . be . null ;
678
+
679
+ populate ( { myKey : [ { } ] } ) ;
680
+ expect ( subject . val ( ) ) . to . be . null ;
681
+
682
+ populate ( { myKey : [ { myKey : null } ] } ) ;
683
+ expect ( subject . val ( ) ) . to . be . null ;
684
+
685
+ populate ( { myKey : [ { myKey : { } } ] } ) ;
686
+ expect ( subject . val ( ) ) . to . be . null ;
687
+ } ) ;
653
688
} ) ;
654
689
655
690
describe ( '#child(): DataSnapshot' , ( ) => {
@@ -676,14 +711,37 @@ describe('Database Functions', () => {
676
711
} ) ;
677
712
678
713
it ( 'should be false for a non-existent value' , ( ) => {
679
- populate ( { a : { b : 'c' } } ) ;
714
+ populate ( { a : { b : 'c' , nullChild : null } } ) ;
680
715
expect ( subject . child ( 'd' ) . exists ( ) ) . to . be . false ;
716
+ expect ( subject . child ( 'nullChild' ) . exists ( ) ) . to . be . false ;
681
717
} ) ;
682
718
683
719
it ( 'should be false for a value pathed beyond a leaf' , ( ) => {
684
720
populate ( { a : { b : 'c' } } ) ;
685
721
expect ( subject . child ( 'a/b/c' ) . exists ( ) ) . to . be . false ;
686
722
} ) ;
723
+
724
+ it ( 'should be false for an empty object value' , ( ) => {
725
+ populate ( { a : { } } ) ;
726
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
727
+
728
+ populate ( { a : { child : null } } ) ;
729
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
730
+
731
+ populate ( { a : { child : { } } } ) ;
732
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
733
+ } ) ;
734
+
735
+ it ( 'should be false for an empty array value' , ( ) => {
736
+ populate ( { a : [ ] } ) ;
737
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
738
+
739
+ populate ( { a : [ null ] } ) ;
740
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
741
+
742
+ populate ( { a : [ { } ] } ) ;
743
+ expect ( subject . child ( 'a' ) . exists ( ) ) . to . be . false ;
744
+ } ) ;
687
745
} ) ;
688
746
689
747
describe ( '#forEach(action: (a: DataSnapshot) => boolean): boolean' , ( ) => {
@@ -712,6 +770,17 @@ describe('Database Functions', () => {
712
770
713
771
expect ( subject . forEach ( counter ) ) . to . equal ( false ) ;
714
772
expect ( count ) . to . eq ( 0 ) ;
773
+
774
+ populate ( {
775
+ a : 'foo' ,
776
+ nullChild : null ,
777
+ emptyObjectChild : { } ,
778
+ emptyArrayChild : [ ] ,
779
+ } ) ;
780
+ count = 0 ;
781
+
782
+ expect ( subject . forEach ( counter ) ) . to . equal ( false ) ;
783
+ expect ( count ) . to . eq ( 1 ) ;
715
784
} ) ;
716
785
717
786
it ( 'should cancel further enumeration if callback returns true' , ( ) => {
@@ -751,13 +820,51 @@ describe('Database Functions', () => {
751
820
752
821
describe ( '#numChildren()' , ( ) => {
753
822
it ( 'should be key count for objects' , ( ) => {
754
- populate ( { a : 'b' , c : 'd' } ) ;
823
+ populate ( {
824
+ a : 'b' ,
825
+ c : 'd' ,
826
+ nullChild : null ,
827
+ emptyObjectChild : { } ,
828
+ emptyArrayChild : [ ] ,
829
+ } ) ;
755
830
expect ( subject . numChildren ( ) ) . to . eq ( 2 ) ;
756
831
} ) ;
757
832
758
833
it ( 'should be 0 for non-objects' , ( ) => {
759
834
populate ( 23 ) ;
760
835
expect ( subject . numChildren ( ) ) . to . eq ( 0 ) ;
836
+
837
+ populate ( {
838
+ nullChild : null ,
839
+ emptyObjectChild : { } ,
840
+ emptyArrayChild : [ ] ,
841
+ } ) ;
842
+ expect ( subject . numChildren ( ) ) . to . eq ( 0 ) ;
843
+ } ) ;
844
+ } ) ;
845
+
846
+ describe ( '#hasChildren()' , ( ) => {
847
+ it ( 'should true for objects' , ( ) => {
848
+ populate ( {
849
+ a : 'b' ,
850
+ c : 'd' ,
851
+ nullChild : null ,
852
+ emptyObjectChild : { } ,
853
+ emptyArrayChild : [ ] ,
854
+ } ) ;
855
+ expect ( subject . hasChildren ( ) ) . to . be . true ;
856
+ } ) ;
857
+
858
+ it ( 'should be false for non-objects' , ( ) => {
859
+ populate ( 23 ) ;
860
+ expect ( subject . hasChildren ( ) ) . to . be . false ;
861
+
862
+ populate ( {
863
+ nullChild : null ,
864
+ emptyObjectChild : { } ,
865
+ emptyArrayChild : [ ] ,
866
+ } ) ;
867
+ expect ( subject . hasChildren ( ) ) . to . be . false ;
761
868
} ) ;
762
869
} ) ;
763
870
@@ -769,9 +876,17 @@ describe('Database Functions', () => {
769
876
} ) ;
770
877
771
878
it ( 'should return false if a child is missing' , ( ) => {
772
- populate ( { a : 'b' } ) ;
879
+ populate ( {
880
+ a : 'b' ,
881
+ nullChild : null ,
882
+ emptyObjectChild : { } ,
883
+ emptyArrayChild : [ ] ,
884
+ } ) ;
773
885
expect ( subject . hasChild ( 'c' ) ) . to . be . false ;
774
886
expect ( subject . hasChild ( 'a/b' ) ) . to . be . false ;
887
+ expect ( subject . hasChild ( 'nullChild' ) ) . to . be . false ;
888
+ expect ( subject . hasChild ( 'emptyObjectChild' ) ) . to . be . false ;
889
+ expect ( subject . hasChild ( 'emptyArrayChild' ) ) . to . be . false ;
775
890
} ) ;
776
891
} ) ;
777
892
@@ -801,11 +916,21 @@ describe('Database Functions', () => {
801
916
802
917
describe ( '#toJSON(): Object' , ( ) => {
803
918
it ( 'should return the current value' , ( ) => {
804
- populate ( { a : 'b' } ) ;
919
+ populate ( {
920
+ a : 'b' ,
921
+ nullChild : null ,
922
+ emptyObjectChild : { } ,
923
+ emptyArrayChild : [ ] ,
924
+ } ) ;
805
925
expect ( subject . toJSON ( ) ) . to . deep . equal ( subject . val ( ) ) ;
806
926
} ) ;
807
927
it ( 'should be stringifyable' , ( ) => {
808
- populate ( { a : 'b' } ) ;
928
+ populate ( {
929
+ a : 'b' ,
930
+ nullChild : null ,
931
+ emptyObjectChild : { } ,
932
+ emptyArrayChild : [ ] ,
933
+ } ) ;
809
934
expect ( JSON . stringify ( subject ) ) . to . deep . equal ( '{"a":"b"}' ) ;
810
935
} ) ;
811
936
} ) ;
0 commit comments