@@ -4206,6 +4206,115 @@ describe('$compile', function() {
4206
4206
} ) ;
4207
4207
4208
4208
} ) ;
4209
+
4210
+
4211
+ describe ( 'nested transcludes' , function ( ) {
4212
+
4213
+ beforeEach ( module ( function ( $compileProvider ) {
4214
+
4215
+ $compileProvider . directive ( 'noop' , valueFn ( { } ) ) ;
4216
+
4217
+ $compileProvider . directive ( 'sync' , valueFn ( {
4218
+ template : '<div ng-transclude></div>' ,
4219
+ transclude : true
4220
+ } ) ) ;
4221
+
4222
+ $compileProvider . directive ( 'async' , valueFn ( {
4223
+ templateUrl : 'async' ,
4224
+ transclude : true
4225
+ } ) ) ;
4226
+
4227
+ $compileProvider . directive ( 'syncSync' , valueFn ( {
4228
+ template : '<div noop><div sync><div ng-transclude></div></div></div>' ,
4229
+ transclude : true
4230
+ } ) ) ;
4231
+
4232
+ $compileProvider . directive ( 'syncAsync' , valueFn ( {
4233
+ template : '<div noop><div async><div ng-transclude></div></div></div>' ,
4234
+ transclude : true
4235
+ } ) ) ;
4236
+
4237
+ $compileProvider . directive ( 'asyncSync' , valueFn ( {
4238
+ templateUrl : 'asyncSync' ,
4239
+ transclude : true
4240
+ } ) ) ;
4241
+
4242
+ $compileProvider . directive ( 'asyncAsync' , valueFn ( {
4243
+ templateUrl : 'asyncAsync' ,
4244
+ transclude : true
4245
+ } ) ) ;
4246
+
4247
+ } ) ) ;
4248
+
4249
+ beforeEach ( inject ( function ( $templateCache ) {
4250
+ $templateCache . put ( 'async' , '<div ng-transclude></div>' ) ;
4251
+ $templateCache . put ( 'asyncSync' , '<div noop><div sync><div ng-transclude></div></div></div>' ) ;
4252
+ $templateCache . put ( 'asyncAsync' , '<div noop><div async><div ng-transclude></div></div></div>' ) ;
4253
+ } ) ) ;
4254
+
4255
+
4256
+ it ( 'should allow nested transclude directives with sync template containing sync template' , inject ( function ( $compile , $rootScope ) {
4257
+ element = $compile ( '<div sync-sync>transcluded content</div>' ) ( $rootScope ) ;
4258
+ $rootScope . $digest ( ) ;
4259
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4260
+ } ) ) ;
4261
+
4262
+ it ( 'should allow nested transclude directives with sync template containing async template' , inject ( function ( $compile , $rootScope ) {
4263
+ element = $compile ( '<div sync-async>transcluded content</div>' ) ( $rootScope ) ;
4264
+ $rootScope . $digest ( ) ;
4265
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4266
+ } ) ) ;
4267
+
4268
+ it ( 'should allow nested transclude directives with async template containing sync template' , inject ( function ( $compile , $rootScope ) {
4269
+ element = $compile ( '<div async-sync>transcluded content</div>' ) ( $rootScope ) ;
4270
+ $rootScope . $digest ( ) ;
4271
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4272
+ } ) ) ;
4273
+
4274
+ it ( 'should allow nested transclude directives with async template containing asynch template' , inject ( function ( $compile , $rootScope ) {
4275
+ element = $compile ( '<div async-async>transcluded content</div>' ) ( $rootScope ) ;
4276
+ $rootScope . $digest ( ) ;
4277
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4278
+ } ) ) ;
4279
+ } ) ;
4280
+
4281
+
4282
+ describe ( 'multiple siblings receiving transclusion' , function ( ) {
4283
+
4284
+ it ( "should only receive transclude from parent" , function ( ) {
4285
+
4286
+ module ( function ( $compileProvider ) {
4287
+
4288
+ $compileProvider . directive ( 'myExample' , valueFn ( {
4289
+ scope : { } ,
4290
+ link : function link ( scope , element , attrs ) {
4291
+ var foo = element [ 0 ] . querySelector ( '.foo' ) ;
4292
+ scope . children = angular . element ( foo ) . children ( ) . length ;
4293
+ } ,
4294
+ template : '<div>' +
4295
+ '<div>myExample {{children}}!</div>' +
4296
+ '<div ng-if="children">has children</div>' +
4297
+ '<div class="foo" ng-transclude></div>' +
4298
+ '</div>' ,
4299
+ transclude : true
4300
+
4301
+ } ) ) ;
4302
+
4303
+ } ) ;
4304
+
4305
+ inject ( function ( $compile , $rootScope ) {
4306
+ var element = $compile ( '<div my-example></div>' ) ( $rootScope ) ;
4307
+ $rootScope . $digest ( ) ;
4308
+ expect ( element . text ( ) ) . toEqual ( 'myExample 0!' ) ;
4309
+ dealoc ( element ) ;
4310
+
4311
+ element = $compile ( '<div my-example><p></p></div>' ) ( $rootScope ) ;
4312
+ $rootScope . $digest ( ) ;
4313
+ expect ( element . text ( ) ) . toEqual ( 'myExample 1!has children' ) ;
4314
+ dealoc ( element ) ;
4315
+ } ) ;
4316
+ } ) ;
4317
+ } ) ;
4209
4318
} ) ;
4210
4319
4211
4320
0 commit comments