Skip to content

Commit c51126f

Browse files
clydinalan-agius4
authored andcommitted
test(@angular-devkit/build-angular): add async downlevel source map unit test
1 parent beea1e8 commit c51126f

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

packages/angular_devkit/build_angular/src/browser/tests/behavior/typescript-target_spec.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,50 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
5555
harness.expectFile('dist/main.js').content.toContain('"from-async-js-function"');
5656
});
5757

58+
it('creates correct sourcemaps when downleveling async functions', async () => {
59+
// Set TypeScript configuration target to ES2017 to enable native async
60+
await harness.modifyFile('src/tsconfig.app.json', (content) => {
61+
const tsconfig = JSON.parse(content);
62+
if (!tsconfig.compilerOptions) {
63+
tsconfig.compilerOptions = {};
64+
}
65+
tsconfig.compilerOptions.target = 'es2017';
66+
67+
return JSON.stringify(tsconfig);
68+
});
69+
70+
// Add a JavaScript file with async code
71+
await harness.writeFile(
72+
'src/async-test.js',
73+
'async function testJs() { console.log("from-async-js-function"); }',
74+
);
75+
76+
// Add an async function to the project as well as JavaScript file
77+
// The type `Void123` is used as a unique identifier for the final sourcemap
78+
// If sourcemaps are not properly propagated then it will not be in the final sourcemap
79+
await harness.modifyFile(
80+
'src/main.ts',
81+
(content) =>
82+
'import "./async-test";\n' +
83+
content +
84+
'\ntype Void123 = void;' +
85+
`\nasync function testApp(): Promise<Void123> { console.log("from-async-app-function"); }`,
86+
);
87+
88+
harness.useTarget('build', {
89+
...BASE_OPTIONS,
90+
sourceMap: {
91+
scripts: true,
92+
},
93+
});
94+
95+
const { result } = await harness.executeOnce();
96+
97+
expect(result?.success).toBe(true);
98+
harness.expectFile('dist/main.js').content.not.toMatch(/\sasync\s/);
99+
harness.expectFile('dist/main.js.map').content.toContain('Promise<Void123>');
100+
});
101+
58102
it('downlevels async functions when targetting greater than ES2017', async () => {
59103
// Set TypeScript configuration target greater than ES2017 to enable native async
60104
await harness.modifyFile('src/tsconfig.app.json', (content) => {

0 commit comments

Comments
 (0)