110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {
 | 
						|
  AsyncTestCompleter,
 | 
						|
  beforeEach,
 | 
						|
  ddescribe,
 | 
						|
  xdescribe,
 | 
						|
  describe,
 | 
						|
  el,
 | 
						|
  dispatchEvent,
 | 
						|
  expect,
 | 
						|
  iit,
 | 
						|
  inject,
 | 
						|
  beforeEachBindings,
 | 
						|
  it,
 | 
						|
  xit,
 | 
						|
  SpyObject, proxy
 | 
						|
} from 'angular2/test_lib';
 | 
						|
import {IMPLEMENTS, isBlank} from 'angular2/src/facade/lang';
 | 
						|
import {ListWrapper} from 'angular2/src/facade/collection';
 | 
						|
 | 
						|
import {RenderProtoView} from 'angular2/src/render/dom/view/proto_view';
 | 
						|
import {ElementBinder} from 'angular2/src/render/dom/view/element_binder';
 | 
						|
import {RenderView} from 'angular2/src/render/dom/view/view';
 | 
						|
import {ViewContainer} from 'angular2/src/render/dom/view/view_container';
 | 
						|
import {LightDom} from 'angular2/src/render/dom/shadow_dom/light_dom';
 | 
						|
import {DOM} from 'angular2/src/dom/dom_adapter';
 | 
						|
 | 
						|
export function main() {
 | 
						|
 | 
						|
  describe('RenderView', () => {
 | 
						|
    function createProtoView(binders = null) {
 | 
						|
      if (isBlank(binders)) {
 | 
						|
        binders = [];
 | 
						|
      }
 | 
						|
      var rootEl = el('<div></div>');
 | 
						|
      return new RenderProtoView({
 | 
						|
        element: rootEl,
 | 
						|
        elementBinders: binders
 | 
						|
      });
 | 
						|
    }
 | 
						|
 | 
						|
    function createView(pv=null, boundElementCount=0) {
 | 
						|
      if (isBlank(pv)) {
 | 
						|
        pv = createProtoView();
 | 
						|
      }
 | 
						|
      var root = el('<div><div></div></div>');
 | 
						|
      var boundElements = [];
 | 
						|
      for (var i=0; i<boundElementCount; i++) {
 | 
						|
        ListWrapper.push(boundElements, el('<span></span'));
 | 
						|
      }
 | 
						|
      return new RenderView(pv, [DOM.childNodes(root)[0]],
 | 
						|
        [], boundElements, []);
 | 
						|
    }
 | 
						|
 | 
						|
    describe('getDirectParentLightDom', () => {
 | 
						|
 | 
						|
      it('should return the LightDom of the direct parent', () => {
 | 
						|
        var pv = createProtoView(
 | 
						|
          [new ElementBinder(), new ElementBinder({
 | 
						|
            parentIndex: 0,
 | 
						|
            distanceToParent: 1
 | 
						|
          })]
 | 
						|
        );
 | 
						|
        var view = createView(pv, 2);
 | 
						|
        view.lightDoms[0] = new SpyLightDom();
 | 
						|
        view.lightDoms[1] = new SpyLightDom();
 | 
						|
        expect(view.getDirectParentLightDom(1)).toBe(view.lightDoms[0]);
 | 
						|
      });
 | 
						|
 | 
						|
      it('should return null if the direct parent is not bound', () => {
 | 
						|
        var pv = createProtoView(
 | 
						|
          [new ElementBinder(), new ElementBinder(), new ElementBinder({
 | 
						|
            parentIndex: 0,
 | 
						|
            distanceToParent: 2
 | 
						|
          })]
 | 
						|
        );
 | 
						|
        var view = createView(pv, 3);
 | 
						|
        view.lightDoms[0] = new SpyLightDom();
 | 
						|
        view.lightDoms[1] = new SpyLightDom();
 | 
						|
        view.lightDoms[2] = new SpyLightDom();
 | 
						|
        expect(view.getDirectParentLightDom(2)).toBe(null);
 | 
						|
      });
 | 
						|
 | 
						|
    });
 | 
						|
 | 
						|
    describe('getOrCreateViewContainer', () => {
 | 
						|
      it('should create a new container', () => {
 | 
						|
        var pv = createProtoView([new ElementBinder()]);
 | 
						|
        var view = createView(pv, 1);
 | 
						|
        expect(view.getOrCreateViewContainer(0) instanceof ViewContainer).toBe(true);
 | 
						|
      });
 | 
						|
 | 
						|
      it('should return an existing container', () => {
 | 
						|
        var pv = createProtoView([new ElementBinder()]);
 | 
						|
        var view = createView(pv, 1);
 | 
						|
        var vc = view.getOrCreateViewContainer(0);
 | 
						|
        expect(view.getOrCreateViewContainer(0)).toBe(vc);
 | 
						|
      });
 | 
						|
    });
 | 
						|
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
@proxy
 | 
						|
@IMPLEMENTS(LightDom)
 | 
						|
class SpyLightDom extends SpyObject {
 | 
						|
  constructor(){super(LightDom);}
 | 
						|
  noSuchMethod(m){return super.noSuchMethod(m)}
 | 
						|
}
 | 
						|
 |