Skip to content

Commit a78eaad

Browse files
clydinalan-agius4
authored andcommitted
test(@angular-devkit/build-angular): add browser builder scripts longhand option tests
This change adds expanded unit tests for the browser builder's `scripts` longhand option using the builder test harness.
1 parent 76b023e commit a78eaad

File tree

1 file changed

+284
-0
lines changed
  • packages/angular_devkit/build_angular/src/browser/tests/options

1 file changed

+284
-0
lines changed

packages/angular_devkit/build_angular/src/browser/tests/options/scripts_spec.ts

+284
Original file line numberDiff line numberDiff line change
@@ -128,5 +128,289 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
128128
);
129129
});
130130
});
131+
132+
describe('longhand syntax', () => {
133+
it('processes a single script into a single output', async () => {
134+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
135+
136+
harness.useTarget('build', {
137+
...BASE_OPTIONS,
138+
scripts: [{ input: 'src/test-script-a.js' }],
139+
});
140+
141+
const { result } = await harness.executeOnce();
142+
143+
expect(result?.success).toBe(true);
144+
145+
harness.expectFile('dist/scripts.js').content.toContain('console.log("a")');
146+
harness
147+
.expectFile('dist/index.html')
148+
.content.toContain('<script src="scripts.js" defer></script>');
149+
});
150+
151+
it('processes a single script into a single output named with bundleName', async () => {
152+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
153+
154+
harness.useTarget('build', {
155+
...BASE_OPTIONS,
156+
scripts: [{ input: 'src/test-script-a.js', bundleName: 'extra' }],
157+
});
158+
159+
const { result } = await harness.executeOnce();
160+
161+
expect(result?.success).toBe(true);
162+
163+
harness.expectFile('dist/extra.js').content.toContain('console.log("a")');
164+
harness
165+
.expectFile('dist/index.html')
166+
.content.toContain('<script src="extra.js" defer></script>');
167+
});
168+
169+
it('uses default bundleName when bundleName is empty string', async () => {
170+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
171+
172+
harness.useTarget('build', {
173+
...BASE_OPTIONS,
174+
scripts: [{ input: 'src/test-script-a.js', bundleName: '' }],
175+
});
176+
177+
const { result } = await harness.executeOnce();
178+
179+
expect(result?.success).toBe(true);
180+
181+
harness.expectFile('dist/scripts.js').content.toContain('console.log("a")');
182+
harness
183+
.expectFile('dist/index.html')
184+
.content.toContain('<script src="scripts.js" defer></script>');
185+
});
186+
187+
it('processes multiple scripts with no bundleName into a single output', async () => {
188+
await harness.writeFiles({
189+
'src/test-script-a.js': 'console.log("a");',
190+
'src/test-script-b.js': 'console.log("b");',
191+
});
192+
193+
harness.useTarget('build', {
194+
...BASE_OPTIONS,
195+
scripts: [{ input: 'src/test-script-a.js' }, { input: 'src/test-script-b.js' }],
196+
});
197+
198+
const { result } = await harness.executeOnce();
199+
200+
expect(result?.success).toBe(true);
201+
202+
harness.expectFile('dist/scripts.js').content.toContain('console.log("a")');
203+
harness.expectFile('dist/scripts.js').content.toContain('console.log("b")');
204+
harness
205+
.expectFile('dist/index.html')
206+
.content.toContain('<script src="scripts.js" defer></script>');
207+
});
208+
209+
it('processes multiple scripts with same bundleName into a single output', async () => {
210+
await harness.writeFiles({
211+
'src/test-script-a.js': 'console.log("a");',
212+
'src/test-script-b.js': 'console.log("b");',
213+
});
214+
215+
harness.useTarget('build', {
216+
...BASE_OPTIONS,
217+
scripts: [
218+
{ input: 'src/test-script-a.js', bundleName: 'extra' },
219+
{ input: 'src/test-script-b.js', bundleName: 'extra' },
220+
],
221+
});
222+
223+
const { result } = await harness.executeOnce();
224+
225+
expect(result?.success).toBe(true);
226+
227+
harness.expectFile('dist/extra.js').content.toContain('console.log("a")');
228+
harness.expectFile('dist/extra.js').content.toContain('console.log("b")');
229+
harness
230+
.expectFile('dist/index.html')
231+
.content.toContain('<script src="extra.js" defer></script>');
232+
});
233+
234+
it('processes multiple scripts with different bundleNames into separate outputs', async () => {
235+
await harness.writeFiles({
236+
'src/test-script-a.js': 'console.log("a");',
237+
'src/test-script-b.js': 'console.log("b");',
238+
});
239+
240+
harness.useTarget('build', {
241+
...BASE_OPTIONS,
242+
scripts: [
243+
{ input: 'src/test-script-a.js', bundleName: 'extra' },
244+
{ input: 'src/test-script-b.js', bundleName: 'other' },
245+
],
246+
});
247+
248+
const { result } = await harness.executeOnce();
249+
250+
expect(result?.success).toBe(true);
251+
252+
harness.expectFile('dist/extra.js').content.toContain('console.log("a")');
253+
harness.expectFile('dist/other.js').content.toContain('console.log("b")');
254+
harness
255+
.expectFile('dist/index.html')
256+
.content.toContain('<script src="extra.js" defer></script>');
257+
harness
258+
.expectFile('dist/index.html')
259+
.content.toContain('<script src="other.js" defer></script>');
260+
});
261+
262+
it('preserves order of multiple scripts in single output', async () => {
263+
await harness.writeFiles({
264+
'src/test-script-a.js': 'console.log("a");',
265+
'src/test-script-b.js': 'console.log("b");',
266+
'src/test-script-c.js': 'console.log("c");',
267+
'src/test-script-d.js': 'console.log("d");',
268+
});
269+
270+
harness.useTarget('build', {
271+
...BASE_OPTIONS,
272+
scripts: [
273+
{ input: 'src/test-script-c.js' },
274+
{ input: 'src/test-script-d.js' },
275+
{ input: 'src/test-script-b.js' },
276+
{ input: 'src/test-script-a.js' },
277+
],
278+
});
279+
280+
const { result } = await harness.executeOnce();
281+
282+
expect(result?.success).toBe(true);
283+
284+
harness
285+
.expectFile('dist/scripts.js')
286+
.content.toMatch(
287+
/console\.log\("c"\)[;\s]+console\.log\("d"\)[;\s]+console\.log\("b"\)[;\s]+console\.log\("a"\)/,
288+
);
289+
});
290+
291+
it('preserves order of multiple scripts with different bundleNames', async () => {
292+
await harness.writeFiles({
293+
'src/test-script-a.js': 'console.log("a");',
294+
'src/test-script-b.js': 'console.log("b");',
295+
'src/test-script-c.js': 'console.log("c");',
296+
'src/test-script-d.js': 'console.log("d");',
297+
});
298+
299+
harness.useTarget('build', {
300+
...BASE_OPTIONS,
301+
scripts: [
302+
{ input: 'src/test-script-c.js', bundleName: 'other' },
303+
{ input: 'src/test-script-d.js', bundleName: 'extra' },
304+
{ input: 'src/test-script-b.js', bundleName: 'extra' },
305+
{ input: 'src/test-script-a.js', bundleName: 'other' },
306+
],
307+
});
308+
309+
const { result } = await harness.executeOnce();
310+
311+
expect(result?.success).toBe(true);
312+
313+
harness
314+
.expectFile('dist/other.js')
315+
.content.toMatch(/console\.log\("c"\)[;\s]+console\.log\("a"\)/);
316+
harness
317+
.expectFile('dist/extra.js')
318+
.content.toMatch(/console\.log\("d"\)[;\s]+console\.log\("b"\)/);
319+
harness
320+
.expectFile('dist/index.html')
321+
.content.toMatch(
322+
/<script src="other.js" defer><\/script>\s*<script src="extra.js" defer><\/script>/,
323+
);
324+
});
325+
326+
it('adds script element to index when inject is true', async () => {
327+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
328+
329+
harness.useTarget('build', {
330+
...BASE_OPTIONS,
331+
scripts: [{ input: 'src/test-script-a.js', inject: true }],
332+
});
333+
334+
const { result } = await harness.executeOnce();
335+
336+
expect(result?.success).toBe(true);
337+
338+
harness.expectFile('dist/scripts.js').content.toContain('console.log("a")');
339+
harness
340+
.expectFile('dist/index.html')
341+
.content.toContain('<script src="scripts.js" defer></script>');
342+
});
343+
344+
it('does not add script element to index when inject is false', async () => {
345+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
346+
347+
harness.useTarget('build', {
348+
...BASE_OPTIONS,
349+
scripts: [{ input: 'src/test-script-a.js', inject: false }],
350+
});
351+
352+
const { result } = await harness.executeOnce();
353+
354+
expect(result?.success).toBe(true);
355+
356+
// `inject: false` causes the bundleName to be the input file name
357+
harness.expectFile('dist/test-script-a.js').content.toContain('console.log("a")');
358+
harness
359+
.expectFile('dist/index.html')
360+
.content.not.toContain('<script src="test-script-a.js" defer></script>');
361+
});
362+
363+
it('does not add script element to index with bundleName when inject is false', async () => {
364+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
365+
366+
harness.useTarget('build', {
367+
...BASE_OPTIONS,
368+
scripts: [{ input: 'src/test-script-a.js', bundleName: 'extra', inject: false }],
369+
});
370+
371+
const { result } = await harness.executeOnce();
372+
373+
expect(result?.success).toBe(true);
374+
375+
harness.expectFile('dist/extra.js').content.toContain('console.log("a")');
376+
harness
377+
.expectFile('dist/index.html')
378+
.content.not.toContain('<script src="extra.js" defer></script>');
379+
});
380+
381+
it('shows the output script as a chunk entry in the logging output', async () => {
382+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
383+
384+
harness.useTarget('build', {
385+
...BASE_OPTIONS,
386+
scripts: [{ input: 'src/test-script-a.js' }],
387+
});
388+
389+
const { result, logs } = await harness.executeOnce();
390+
391+
expect(result?.success).toBe(true);
392+
393+
expect(logs).toContain(
394+
jasmine.objectContaining({ message: jasmine.stringMatching(/scripts\.js.+\d+ bytes/) }),
395+
);
396+
});
397+
398+
it('shows the output script as a chunk entry with bundleName in the logging output', async () => {
399+
await harness.writeFile('src/test-script-a.js', 'console.log("a");');
400+
401+
harness.useTarget('build', {
402+
...BASE_OPTIONS,
403+
scripts: [{ input: 'src/test-script-a.js', bundleName: 'extra' }],
404+
});
405+
406+
const { result, logs } = await harness.executeOnce();
407+
408+
expect(result?.success).toBe(true);
409+
410+
expect(logs).toContain(
411+
jasmine.objectContaining({ message: jasmine.stringMatching(/extra\.js.+\d+ bytes/) }),
412+
);
413+
});
414+
});
131415
});
132416
});

0 commit comments

Comments
 (0)