Remove MockData from the constructor parameters of MockTypescriptHost since the entire Tour of Heroes (TOH) project is now loaded from disk. Added a new method `reset()` to MockTypescriptHost that is necessary to reset the state of the project before each spec if run to make sure previous overrides are cleared. PR Close #32752
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Use of this source code is governed by an MIT-style license that can be
 | 
						|
 * found in the LICENSE file at https://angular.io/license
 | 
						|
 */
 | 
						|
 | 
						|
import * as ts from 'typescript';
 | 
						|
import {getClassDeclFromDecoratorProp} from '../src/template';
 | 
						|
import {MockTypescriptHost} from './test_utils';
 | 
						|
 | 
						|
describe('getClassDeclFromTemplateNode', () => {
 | 
						|
 | 
						|
  it('should find class declaration in syntax-only mode', () => {
 | 
						|
    const sourceFile = ts.createSourceFile(
 | 
						|
        'foo.ts', `
 | 
						|
        @Component({
 | 
						|
          template: '<div></div>'
 | 
						|
        })
 | 
						|
        class MyComponent {}`,
 | 
						|
        ts.ScriptTarget.ES2015, true /* setParentNodes */);
 | 
						|
    function visit(node: ts.Node): ts.ClassDeclaration|undefined {
 | 
						|
      if (ts.isPropertyAssignment(node)) {
 | 
						|
        return getClassDeclFromDecoratorProp(node);
 | 
						|
      }
 | 
						|
      return node.forEachChild(visit);
 | 
						|
    }
 | 
						|
    const classDecl = sourceFile.forEachChild(visit);
 | 
						|
    expect(classDecl).toBeTruthy();
 | 
						|
    expect(classDecl !.kind).toBe(ts.SyntaxKind.ClassDeclaration);
 | 
						|
    expect((classDecl as ts.ClassDeclaration).name !.text).toBe('MyComponent');
 | 
						|
  });
 | 
						|
 | 
						|
 | 
						|
  it('should return class declaration for AppComponent', () => {
 | 
						|
    const host = new MockTypescriptHost(['/app/app.component.ts']);
 | 
						|
    const tsLS = ts.createLanguageService(host);
 | 
						|
    const sourceFile = tsLS.getProgram() !.getSourceFile('/app/app.component.ts');
 | 
						|
    expect(sourceFile).toBeTruthy();
 | 
						|
    const classDecl = sourceFile !.forEachChild(function visit(node): ts.Node | undefined {
 | 
						|
      if (ts.isPropertyAssignment(node)) {
 | 
						|
        return getClassDeclFromDecoratorProp(node);
 | 
						|
      }
 | 
						|
      return node.forEachChild(visit);
 | 
						|
    });
 | 
						|
    expect(classDecl).toBeTruthy();
 | 
						|
    expect(ts.isClassDeclaration(classDecl !)).toBe(true);
 | 
						|
    expect((classDecl as ts.ClassDeclaration).name !.text).toBe('AppComponent');
 | 
						|
  });
 | 
						|
});
 |