@@ -266,6 +266,122 @@ describe('ConfigWriter', function () {
266266 it ( 'should allow for an empty flow' ) ;
267267 it ( 'should allow for a filename as input' ) ;
268268
269+ it ( 'should deduplicate blocks' , function ( ) {
270+ var flow = new Flow ( {
271+ steps : {
272+ js : [ 'concat' , 'uglifyjs' ]
273+ }
274+ } ) ;
275+ var doubleBlocks = [ blocks [ 0 ] , blocks [ 0 ] ] ;
276+ var file = helpers . createFile ( 'foo' , 'app' , doubleBlocks ) ;
277+ var c = new ConfigWriter ( flow , {
278+ input : 'app' ,
279+ dest : 'dist' ,
280+ staging : '.tmp'
281+ } ) ;
282+ var config = c . process ( file ) ;
283+ var expected = helpers . normalize ( {
284+ concat : {
285+ generated : {
286+ files : [ {
287+ dest : '.tmp/concat/scripts/site.js' ,
288+ src : [ 'app/foo.js' , 'app/bar.js' , 'app/baz.js' ]
289+ } ]
290+ }
291+ } ,
292+ uglify : {
293+ generated : {
294+ files : [ {
295+ dest : 'dist/scripts/site.js' ,
296+ src : [ '.tmp/concat/scripts/site.js' ]
297+ } ]
298+ }
299+ }
300+ } ) ;
301+
302+ assert . deepEqual ( config , expected ) ;
303+ } ) ;
304+ it ( 'should deduplicate blocks across files' , function ( ) {
305+ var flow = new Flow ( {
306+ steps : {
307+ js : [ 'concat' , 'uglifyjs' ]
308+ }
309+ } ) ;
310+ var file = helpers . createFile ( 'foo' , 'app' , blocks ) ;
311+ var c = new ConfigWriter ( flow , {
312+ input : 'app' ,
313+ dest : 'dist' ,
314+ staging : '.tmp'
315+ } ) ;
316+ var firstConfig = c . process ( file ) ;
317+ var repeatConfig = c . process ( file ) ;
318+ var expectedFirst = helpers . normalize ( {
319+ concat : {
320+ generated : {
321+ files : [ {
322+ dest : '.tmp/concat/scripts/site.js' ,
323+ src : [ 'app/foo.js' , 'app/bar.js' , 'app/baz.js' ]
324+ } ]
325+ }
326+ } ,
327+ uglify : {
328+ generated : {
329+ files : [ {
330+ dest : 'dist/scripts/site.js' ,
331+ src : [ '.tmp/concat/scripts/site.js' ]
332+ } ]
333+ }
334+ }
335+ } ) ;
336+ var expectedRepeat = helpers . normalize ( {
337+ concat : {
338+ generated : { }
339+ } ,
340+ uglify : {
341+ generated : { }
342+ }
343+ } ) ;
344+
345+ assert . deepEqual ( firstConfig , expectedFirst ) ;
346+ assert . deepEqual ( repeatConfig , expectedRepeat ) ;
347+ } ) ;
348+ it ( 'should throw with conflicting blocks' , function ( ) {
349+ var flow = new Flow ( {
350+ steps : {
351+ js : [ 'concat' , 'uglifyjs' ]
352+ }
353+ } ) ;
354+ var conflictBlock = {
355+ type : 'js' ,
356+ dest : 'scripts/site.js' ,
357+ searchPath : [ ] ,
358+ indent : ' ' ,
359+ src : [
360+ 'foo.js' ,
361+ 'bar.js' ,
362+ 'baz.js' ,
363+ 'fail.js'
364+ ] ,
365+ raw : [
366+ ' <!-- build:js scripts/site.js -->' ,
367+ ' <script src="foo.js"></script>' ,
368+ ' <script src="bar.js"></script>' ,
369+ ' <script src="baz.js"></script>' ,
370+ ' <script src="fail.js"></script>' ,
371+ ' <!-- endbuild -->'
372+ ]
373+ } ;
374+ var file = helpers . createFile ( 'foo' , 'app' , [ blocks [ 0 ] , conflictBlock ] ) ;
375+ var c = new ConfigWriter ( flow , {
376+ input : 'app' ,
377+ dest : 'dist' ,
378+ staging : '.tmp'
379+ } ) ;
380+ assert . throws ( function ( ) {
381+ c . process ( file ) ;
382+ } ) ;
383+ } ) ;
384+
269385 describe ( 'stepWriters' , function ( ) {
270386 it ( 'should return all writers if called without block type' , function ( ) {
271387 var flow = new Flow ( {
0 commit comments