92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  ddescribe,
 | 
						|
  describe,
 | 
						|
  xdescribe,
 | 
						|
  it,
 | 
						|
  iit,
 | 
						|
  xit,
 | 
						|
  expect,
 | 
						|
  beforeEach,
 | 
						|
  afterEach,
 | 
						|
  AsyncTestCompleter,
 | 
						|
  inject,
 | 
						|
  beforeEachBindings
 | 
						|
} from 'angular2/testing_internal';
 | 
						|
 | 
						|
import {Component, View, provide} from 'angular2/core';
 | 
						|
import {PromiseWrapper} from 'angular2/src/facade/async';
 | 
						|
import {SpyProtoViewFactory} from '../core/spies';
 | 
						|
import {
 | 
						|
  CompiledHostTemplate,
 | 
						|
  CompiledComponentTemplate,
 | 
						|
  BeginComponentCmd
 | 
						|
} from 'angular2/src/core/linker/template_commands';
 | 
						|
import {RuntimeCompiler} from 'angular2/src/compiler/runtime_compiler';
 | 
						|
import {ProtoViewFactory} from 'angular2/src/core/linker/proto_view_factory';
 | 
						|
import {AppProtoView} from 'angular2/src/core/linker/view';
 | 
						|
 | 
						|
export function main() {
 | 
						|
  describe('RuntimeCompiler', () => {
 | 
						|
    var compiler: RuntimeCompiler;
 | 
						|
 | 
						|
    beforeEach(inject([RuntimeCompiler], (_compiler) => { compiler = _compiler; }));
 | 
						|
 | 
						|
    describe('compileInHost', () => {
 | 
						|
      var protoViewFactorySpy;
 | 
						|
      var someProtoView;
 | 
						|
 | 
						|
      beforeEachBindings(() => {
 | 
						|
        protoViewFactorySpy = new SpyProtoViewFactory();
 | 
						|
        someProtoView = new AppProtoView(null, null, null, null, null, null, null);
 | 
						|
        protoViewFactorySpy.spy('createHost').andReturn(someProtoView);
 | 
						|
        return [provide(ProtoViewFactory, {useValue: protoViewFactorySpy})];
 | 
						|
      });
 | 
						|
 | 
						|
      it('should compile the template via TemplateCompiler',
 | 
						|
         inject([AsyncTestCompleter], (async) => {
 | 
						|
           var cht: CompiledHostTemplate;
 | 
						|
           protoViewFactorySpy.spy('createHost')
 | 
						|
               .andCallFake((_cht) => {
 | 
						|
                 cht = _cht;
 | 
						|
                 return someProtoView;
 | 
						|
               });
 | 
						|
           compiler.compileInHost(SomeComponent)
 | 
						|
               .then((_) => {
 | 
						|
                 var beginComponentCmd = <BeginComponentCmd>cht.template.commands[0];
 | 
						|
                 expect(beginComponentCmd.name).toEqual('some-comp');
 | 
						|
                 async.done();
 | 
						|
               });
 | 
						|
         }));
 | 
						|
 | 
						|
    });
 | 
						|
 | 
						|
 | 
						|
    it('should cache the result', inject([AsyncTestCompleter], (async) => {
 | 
						|
         PromiseWrapper
 | 
						|
             .all([compiler.compileInHost(SomeComponent), compiler.compileInHost(SomeComponent)])
 | 
						|
             .then((protoViewRefs) => {
 | 
						|
               expect(protoViewRefs[0]).toBe(protoViewRefs[1]);
 | 
						|
               async.done();
 | 
						|
             });
 | 
						|
       }));
 | 
						|
 | 
						|
    it('should clear the cache',
 | 
						|
       inject([AsyncTestCompleter], (async) => {compiler.compileInHost(SomeComponent)
 | 
						|
                                                    .then((protoViewRef1) => {
 | 
						|
                                                      compiler.clearCache();
 | 
						|
                                                      compiler.compileInHost(SomeComponent)
 | 
						|
                                                          .then((protoViewRef2) => {
 | 
						|
                                                            expect(protoViewRef1)
 | 
						|
                                                                .not.toBe(protoViewRef2);
 | 
						|
                                                            async.done();
 | 
						|
                                                          });
 | 
						|
                                                    })}));
 | 
						|
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
@Component({selector: 'some-comp'})
 | 
						|
@View({template: ''})
 | 
						|
class SomeComponent {
 | 
						|
}
 |