forked from angular/angular-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrebuild.ts
More file actions
104 lines (98 loc) · 3.54 KB
/
rebuild.ts
File metadata and controls
104 lines (98 loc) · 3.54 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
import {
killAllProcesses,
exec,
waitForAnyProcessOutputToMatch,
silentExecAndWaitForOutputToMatch,
ng,
} from '../../utils/process';
import {writeFile, writeMultipleFiles, appendToFile, expectFileToMatch} from '../../utils/fs';
import {wait} from '../../utils/utils';
import {request} from '../../utils/http';
export default function() {
if (process.platform.startsWith('win')) {
return Promise.resolve();
}
let oldNumberOfChunks = 0;
const chunkRegExp = /chunk\s+\{/g;
return silentExecAndWaitForOutputToMatch('ng', ['serve'],
/webpack: bundle is now VALID|webpack: Compiled successfully./)
// Should trigger a rebuild.
.then(() => exec('touch', 'src/main.ts'))
.then(() => waitForAnyProcessOutputToMatch(
/webpack: bundle is now INVALID|webpack: Compiling.../, 10000))
.then(() => waitForAnyProcessOutputToMatch(
/webpack: bundle is now VALID|webpack: Compiled successfully./, 10000))
// Count the bundles.
.then(({ stdout }) => {
oldNumberOfChunks = stdout.split(chunkRegExp).length;
})
// Add a lazy module.
.then(() => ng('generate', 'module', 'lazy', '--routing'))
// Just wait for the rebuild, otherwise we might be validating the last build.
.then(() => wait(1000))
.then(() => writeFile('src/app/app.module.ts', `
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { RouterModule } from '@angular/router';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
RouterModule.forRoot([
{ path: 'lazy', loadChildren: './lazy/lazy.module#LazyModule' }
])
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
`))
// Should trigger a rebuild with a new bundle.
.then(() => waitForAnyProcessOutputToMatch(
/webpack: bundle is now VALID|webpack: Compiled successfully./, 10000))
// Count the bundles.
.then(({ stdout }) => {
let newNumberOfChunks = stdout.split(chunkRegExp).length;
if (oldNumberOfChunks >= newNumberOfChunks) {
throw new Error('Expected webpack to create a new chunk, but did not.');
}
})
.then(() => wait(1000))
// Change multiple files and check that all of them are invalidated and recompiled.
.then(() => writeMultipleFiles({
'src/app/app.module.ts': `
console.log('$$_E2E_GOLDEN_VALUE_1');
export let X = '$$_E2E_GOLDEN_VALUE_2';
`,
'src/main.ts': `
import * as m from './app/app.module';
console.log(m.X);
console.log('$$_E2E_GOLDEN_VALUE_3');
`
}))
.then(() => waitForAnyProcessOutputToMatch(
/webpack: bundle is now VALID|webpack: Compiled successfully./, 10000))
.then(() => request('http://localhost:4200/main.bundle.js'))
.then((body) => {
if (!body.match(/\$\$_E2E_GOLDEN_VALUE_1/)) {
throw new Error('Expected golden value 1.');
}
if (!body.match(/\$\$_E2E_GOLDEN_VALUE_2/)) {
throw new Error('Expected golden value 2.');
}
if (!body.match(/\$\$_E2E_GOLDEN_VALUE_3/)) {
throw new Error('Expected golden value 3.');
}
})
.then(() => killAllProcesses(), (err: any) => {
killAllProcesses();
throw err;
});
}