-
Notifications
You must be signed in to change notification settings - Fork 11.9k
Expand file tree
/
Copy pathrebuild-deps-type-check.ts
More file actions
121 lines (117 loc) · 3.16 KB
/
rebuild-deps-type-check.ts
File metadata and controls
121 lines (117 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import assert from 'node:assert/strict';
import { getGlobalVariable } from '../../utils/env';
import { appendToFile, prependToFile, writeFile } from '../../utils/fs';
import { execAndWaitForOutputToMatch, waitForAnyProcessOutputToMatch } from '../../utils/process';
const doneRe = getGlobalVariable('argv')['esbuild']
? /Application bundle generation complete\./
: / Compiled successfully\.|: Failed to compile\./;
const errorRe = /Error/i;
export default function () {
// TODO(architect): Delete this test. It is now in devkit/build-angular.
if (process.platform.startsWith('win')) {
return Promise.resolve();
}
return (
Promise.resolve()
// Create and import files.
.then(() =>
writeFile(
'src/funky2.ts',
`
export function funky2(value: string): string {
return value + 'hello';
}
`,
),
)
.then(() =>
writeFile(
'src/funky.ts',
`
export * from './funky2';
`,
),
)
.then(() =>
prependToFile(
'src/main.ts',
`
import { funky2 } from './funky';
`,
),
)
.then(() =>
appendToFile(
'src/main.ts',
`
console.log(funky2('town'));
`,
),
)
// Should trigger a rebuild, no error expected.
.then(() => execAndWaitForOutputToMatch('ng', ['serve'], doneRe))
// Make an invalid version of the file.
// Should trigger a rebuild, this time an error is expected.
.then(() =>
Promise.all([
waitForAnyProcessOutputToMatch(errorRe, 20000),
writeFile(
'src/funky2.ts',
`
export function funky2(value: number): number {
return value + 1;
}
`,
),
]),
)
.then((results) => {
const { stderr } = results[0];
assert.match(
stderr,
/Argument of type 'string' is not assignable to parameter of type 'number'/,
);
})
// Change an UNRELATED file and the error should still happen.
// Should trigger a rebuild, this time an error is also expected.
.then(() =>
Promise.all([
waitForAnyProcessOutputToMatch(errorRe, 20000),
appendToFile(
'src/app/app.config.ts',
`
function anything(): number { return 1; }
`,
),
]),
)
.then((results) => {
const { stderr } = results[0];
assert.match(
stderr,
/Argument of type 'string' is not assignable to parameter of type 'number'/,
);
})
// Fix the error!
.then(() =>
Promise.all([
waitForAnyProcessOutputToMatch(doneRe, 20000),
writeFile(
'src/funky2.ts',
`
export function funky2(value: string): string {
return value + 'hello';
}
`,
),
]),
)
.then((results) => {
const { stderr } = results[0];
assert.doesNotMatch(
stderr,
/Argument of type 'string' is not assignable to parameter of type 'number'/,
);
})
);
}