From eb999300d98172eed2bb87c5d4866dc6bc9e380e Mon Sep 17 00:00:00 2001 From: Alex Rickabaugh Date: Wed, 1 Aug 2018 09:52:34 +0200 Subject: [PATCH] test(ivy): run compiler compliance tests without rebuilding core,common (#25248) Previously the compiler compliance tests ran and built test code with real dependencies on @angular/core and @angular/common. This meant that any changes to the compiler would result in long rebuild processes for tests to rerun. This change removes those dependencies and causes test code to be built against the fake_core stub of @angular/core that the ngtsc tests use. This change also removes the dependency on @angular/common entirely, as locality means it's possible to reference *ngIf without needing to link to an implementation. PR Close #25248 --- .../compiler-cli/test/compliance/BUILD.bazel | 9 +++----- .../test/compliance/mock_compiler_spec.ts | 4 ++-- .../compliance/r3_compiler_compliance_spec.ts | 7 +++---- .../r3_view_compiler_binding_spec.ts | 4 ++-- .../compliance/r3_view_compiler_di_spec.ts | 7 +++---- .../compliance/r3_view_compiler_i18n_spec.ts | 4 ++-- .../r3_view_compiler_input_outputs_spec.ts | 4 ++-- .../r3_view_compiler_listener_spec.ts | 7 +++---- .../test/compliance/r3_view_compiler_spec.ts | 6 ++---- .../r3_view_compiler_styling_spec.ts | 4 ++-- .../r3_view_compiler_template_spec.ts | 16 ++++++-------- .../test/ngtsc/fake_core/index.ts | 4 +++- packages/compiler/test/aot/test_util.ts | 21 +++++++++++++------ 13 files changed, 48 insertions(+), 49 deletions(-) diff --git a/packages/compiler-cli/test/compliance/BUILD.bazel b/packages/compiler-cli/test/compliance/BUILD.bazel index 365b20bc3db..b49764a5972 100644 --- a/packages/compiler-cli/test/compliance/BUILD.bazel +++ b/packages/compiler-cli/test/compliance/BUILD.bazel @@ -12,17 +12,14 @@ ts_library( "//packages/compiler", "//packages/compiler-cli", "//packages/compiler/test:test_utils", - "//packages/compiler/testing", - "//packages/core", ], ) jasmine_node_test( name = "compliance", - bootstrap = ["angular/tools/testing/init_node_spec.js"], + bootstrap = ["angular/tools/testing/init_node_no_angular_spec.js"], data = [ - "//packages/common:npm_package", - "//packages/core:npm_package", + "//packages/compiler-cli/test/ngtsc/fake_core:npm_package", ], tags = [ "ivy-local", @@ -30,6 +27,6 @@ jasmine_node_test( ], deps = [ ":test_lib", - "//tools/testing:node", + "//tools/testing:node_no_angular", ], ) diff --git a/packages/compiler-cli/test/compliance/mock_compiler_spec.ts b/packages/compiler-cli/test/compliance/mock_compiler_spec.ts index 128890af0e0..77e5320f5f1 100644 --- a/packages/compiler-cli/test/compliance/mock_compiler_spec.ts +++ b/packages/compiler-cli/test/compliance/mock_compiler_spec.ts @@ -14,9 +14,9 @@ describe('mock_compiler', () => { // This produces a MockDirectory of the file needed to compile an Angular application. // This setup is performed in a beforeAll which populates the map returned. const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); describe('compiling', () => { diff --git a/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts b/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts index 3540e9700ad..c338994e57b 100644 --- a/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts @@ -17,9 +17,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, compileAnimations: false, - compileCommon: true, + compileFakeCore: true, }); describe('elements', () => { @@ -1287,7 +1287,6 @@ describe('compiler compliance', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -1301,7 +1300,7 @@ describe('compiler compliance', () => { }) export class MyComponent {} - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_binding_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_binding_spec.ts index 4b6d9b474bb..5dde3a2b3e9 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_binding_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_binding_spec.ts @@ -11,9 +11,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance: bindings', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: false, }); describe('text bindings', () => { diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_di_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_di_spec.ts index 455569a0a51..1075fa1fa7d 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_di_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_di_spec.ts @@ -11,9 +11,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance: dependency injection', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); it('should create factory methods', () => { @@ -21,7 +21,6 @@ describe('compiler compliance: dependency injection', () => { app: { 'spec.ts': ` import {Component, NgModule, Injectable, Attribute, Host, SkipSelf, Self, Optional} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Injectable() export class MyService {} @@ -42,7 +41,7 @@ describe('compiler compliance: dependency injection', () => { ) {} } - @NgModule({declarations: [MyComponent], imports: [CommonModule], providers: [MyService]}) + @NgModule({declarations: [MyComponent], providers: [MyService]}) export class MyModule {} ` } diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts index f3af5b9a3b8..98884f56ead 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts @@ -13,9 +13,9 @@ const TRANSLATION_NAME_REGEXP = /^MSG_[A-Z0-9]+/; describe('i18n support in the view compiler', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); describe('single text nodes', () => { diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_input_outputs_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_input_outputs_spec.ts index 6b8adb4abf9..06b57717af6 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_input_outputs_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_input_outputs_spec.ts @@ -11,9 +11,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance: listen()', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); it('should create declare inputs/outputs', () => { diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_listener_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_listener_spec.ts index 41bb8e57407..944f4c6c1ea 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_listener_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_listener_spec.ts @@ -14,9 +14,9 @@ import {compile, expectEmit} from './mock_compile'; */ describe('compiler compliance: listen()', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); it('should create listener instruction on element', () => { @@ -63,7 +63,6 @@ describe('compiler compliance: listen()', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -80,7 +79,7 @@ describe('compiler compliance: listen()', () => { onClick2(name: any) {} } - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_spec.ts index c67dfb1efec..de9d39af5cd 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_spec.ts @@ -11,9 +11,9 @@ import {compile, expectEmit} from './mock_compile'; describe('r3_view_compiler', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); describe('hello world', () => { @@ -47,7 +47,6 @@ describe('r3_view_compiler', () => { app: { 'example.ts': ` import {Component, OnInit, OnDestroy, ElementRef, Input, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-app', @@ -83,7 +82,6 @@ describe('r3_view_compiler', () => { @NgModule({ declarations: [TodoComponent, MyApp], - imports: [CommonModule] }) export class TodoModule{} ` diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_styling_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_styling_spec.ts index 00aa063caeb..516623def29 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_styling_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_styling_spec.ts @@ -13,9 +13,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance: styling', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); describe('[style] and [style.prop]', () => { diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_template_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_template_spec.ts index 4d051e51093..7f90ee7cbf4 100644 --- a/packages/compiler-cli/test/compliance/r3_view_compiler_template_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_view_compiler_template_spec.ts @@ -11,9 +11,9 @@ import {compile, expectEmit} from './mock_compile'; describe('compiler compliance: template', () => { const angularFiles = setup({ - compileAngular: true, + compileAngular: false, + compileFakeCore: true, compileAnimations: false, - compileCommon: true, }); it('should correctly bind to context in nested template', () => { @@ -21,7 +21,6 @@ describe('compiler compliance: template', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -43,7 +42,7 @@ describe('compiler compliance: template', () => { onClick(outer: any, middle: any, inner: any) { } } - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } @@ -122,7 +121,6 @@ describe('compiler compliance: template', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -133,7 +131,7 @@ describe('compiler compliance: template', () => { }) export class MyComponent {} - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } @@ -174,7 +172,6 @@ describe('compiler compliance: template', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -187,7 +184,7 @@ describe('compiler compliance: template', () => { }) export class MyComponent {} - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } @@ -243,7 +240,6 @@ describe('compiler compliance: template', () => { app: { 'spec.ts': ` import {Component, NgModule} from '@angular/core'; - import {CommonModule} from '@angular/common'; @Component({ selector: 'my-component', @@ -258,7 +254,7 @@ describe('compiler compliance: template', () => { }) export class MyComponent {} - @NgModule({declarations: [MyComponent], imports: [CommonModule]}) + @NgModule({declarations: [MyComponent]}) export class MyModule {} ` } diff --git a/packages/compiler-cli/test/ngtsc/fake_core/index.ts b/packages/compiler-cli/test/ngtsc/fake_core/index.ts index 7e7978e1ded..89e622ae45c 100644 --- a/packages/compiler-cli/test/ngtsc/fake_core/index.ts +++ b/packages/compiler-cli/test/ngtsc/fake_core/index.ts @@ -47,7 +47,7 @@ export type ModuleWithProviders = any; export class ChangeDetectorRef {} export class ElementRef {} export class Injector {} -export class TemplateRef {} +export class TemplateRef {} export class ViewContainerRef {} export class ɵNgModuleFactory { constructor(public clazz: T) {} @@ -56,3 +56,5 @@ export class ɵNgModuleFactory { export function forwardRef(fn: () => T): T { return fn(); } + +export interface SimpleChanges { [propName: string]: any; } \ No newline at end of file diff --git a/packages/compiler/test/aot/test_util.ts b/packages/compiler/test/aot/test_util.ts index 2a92800aa6f..ce969725efd 100644 --- a/packages/compiler/test/aot/test_util.ts +++ b/packages/compiler/test/aot/test_util.ts @@ -602,12 +602,16 @@ export function isInBazel(): boolean { return process.env.TEST_SRCDIR != null; } -export function setup( - options: {compileAngular: boolean, compileAnimations: boolean, compileCommon?: boolean} = { - compileAngular: true, - compileAnimations: true, - compileCommon: false, - }) { +export function setup(options: { + compileAngular: boolean, + compileFakeCore?: boolean, + compileAnimations: boolean, compileCommon?: boolean +} = { + compileAngular: true, + compileAnimations: true, + compileCommon: false, + compileFakeCore: false, +}) { let angularFiles = new Map(); beforeAll(() => { @@ -626,6 +630,11 @@ export function setup( path.join(sources, 'angular/packages/core/npm_package'), 'core', angularFiles, skipDirs); } + if (options.compileFakeCore) { + readBazelWrittenFilesFrom( + path.join(sources, 'angular/packages/compiler-cli/test/ngtsc/fake_core/npm_package'), + 'core', angularFiles, skipDirs); + } if (options.compileAnimations) { // If this fails please add //packages/animations:npm_package as a test data dependency. readBazelWrittenFilesFrom(