| import 'jasmine'; |
| |
| import * as ts from 'typescript'; |
| |
| import {CompilerHost} from './compiler_host'; |
| import {BazelOptions} from './tsconfig'; |
| |
| describe('compiler host', () => { |
| describe('computes the amd module name of a .ts source file', () => { |
| const options: ts.CompilerOptions = { |
| rootDirs: [], |
| rootDir: 'base', |
| outDir: 'out', |
| }; |
| const bazelOptions: BazelOptions = { |
| package: 'path/to/package', |
| compilationTargetSrc: [ |
| 'path/to/package/index.ts', |
| 'path/to/package/root_dir/index.ts', |
| 'test.ts', |
| ], |
| workspaceName: 'my_wksp', |
| } as any; |
| |
| const defaultHost = |
| new CompilerHost([], options, bazelOptions, null as any, null as any); |
| // A module is a file with at least an import or export statement. |
| function createTsModule(filename: string) { |
| return ts.createSourceFile(filename, 'export {}', ts.ScriptTarget.ES2015); |
| } |
| |
| it('should name a module after the workspace and filename', () => { |
| expect(defaultHost.amdModuleName(createTsModule('test.ts'))) |
| .toBe('my_wksp/test'); |
| }); |
| |
| it('should not provide a name for files that are not in the compilation unit', |
| () => { |
| expect( |
| defaultHost.amdModuleName(createTsModule('some_other_file.d.ts'))) |
| .toBeUndefined(); |
| }); |
| |
| it('should name the index file with a short name', () => { |
| const host = new CompilerHost( |
| [], options, {...bazelOptions, moduleName: 'my_lib'}, null as any, |
| null as any); |
| expect(host.amdModuleName(createTsModule('path/to/package/index.ts'))) |
| .toBe('my_lib'); |
| }); |
| it('should name an index file under a module_root with a short name', |
| () => { |
| const host = new CompilerHost( |
| [], options, |
| {...bazelOptions, moduleName: 'my_lib', moduleRoot: 'root_dir'}, |
| null as any, null as any); |
| expect(host.amdModuleName( |
| createTsModule('path/to/package/root_dir/index.ts'))) |
| .toBe('my_lib'); |
| }); |
| |
| describe('#pathToModuleName', () => { |
| it('should escape non-identifier characters', () => { |
| expect(defaultHost.pathToModuleName('context', '$-!@')) |
| .toBe('$24$2d$21$40'); |
| }); |
| |
| it('should escape leading numbers', () => { |
| expect(defaultHost.pathToModuleName('context', '1234')).toBe('$31234'); |
| }); |
| |
| it('should transform slashes to dots', () => { |
| expect(defaultHost.pathToModuleName('context', 'a/b')).toBe('a.b'); |
| }); |
| |
| it('should not escape valid identifers', () => { |
| expect(defaultHost.pathToModuleName('context', 'a1/b2')).toBe('a1.b2'); |
| }); |
| }); |
| }); |
| }); |