
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
70 lines
2.0 KiB
TypeScript
70 lines
2.0 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 {MockDirectory, setup} from '@angular/compiler/test/aot/test_util';
|
|
import {compile, expectEmit} from './mock_compile';
|
|
|
|
describe('compiler compliance: dependency injection', () => {
|
|
const angularFiles = setup({
|
|
compileAngular: false,
|
|
compileFakeCore: true,
|
|
compileAnimations: false,
|
|
});
|
|
|
|
it('should create factory methods', () => {
|
|
const files = {
|
|
app: {
|
|
'spec.ts': `
|
|
import {Component, NgModule, Injectable, Attribute, Host, SkipSelf, Self, Optional} from '@angular/core';
|
|
|
|
@Injectable()
|
|
export class MyService {}
|
|
|
|
@Component({
|
|
selector: 'my-component',
|
|
template: \`\`
|
|
})
|
|
export class MyComponent {
|
|
constructor(
|
|
@Attribute('name') name:string,
|
|
s1: MyService,
|
|
@Host() s2: MyService,
|
|
@Self() s4: MyService,
|
|
@SkipSelf() s3: MyService,
|
|
@Optional() s5: MyService,
|
|
@Self() @Optional() s6: MyService,
|
|
) {}
|
|
}
|
|
|
|
@NgModule({declarations: [MyComponent], providers: [MyService]})
|
|
export class MyModule {}
|
|
`
|
|
}
|
|
};
|
|
|
|
const factory = `
|
|
factory: function MyComponent_Factory() {
|
|
return new MyComponent(
|
|
$r3$.ɵinjectAttribute('name'),
|
|
$r3$.ɵdirectiveInject(MyService),
|
|
$r3$.ɵdirectiveInject(MyService, 1),
|
|
$r3$.ɵdirectiveInject(MyService, 2),
|
|
$r3$.ɵdirectiveInject(MyService, 4),
|
|
$r3$.ɵdirectiveInject(MyService, 8),
|
|
$r3$.ɵdirectiveInject(MyService, 10)
|
|
);
|
|
}`;
|
|
|
|
|
|
const result = compile(files, angularFiles);
|
|
|
|
expectEmit(result.source, factory, 'Incorrect factory');
|
|
});
|
|
|
|
});
|