118 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			3.4 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 {absoluteFrom} from '../../src/ngtsc/file_system';
							 | 
						||
| 
								 | 
							
								import {runInEachFileSystem} from '../../src/ngtsc/file_system/testing';
							 | 
						||
| 
								 | 
							
								import {loadStandardTestFiles} from '../helpers/src/mock_file_loading';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import {NgtscTestEnvironment} from './env';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const testFiles = loadStandardTestFiles();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								runInEachFileSystem(() => {
							 | 
						||
| 
								 | 
							
								  describe('monorepos', () => {
							 | 
						||
| 
								 | 
							
								    let env !: NgtscTestEnvironment;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    beforeEach(() => {
							 | 
						||
| 
								 | 
							
								      env = NgtscTestEnvironment.setup(testFiles, absoluteFrom('/app'));
							 | 
						||
| 
								 | 
							
								      env.tsconfig();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // env.tsconfig() will write to /app/tsconfig.json, but list it as extending
							 | 
						||
| 
								 | 
							
								      // ./tsconfig-base.json. So that file should exist, and redirect to ../tsconfig-base.json.
							 | 
						||
| 
								 | 
							
								      env.write('/app/tsconfig-base.json', JSON.stringify({'extends': '../tsconfig-base.json'}));
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should compile a project with a reference above the current dir', () => {
							 | 
						||
| 
								 | 
							
								      env.write('/app/index.ts', `
							 | 
						||
| 
								 | 
							
								        import {Component, NgModule} from '@angular/core';
							 | 
						||
| 
								 | 
							
								        import {LibModule} from '../lib/module';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @Component({
							 | 
						||
| 
								 | 
							
								          selector: 'app-cmp',
							 | 
						||
| 
								 | 
							
								          template: '<lib-cmp></lib-cmp>',
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class AppCmp {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @NgModule({
							 | 
						||
| 
								 | 
							
								          declarations: [AppCmp],
							 | 
						||
| 
								 | 
							
								          imports: [LibModule],
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class AppModule {}
							 | 
						||
| 
								 | 
							
								      `);
							 | 
						||
| 
								 | 
							
								      env.write('/lib/module.ts', `
							 | 
						||
| 
								 | 
							
								        import {NgModule} from '@angular/core';
							 | 
						||
| 
								 | 
							
								        import {LibCmp} from './cmp';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @NgModule({
							 | 
						||
| 
								 | 
							
								          declarations: [LibCmp],
							 | 
						||
| 
								 | 
							
								          exports: [LibCmp],
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class LibModule {}
							 | 
						||
| 
								 | 
							
								      `);
							 | 
						||
| 
								 | 
							
								      env.write('/lib/cmp.ts', `
							 | 
						||
| 
								 | 
							
								        import {Component} from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @Component({
							 | 
						||
| 
								 | 
							
								          selector: 'lib-cmp',
							 | 
						||
| 
								 | 
							
								          template: '...',
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class LibCmp {}
							 | 
						||
| 
								 | 
							
								      `);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      env.driveMain();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const jsContents = env.getContents('app/index.js');
							 | 
						||
| 
								 | 
							
								      expect(jsContents).toContain(`import * as i1 from "../lib/cmp";`);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should compile a project with a reference into the same dir', () => {
							 | 
						||
| 
								 | 
							
								      env.write('/app/index.ts', `
							 | 
						||
| 
								 | 
							
								        import {Component, NgModule} from '@angular/core';
							 | 
						||
| 
								 | 
							
								        import {TargetModule} from './target';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @Component({
							 | 
						||
| 
								 | 
							
								          selector: 'app-cmp',
							 | 
						||
| 
								 | 
							
								          template: '<target-cmp></target-cmp>',
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class AppCmp {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @NgModule({
							 | 
						||
| 
								 | 
							
								          declarations: [AppCmp],
							 | 
						||
| 
								 | 
							
								          imports: [TargetModule],
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class AppModule {}
							 | 
						||
| 
								 | 
							
								      `);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      env.write('/app/target.ts', `
							 | 
						||
| 
								 | 
							
								        import {Component, NgModule} from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @Component({
							 | 
						||
| 
								 | 
							
								          selector: 'target-cmp',
							 | 
						||
| 
								 | 
							
								          template: '...',
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class TargetCmp {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        @NgModule({
							 | 
						||
| 
								 | 
							
								          declarations: [TargetCmp],
							 | 
						||
| 
								 | 
							
								          exports: [TargetCmp],
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        export class TargetModule {}
							 | 
						||
| 
								 | 
							
								      `);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      env.driveMain();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Look for index.js, not app/index.js, because of TypeScript's behavior of stripping off the
							 | 
						||
| 
								 | 
							
								      // common prefix of all input files.
							 | 
						||
| 
								 | 
							
								      const jsContents = env.getContents('index.js');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // The real goal of this test was to check that the relative import has the leading './'.
							 | 
						||
| 
								 | 
							
								      expect(jsContents).toContain(`import * as i1 from "./target";`);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |