@@ -128,5 +128,289 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => {
128
128
) ;
129
129
} ) ;
130
130
} ) ;
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
+ / c o n s o l e \. l o g \( " c " \) [ ; \s ] + c o n s o l e \. l o g \( " d " \) [ ; \s ] + c o n s o l e \. l o g \( " b " \) [ ; \s ] + c o n s o l e \. l o g \( " 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 ( / c o n s o l e \. l o g \( " c " \) [ ; \s ] + c o n s o l e \. l o g \( " a " \) / ) ;
316
+ harness
317
+ . expectFile ( 'dist/extra.js' )
318
+ . content . toMatch ( / c o n s o l e \. l o g \( " d " \) [ ; \s ] + c o n s o l e \. l o g \( " b " \) / ) ;
319
+ harness
320
+ . expectFile ( 'dist/index.html' )
321
+ . content . toMatch (
322
+ / < s c r i p t s r c = " o t h e r .j s " d e f e r > < \/ s c r i p t > \s * < s c r i p t s r c = " e x t r a .j s " d e f e r > < \/ s c r i p t > / ,
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 ( / s c r i p t s \. j s .+ \d + b y t e s / ) } ) ,
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 ( / e x t r a \. j s .+ \d + b y t e s / ) } ) ,
412
+ ) ;
413
+ } ) ;
414
+ } ) ;
131
415
} ) ;
132
416
} ) ;
0 commit comments