@@ -845,6 +845,86 @@ describe('parser', function() {
845
845
scope . $digest ( ) ;
846
846
expect ( scope . $eval ( 'greeting' ) ) . toBe ( undefined ) ;
847
847
} ) ;
848
+
849
+
850
+ describe ( 'assignment into promises' , function ( ) {
851
+ // This behavior is analogous to assignments to non-promise values
852
+ // that are lazily set on the scope.
853
+ it ( 'should evaluate a resolved object promise and set its value' , inject ( function ( $parse ) {
854
+ scope . person = promise ;
855
+ deferred . resolve ( { 'name' : 'Bill Gates' } ) ;
856
+
857
+ var getter = $parse ( 'person.name' ) ;
858
+ expect ( getter ( scope ) ) . toBe ( undefined ) ;
859
+
860
+ scope . $digest ( ) ;
861
+ expect ( getter ( scope ) ) . toBe ( 'Bill Gates' ) ;
862
+ getter . assign ( scope , 'Warren Buffet' ) ;
863
+ expect ( getter ( scope ) ) . toBe ( 'Warren Buffet' ) ;
864
+ } ) ) ;
865
+
866
+
867
+ it ( 'should evaluate a resolved primitive type promise and set its value' , inject ( function ( $parse ) {
868
+ scope . greeting = promise ;
869
+ deferred . resolve ( 'Salut!' ) ;
870
+
871
+ var getter = $parse ( 'greeting' ) ;
872
+ expect ( getter ( scope ) ) . toBe ( undefined ) ;
873
+
874
+ scope . $digest ( ) ;
875
+ expect ( getter ( scope ) ) . toBe ( 'Salut!' ) ;
876
+
877
+ getter . assign ( scope , 'Bonjour' ) ;
878
+ expect ( getter ( scope ) ) . toBe ( 'Bonjour' ) ;
879
+ } ) ) ;
880
+
881
+
882
+ it ( 'should evaluate an unresolved promise and set and remember its value' , inject ( function ( $parse ) {
883
+ scope . person = promise ;
884
+
885
+ var getter = $parse ( 'person.name' ) ;
886
+ expect ( getter ( scope ) ) . toBe ( undefined ) ;
887
+
888
+ scope . $digest ( ) ;
889
+ expect ( getter ( scope ) ) . toBe ( undefined ) ;
890
+
891
+ getter . assign ( scope , 'Bonjour' ) ;
892
+ scope . $digest ( ) ;
893
+
894
+ expect ( getter ( scope ) ) . toBe ( 'Bonjour' ) ;
895
+
896
+ var c1Getter = $parse ( 'person.A.B.C1' ) ;
897
+ scope . $digest ( ) ;
898
+ expect ( c1Getter ( scope ) ) . toBe ( undefined ) ;
899
+ c1Getter . assign ( scope , 'c1_value' ) ;
900
+ scope . $digest ( ) ;
901
+ expect ( c1Getter ( scope ) ) . toBe ( 'c1_value' ) ;
902
+
903
+ // Set another property on the person.A.B
904
+ var c2Getter = $parse ( 'person.A.B.C2' ) ;
905
+ scope . $digest ( ) ;
906
+ expect ( c2Getter ( scope ) ) . toBe ( undefined ) ;
907
+ c2Getter . assign ( scope , 'c2_value' ) ;
908
+ scope . $digest ( ) ;
909
+ expect ( c2Getter ( scope ) ) . toBe ( 'c2_value' ) ;
910
+
911
+ // c1 should be unchanged.
912
+ expect ( $parse ( 'person.A' ) ( scope ) ) . toEqual (
913
+ { B : { C1 : 'c1_value' , C2 : 'c2_value' } } ) ;
914
+ } ) ) ;
915
+
916
+
917
+ it ( 'should evaluate a resolved promise and overwrite the previous set value in the absense of the getter' ,
918
+ inject ( function ( $parse ) {
919
+ scope . person = promise ;
920
+ var c1Getter = $parse ( 'person.A.B.C1' ) ;
921
+ c1Getter . assign ( scope , 'c1_value' ) ;
922
+ // resolving the promise should update the tree.
923
+ deferred . resolve ( { A : { B : { C1 : 'resolved_c1' } } } ) ;
924
+ scope . $digest ( ) ;
925
+ expect ( c1Getter ( scope ) ) . toEqual ( 'resolved_c1' ) ;
926
+ } ) ) ;
927
+ } ) ;
848
928
} ) ;
849
929
850
930
describe ( 'dereferencing' , function ( ) {
0 commit comments