Skip to content

Commit 9ee0fd8

Browse files
alan-agius4Keen Yee Liau
authored and
Keen Yee Liau
committed
test: add replace_resources tests without helpers
1 parent 80a5d4f commit 9ee0fd8

File tree

2 files changed

+60
-6
lines changed

2 files changed

+60
-6
lines changed

src/transformers/ast_helpers.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export function createTypescriptContext(
5656
content: string,
5757
additionalFiles?: Record<string, string>,
5858
useLibs = false,
59+
importHelpers = true,
5960
) {
6061
// Set compiler options.
6162
const compilerOptions: ts.CompilerOptions = {
@@ -67,7 +68,7 @@ export function createTypescriptContext(
6768
target: ts.ScriptTarget.ESNext,
6869
skipLibCheck: true,
6970
sourceMap: false,
70-
importHelpers: true,
71+
importHelpers,
7172
};
7273

7374
// Create compiler host.
@@ -112,8 +113,12 @@ export function transformTypescript(
112113
// Use given context or create a new one.
113114
if (content !== undefined) {
114115
const typescriptContext = createTypescriptContext(content);
115-
program = typescriptContext.program;
116-
compilerHost = typescriptContext.compilerHost;
116+
if (!program) {
117+
program = typescriptContext.program;
118+
}
119+
if (!compilerHost) {
120+
compilerHost = typescriptContext.compilerHost;
121+
}
117122
} else if (!program || !compilerHost) {
118123
throw new Error('transformTypescript needs either `content` or a `program` and `compilerHost');
119124
}

src/transformers/replace_resources_spec.ts

+52-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@ import { tags } from '@angular-devkit/core'; // tslint:disable-line:no-implicit
99
import { createTypescriptContext, transformTypescript } from './ast_helpers';
1010
import { replaceResources } from './replace_resources';
1111

12-
function transform(input: string, shouldTransform = true, directTemplateLoading = true) {
13-
const { program } = createTypescriptContext(input);
12+
function transform(
13+
input: string,
14+
shouldTransform = true,
15+
directTemplateLoading = true,
16+
importHelpers = true,
17+
) {
18+
const { program, compilerHost } =
19+
createTypescriptContext(input, undefined, undefined, importHelpers);
1420
const getTypeChecker = () => program.getTypeChecker();
1521
const transformer = replaceResources(
1622
() => shouldTransform, getTypeChecker, directTemplateLoading);
1723

18-
return transformTypescript(input, [transformer]);
24+
return transformTypescript(input, [transformer], program, compilerHost);
1925
}
2026

2127
// tslint:disable-next-line:no-big-function
@@ -58,6 +64,49 @@ describe('@ngtools/webpack transformers', () => {
5864
expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`);
5965
});
6066

67+
it(`should replace resources and add helper when 'importHelpers' is false`, () => {
68+
const input = tags.stripIndent`
69+
import { Component } from '@angular/core';
70+
71+
@Component({
72+
selector: 'app-root',
73+
templateUrl: './app.component.html',
74+
styleUrls: ['./app.component.css', './app.component.2.css']
75+
})
76+
export class AppComponent {
77+
title = 'app';
78+
}
79+
`;
80+
const output = tags.stripIndent`
81+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null
82+
? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object"
83+
&& typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
84+
else for (var i = decorators.length - 1; i >= 0; i--)
85+
if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; };
86+
87+
var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; };
88+
89+
import { Component } from '@angular/core';
90+
91+
let AppComponent = class AppComponent {
92+
constructor() {
93+
this.title = 'app';
94+
}
95+
};
96+
AppComponent = __decorate([
97+
Component({
98+
selector: 'app-root',
99+
template: __importDefault(require("!raw-loader!./app.component.html")).default,
100+
styles: [__importDefault(require("./app.component.css")).default, __importDefault(require("./app.component.2.css")).default]
101+
})
102+
], AppComponent);
103+
export { AppComponent };
104+
`;
105+
106+
const result = transform(input, undefined, undefined, false);
107+
expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`);
108+
});
109+
61110
it('should not replace resources when directTemplateLoading is false', () => {
62111
const input = tags.stripIndent`
63112
import { Component } from '@angular/core';

0 commit comments

Comments
 (0)