@@ -4112,6 +4112,115 @@ describe('$compile', function() {
4112
4112
} ) ;
4113
4113
4114
4114
} ) ;
4115
+
4116
+
4117
+ describe ( 'nested transcludes' , function ( ) {
4118
+
4119
+ beforeEach ( module ( function ( $compileProvider ) {
4120
+
4121
+ $compileProvider . directive ( 'noop' , valueFn ( { } ) ) ;
4122
+
4123
+ $compileProvider . directive ( 'sync' , valueFn ( {
4124
+ template : '<div ng-transclude></div>' ,
4125
+ transclude : true
4126
+ } ) ) ;
4127
+
4128
+ $compileProvider . directive ( 'async' , valueFn ( {
4129
+ templateUrl : 'async' ,
4130
+ transclude : true
4131
+ } ) ) ;
4132
+
4133
+ $compileProvider . directive ( 'syncSync' , valueFn ( {
4134
+ template : '<div noop><div sync><div ng-transclude></div></div></div>' ,
4135
+ transclude : true
4136
+ } ) ) ;
4137
+
4138
+ $compileProvider . directive ( 'syncAsync' , valueFn ( {
4139
+ template : '<div noop><div async><div ng-transclude></div></div></div>' ,
4140
+ transclude : true
4141
+ } ) ) ;
4142
+
4143
+ $compileProvider . directive ( 'asyncSync' , valueFn ( {
4144
+ templateUrl : 'asyncSync' ,
4145
+ transclude : true
4146
+ } ) ) ;
4147
+
4148
+ $compileProvider . directive ( 'asyncAsync' , valueFn ( {
4149
+ templateUrl : 'asyncAsync' ,
4150
+ transclude : true
4151
+ } ) ) ;
4152
+
4153
+ } ) ) ;
4154
+
4155
+ beforeEach ( inject ( function ( $templateCache ) {
4156
+ $templateCache . put ( 'async' , '<div ng-transclude></div>' ) ;
4157
+ $templateCache . put ( 'asyncSync' , '<div noop><div sync><div ng-transclude></div></div></div>' ) ;
4158
+ $templateCache . put ( 'asyncAsync' , '<div noop><div async><div ng-transclude></div></div></div>' ) ;
4159
+ } ) ) ;
4160
+
4161
+
4162
+ it ( 'should allow nested transclude directives with sync template containing sync template' , inject ( function ( $compile , $rootScope ) {
4163
+ element = $compile ( '<div sync-sync>transcluded content</div>' ) ( $rootScope ) ;
4164
+ $rootScope . $digest ( ) ;
4165
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4166
+ } ) ) ;
4167
+
4168
+ it ( 'should allow nested transclude directives with sync template containing async template' , inject ( function ( $compile , $rootScope ) {
4169
+ element = $compile ( '<div sync-async>transcluded content</div>' ) ( $rootScope ) ;
4170
+ $rootScope . $digest ( ) ;
4171
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4172
+ } ) ) ;
4173
+
4174
+ it ( 'should allow nested transclude directives with async template containing sync template' , inject ( function ( $compile , $rootScope ) {
4175
+ element = $compile ( '<div async-sync>transcluded content</div>' ) ( $rootScope ) ;
4176
+ $rootScope . $digest ( ) ;
4177
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4178
+ } ) ) ;
4179
+
4180
+ it ( 'should allow nested transclude directives with async template containing asynch template' , inject ( function ( $compile , $rootScope ) {
4181
+ element = $compile ( '<div async-async>transcluded content</div>' ) ( $rootScope ) ;
4182
+ $rootScope . $digest ( ) ;
4183
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4184
+ } ) ) ;
4185
+ } ) ;
4186
+
4187
+
4188
+ describe ( 'multiple siblings receiving transclusion' , function ( ) {
4189
+
4190
+ it ( "should only receive transclude from parent" , function ( ) {
4191
+
4192
+ module ( function ( $compileProvider ) {
4193
+
4194
+ $compileProvider . directive ( 'myExample' , valueFn ( {
4195
+ scope : { } ,
4196
+ link : function link ( scope , element , attrs ) {
4197
+ var foo = element [ 0 ] . querySelector ( '.foo' ) ;
4198
+ scope . children = angular . element ( foo ) . children ( ) . length ;
4199
+ } ,
4200
+ template : '<div>' +
4201
+ '<div>myExample {{children}}!</div>' +
4202
+ '<div ng-if="children">has children</div>' +
4203
+ '<div class="foo" ng-transclude></div>' +
4204
+ '</div>' ,
4205
+ transclude : true
4206
+
4207
+ } ) ) ;
4208
+
4209
+ } ) ;
4210
+
4211
+ inject ( function ( $compile , $rootScope ) {
4212
+ var element = $compile ( '<div my-example></div>' ) ( $rootScope ) ;
4213
+ $rootScope . $digest ( ) ;
4214
+ expect ( element . text ( ) ) . toEqual ( 'myExample 0!' ) ;
4215
+ dealoc ( element ) ;
4216
+
4217
+ element = $compile ( '<div my-example><p></p></div>' ) ( $rootScope ) ;
4218
+ $rootScope . $digest ( ) ;
4219
+ expect ( element . text ( ) ) . toEqual ( 'myExample 1!has children' ) ;
4220
+ dealoc ( element ) ;
4221
+ } ) ;
4222
+ } ) ;
4223
+ } ) ;
4115
4224
} ) ;
4116
4225
4117
4226
0 commit comments