@@ -49,6 +49,48 @@ describe('ngProp*', function() {
49
49
expect ( element . prop ( 'asdf' ) ) . toBe ( true ) ;
50
50
} ) ) ;
51
51
52
+ // https://github.com/angular/angular.js/issues/16797
53
+ it ( 'should support falsy property values' , inject ( function ( $rootScope , $compile ) {
54
+ var element = $compile ( '<span ng-prop-text="myText" />' ) ( $rootScope ) ;
55
+ // Initialize to truthy value
56
+ $rootScope . myText = 'abc' ;
57
+ $rootScope . $digest ( ) ;
58
+ expect ( element . prop ( 'text' ) ) . toBe ( 'abc' ) ;
59
+
60
+ // Assert various falsey values get assigned to the property
61
+ $rootScope . myText = '' ;
62
+ $rootScope . $digest ( ) ;
63
+ expect ( element . prop ( 'text' ) ) . toBe ( '' ) ;
64
+ $rootScope . myText = 0 ;
65
+ $rootScope . $digest ( ) ;
66
+ expect ( element . prop ( 'text' ) ) . toBe ( 0 ) ;
67
+ $rootScope . myText = false ;
68
+ $rootScope . $digest ( ) ;
69
+ expect ( element . prop ( 'text' ) ) . toBe ( false ) ;
70
+ $rootScope . myText = undefined ;
71
+ $rootScope . $digest ( ) ;
72
+ expect ( element . prop ( 'text' ) ) . toBeUndefined ( ) ;
73
+ $rootScope . myText = null ;
74
+ $rootScope . $digest ( ) ;
75
+ expect ( element . prop ( 'text' ) ) . toBe ( null ) ;
76
+ } ) ) ;
77
+
78
+ it ( 'should directly map special properties (class)' , inject ( function ( $rootScope , $compile ) {
79
+ var element = $compile ( '<span ng-prop-class="myText" />' ) ( $rootScope ) ;
80
+ $rootScope . myText = 'abc' ;
81
+ $rootScope . $digest ( ) ;
82
+ expect ( element [ 0 ] . class ) . toBe ( 'abc' ) ;
83
+ expect ( element ) . not . toHaveClass ( 'abc' ) ;
84
+ } ) ) ;
85
+
86
+ it ( 'should not use jQuery .prop() to avoid jQuery propFix/hooks' , inject ( function ( $rootScope , $compile ) {
87
+ var element = $compile ( '<span ng-prop-class="myText" />' ) ( $rootScope ) ;
88
+ spyOn ( jqLite . prototype , 'prop' ) ;
89
+ $rootScope . myText = 'abc' ;
90
+ $rootScope . $digest ( ) ;
91
+ expect ( jqLite . prototype . prop ) . not . toHaveBeenCalled ( ) ;
92
+ } ) ) ;
93
+
52
94
it ( 'should support mixed case using underscore-separated names' , inject ( function ( $rootScope , $compile ) {
53
95
var element = $compile ( '<span ng-prop-a_bcd_e="value" />' ) ( $rootScope ) ;
54
96
$rootScope . value = 123 ;
0 commit comments