@@ -3982,6 +3982,115 @@ describe('$compile', function() {
3982
3982
} ) ;
3983
3983
3984
3984
} ) ;
3985
+
3986
+
3987
+ describe ( 'nested transcludes' , function ( ) {
3988
+
3989
+ beforeEach ( module ( function ( $compileProvider ) {
3990
+
3991
+ $compileProvider . directive ( 'noop' , valueFn ( { } ) ) ;
3992
+
3993
+ $compileProvider . directive ( 'sync' , valueFn ( {
3994
+ template : '<div ng-transclude></div>' ,
3995
+ transclude : true
3996
+ } ) ) ;
3997
+
3998
+ $compileProvider . directive ( 'async' , valueFn ( {
3999
+ templateUrl : 'async' ,
4000
+ transclude : true
4001
+ } ) ) ;
4002
+
4003
+ $compileProvider . directive ( 'syncSync' , valueFn ( {
4004
+ template : '<div noop><div sync><div ng-transclude></div></div></div>' ,
4005
+ transclude : true
4006
+ } ) ) ;
4007
+
4008
+ $compileProvider . directive ( 'syncAsync' , valueFn ( {
4009
+ template : '<div noop><div async><div ng-transclude></div></div></div>' ,
4010
+ transclude : true
4011
+ } ) ) ;
4012
+
4013
+ $compileProvider . directive ( 'asyncSync' , valueFn ( {
4014
+ templateUrl : 'asyncSync' ,
4015
+ transclude : true
4016
+ } ) ) ;
4017
+
4018
+ $compileProvider . directive ( 'asyncAsync' , valueFn ( {
4019
+ templateUrl : 'asyncAsync' ,
4020
+ transclude : true
4021
+ } ) ) ;
4022
+
4023
+ } ) ) ;
4024
+
4025
+ beforeEach ( inject ( function ( $templateCache ) {
4026
+ $templateCache . put ( 'async' , '<div ng-transclude></div>' ) ;
4027
+ $templateCache . put ( 'asyncSync' , '<div noop><div sync><div ng-transclude></div></div></div>' ) ;
4028
+ $templateCache . put ( 'asyncAsync' , '<div noop><div async><div ng-transclude></div></div></div>' ) ;
4029
+ } ) ) ;
4030
+
4031
+
4032
+ it ( 'should allow nested transclude directives with sync template containing sync template' , inject ( function ( $compile , $rootScope ) {
4033
+ element = $compile ( '<div sync-sync>transcluded content</div>' ) ( $rootScope ) ;
4034
+ $rootScope . $digest ( ) ;
4035
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4036
+ } ) ) ;
4037
+
4038
+ it ( 'should allow nested transclude directives with sync template containing async template' , inject ( function ( $compile , $rootScope ) {
4039
+ element = $compile ( '<div sync-async>transcluded content</div>' ) ( $rootScope ) ;
4040
+ $rootScope . $digest ( ) ;
4041
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4042
+ } ) ) ;
4043
+
4044
+ it ( 'should allow nested transclude directives with async template containing sync template' , inject ( function ( $compile , $rootScope ) {
4045
+ element = $compile ( '<div async-sync>transcluded content</div>' ) ( $rootScope ) ;
4046
+ $rootScope . $digest ( ) ;
4047
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4048
+ } ) ) ;
4049
+
4050
+ it ( 'should allow nested transclude directives with async template containing asynch template' , inject ( function ( $compile , $rootScope ) {
4051
+ element = $compile ( '<div async-async>transcluded content</div>' ) ( $rootScope ) ;
4052
+ $rootScope . $digest ( ) ;
4053
+ expect ( element . text ( ) ) . toEqual ( 'transcluded content' ) ;
4054
+ } ) ) ;
4055
+ } ) ;
4056
+
4057
+
4058
+ describe ( 'multiple siblings receiving transclusion' , function ( ) {
4059
+
4060
+ it ( "should only receive transclude from parent" , function ( ) {
4061
+
4062
+ module ( function ( $compileProvider ) {
4063
+
4064
+ $compileProvider . directive ( 'myExample' , valueFn ( {
4065
+ scope : { } ,
4066
+ link : function link ( scope , element , attrs ) {
4067
+ var foo = element [ 0 ] . querySelector ( '.foo' ) ;
4068
+ scope . children = angular . element ( foo ) . children ( ) . length ;
4069
+ } ,
4070
+ template : '<div>' +
4071
+ '<div>myExample {{children}}!</div>' +
4072
+ '<div ng-if="children">has children</div>' +
4073
+ '<div class="foo" ng-transclude></div>' +
4074
+ '</div>' ,
4075
+ transclude : true
4076
+
4077
+ } ) ) ;
4078
+
4079
+ } ) ;
4080
+
4081
+ inject ( function ( $compile , $rootScope ) {
4082
+ var element = $compile ( '<div my-example></div>' ) ( $rootScope ) ;
4083
+ $rootScope . $digest ( ) ;
4084
+ expect ( element . text ( ) ) . toEqual ( 'myExample 0!' ) ;
4085
+ dealoc ( element ) ;
4086
+
4087
+ element = $compile ( '<div my-example><p></p></div>' ) ( $rootScope ) ;
4088
+ $rootScope . $digest ( ) ;
4089
+ expect ( element . text ( ) ) . toEqual ( 'myExample 1!has children' ) ;
4090
+ dealoc ( element ) ;
4091
+ } ) ;
4092
+ } ) ;
4093
+ } ) ;
3985
4094
} ) ;
3986
4095
3987
4096
0 commit comments