@@ -377,8 +377,7 @@ export function main() {
377377
378378 it ( 'should detach the render view' , ( ) => {
379379 manager . destroyFreeHostView ( elementRef ( wrapView ( parentHostView ) , 0 ) , wrapView ( hostView ) ) ;
380- expect ( renderer . spy ( 'detachFreeHostView' ) )
381- . toHaveBeenCalledWith ( parentView . render , hostRenderViewRef ) ;
380+ expect ( renderer . spy ( 'detachFreeView' ) ) . toHaveBeenCalledWith ( hostRenderViewRef ) ;
382381 } ) ;
383382
384383 it ( 'should return the view to the pool' , ( ) => {
@@ -402,6 +401,101 @@ export function main() {
402401
403402 } ) ;
404403
404+ describe ( 'createFreeEmbeddedView' , ( ) => {
405+
406+ // Note: We don't add tests for recursion or viewpool here as we assume that
407+ // this is using the same mechanism as the other methods...
408+
409+ describe ( 'basic functionality' , ( ) => {
410+ var parentView , childProtoView ;
411+ beforeEach ( ( ) => {
412+ parentView = createView ( createProtoView ( [ createEmptyElBinder ( ) ] ) ) ;
413+ childProtoView = createProtoView ( ) ;
414+ } ) ;
415+
416+ it ( 'should create the view' , ( ) => {
417+ expect ( internalView ( manager . createFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) ,
418+ wrapPv ( childProtoView ) , null ) ) )
419+ . toBe ( createdViews [ 0 ] ) ;
420+ expect ( createdViews [ 0 ] . proto ) . toBe ( childProtoView ) ;
421+ expect ( viewListener . spy ( 'viewCreated' ) ) . toHaveBeenCalledWith ( createdViews [ 0 ] ) ;
422+ } ) ;
423+
424+ it ( 'should attachAndHydrate the view' , ( ) => {
425+ var injector = new Injector ( [ ] , null , false ) ;
426+ manager . createFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) ,
427+ wrapPv ( childProtoView ) , injector ) ;
428+ expect ( utils . spy ( 'attachAndHydrateFreeEmbeddedView' ) )
429+ . toHaveBeenCalledWith ( parentView , 0 , createdViews [ 0 ] , injector ) ;
430+ expect ( renderer . spy ( 'hydrateView' ) ) . toHaveBeenCalledWith ( createdViews [ 0 ] . render ) ;
431+ } ) ;
432+
433+ it ( 'should create and set the render view' , ( ) => {
434+ manager . createFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) ,
435+ wrapPv ( childProtoView ) , null ) ;
436+ expect ( renderer . spy ( 'createView' ) ) . toHaveBeenCalledWith ( childProtoView . render ) ;
437+ expect ( createdViews [ 0 ] . render ) . toBe ( createdRenderViews [ 0 ] ) ;
438+ } ) ;
439+
440+ it ( 'should set the event dispatcher' , ( ) => {
441+ manager . createFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) ,
442+ wrapPv ( childProtoView ) , null ) ;
443+ var cmpView = createdViews [ 0 ] ;
444+ expect ( renderer . spy ( 'setEventDispatcher' ) ) . toHaveBeenCalledWith ( cmpView . render , cmpView ) ;
445+ } ) ;
446+ } ) ;
447+
448+ } ) ;
449+
450+
451+ describe ( 'destroyFreeEmbeddedView' , ( ) => {
452+ describe ( 'basic functionality' , ( ) => {
453+ var parentView , childProtoView , childView ;
454+ beforeEach ( ( ) => {
455+ parentView = createView ( createProtoView ( [ createEmptyElBinder ( ) ] ) ) ;
456+ childProtoView = createProtoView ( ) ;
457+ childView = internalView ( manager . createFreeEmbeddedView (
458+ elementRef ( wrapView ( parentView ) , 0 ) , wrapPv ( childProtoView ) , null ) ) ;
459+ } ) ;
460+
461+ it ( 'should detach' , ( ) => {
462+ manager . destroyFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) , wrapView ( childView ) ) ;
463+ expect ( utils . spy ( 'detachFreeEmbeddedView' ) )
464+ . toHaveBeenCalledWith ( parentView , 0 , childView ) ;
465+ } ) ;
466+
467+ it ( 'should dehydrate' , ( ) => {
468+ manager . destroyFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) , wrapView ( childView ) ) ;
469+ expect ( utils . spy ( 'dehydrateView' ) ) . toHaveBeenCalledWith ( childView ) ;
470+ expect ( renderer . spy ( 'dehydrateView' ) ) . toHaveBeenCalledWith ( childView . render ) ;
471+ } ) ;
472+
473+ it ( 'should detach the render view' , ( ) => {
474+ manager . destroyFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) , wrapView ( childView ) ) ;
475+ expect ( renderer . spy ( 'detachFreeView' ) ) . toHaveBeenCalledWith ( childView . render ) ;
476+ } ) ;
477+
478+ it ( 'should return the view to the pool' , ( ) => {
479+ manager . destroyFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) , wrapView ( childView ) ) ;
480+ expect ( viewPool . spy ( 'returnView' ) ) . toHaveBeenCalledWith ( childView ) ;
481+ expect ( renderer . spy ( 'destroyView' ) ) . not . toHaveBeenCalled ( ) ;
482+ } ) ;
483+
484+ it ( 'should destroy the view if the pool is full' , ( ) => {
485+ viewPool . spy ( 'returnView' ) . andReturn ( false ) ;
486+ manager . destroyFreeEmbeddedView ( elementRef ( wrapView ( parentView ) , 0 ) , wrapView ( childView ) ) ;
487+ expect ( renderer . spy ( 'destroyView' ) ) . toHaveBeenCalledWith ( childView . render ) ;
488+ expect ( viewListener . spy ( 'viewDestroyed' ) ) . toHaveBeenCalledWith ( childView ) ;
489+ } ) ;
490+
491+ } ) ;
492+
493+ describe ( 'recursively destroyFreeEmbeddedView' , ( ) => {
494+ // TODO
495+ } ) ;
496+
497+ } ) ;
498+
405499 describe ( 'createRootHostView' , ( ) => {
406500
407501 var hostProtoView ;
0 commit comments