1- /* jshint camelcase:false, evil:true, node:true */
1+ /* jshint camelcase:false, node:true */
22
33"use strict" ;
44
@@ -166,7 +166,7 @@ module.exports = function(grunt) {
166166 jshintrc : ".jshintrc"
167167 } ,
168168 gruntfile : {
169- src : "Gruntfile.js"
169+ src : [ "Gruntfile.js" , "tasks/*.js" ]
170170 } ,
171171 demo : {
172172 src : "demos/*.js"
@@ -217,6 +217,9 @@ module.exports = function(grunt) {
217217 grunt . loadNpmTasks ( "grunt-contrib-watch" ) ;
218218 grunt . loadNpmTasks ( "grunt-include-replace" ) ;
219219
220+ // Load custom tasks
221+ grunt . loadTasks ( "tasks" ) ;
222+
220223 // Default task.
221224 grunt . registerTask ( "default" , [ "test" ] ) ;
222225
@@ -228,238 +231,4 @@ module.exports = function(grunt) {
228231 grunt . registerTask ( "rhino" , [ "clean:build" , "jshint" , "concat" , "test_rhino" ] ) ;
229232
230233 grunt . registerTask ( "release" , [ "test" , "clean:release" , "copy:release" , "includereplace:release" , "changelog" ] ) ;
231-
232- //Run the YUITest suite
233- grunt . registerMultiTask ( "yuitest" , "Run the YUITests for the project" , function ( ) {
234-
235- var YUITest = require ( "yuitest" ) ;
236- var CSSLint = require ( "./build/csslint-node" ) . CSSLint ; // jshint ignore:line
237- var files = this . filesSrc ;
238- var TestRunner = YUITest . TestRunner ;
239- var done = this . async ( ) ;
240- var errors = [ ] ,
241- failures = [ ] ,
242- stack = [ ] ;
243-
244- //Eval each file so the tests are brought into this scope where CSSLint and YUITest are loaded already
245- files . forEach ( function ( filepath ) {
246- eval ( grunt . file . read ( filepath ) ) ;
247- } ) ;
248-
249- // From YUITest Node CLI
250- function filterStackTrace ( stackTrace ) {
251- if ( stackTrace ) {
252- var lines = stackTrace . split ( "\n" ) ,
253- result = [ ] ,
254- i , len ;
255-
256- //skip first line, it's the error
257- for ( i = 1 , len = lines . length ; i < len ; i ++ ) {
258- if ( lines [ i ] . indexOf ( "yuitest-node" ) > - 1 ) {
259- break ;
260- } else {
261- result . push ( lines [ i ] ) ;
262- }
263- }
264-
265- return result . join ( "\n" ) ;
266- } else {
267- return "Unavailable." ;
268- }
269- }
270-
271- // From YUITest Node CLI with minor colourization changes
272- function handleEvent ( event ) {
273-
274- var message = "" ,
275- results = event . results ,
276- i , len ;
277-
278- switch ( event . type ) {
279- case TestRunner . BEGIN_EVENT :
280- message = "YUITest for Node.js\n" ;
281-
282- if ( TestRunner . _groups ) {
283- message += "Filtering on groups '" + TestRunner . _groups . slice ( 1 , - 1 ) + "'\n" ;
284- }
285- break ;
286-
287- case TestRunner . COMPLETE_EVENT :
288- message = "\nTotal tests: " + results . total + ", " +
289- ( "Failures: " + results . failed ) . red + ", " +
290- ( "Skipped: " + results . ignored ) . yellow +
291- ", Time: " + ( results . duration / 1000 ) + " seconds\n" ;
292-
293- if ( failures . length ) {
294- message += "\nTests failed:\n" . red ;
295-
296- for ( i = 0 , len = failures . length ; i < len ; i ++ ) {
297- message += "\n" + ( i + 1 ) + ") " + failures [ i ] . name + " : " + failures [ i ] . error . getMessage ( ) + "\n" ;
298- message += "Stack trace:\n" + filterStackTrace ( failures [ i ] . error . stack ) + "\n" ;
299- }
300-
301- message += "\n" ;
302- }
303-
304- if ( errors . length ) {
305- message += "\nErrors:\n" . red ;
306-
307- for ( i = 0 , len = errors . length ; i < len ; i ++ ) {
308- message += "\n" + ( i + 1 ) + ") " + errors [ i ] . name + " : " + errors [ i ] . error . message + "\n" ;
309- message += "Stack trace:\n" + filterStackTrace ( errors [ i ] . error . stack ) + "\n" ;
310- }
311-
312- message += "\n" ;
313- }
314-
315- message += "\n\n" ;
316- //Tell grunt we're done the async operation
317- done ( ) ;
318- break ;
319-
320- case TestRunner . TEST_FAIL_EVENT :
321- message = "F" . red ;
322- failures . push ( {
323- name : stack . concat ( [ event . testName ] ) . join ( " > " ) ,
324- error : event . error
325- } ) ;
326-
327- break ;
328-
329- case TestRunner . ERROR_EVENT :
330- errors . push ( {
331- name : stack . concat ( [ event . methodName ] ) . join ( " > " ) ,
332- error : event . error
333- } ) ;
334-
335- break ;
336-
337- case TestRunner . TEST_IGNORE_EVENT :
338- message = "S" . yellow ;
339- break ;
340-
341- case TestRunner . TEST_PASS_EVENT :
342- message = "." . green ;
343- break ;
344-
345- case TestRunner . TEST_SUITE_BEGIN_EVENT :
346- stack . push ( event . testSuite . name ) ;
347- break ;
348-
349- case TestRunner . TEST_CASE_COMPLETE_EVENT :
350- case TestRunner . TEST_SUITE_COMPLETE_EVENT :
351- stack . pop ( ) ;
352- break ;
353-
354- case TestRunner . TEST_CASE_BEGIN_EVENT :
355- stack . push ( event . testCase . name ) ;
356- break ;
357-
358- //no default
359- }
360-
361- grunt . log . write ( message ) ;
362- }
363- //Add event listeners
364- TestRunner . subscribe ( TestRunner . BEGIN_EVENT , handleEvent ) ;
365- TestRunner . subscribe ( TestRunner . TEST_FAIL_EVENT , handleEvent ) ;
366- TestRunner . subscribe ( TestRunner . TEST_PASS_EVENT , handleEvent ) ;
367- TestRunner . subscribe ( TestRunner . ERROR_EVENT , handleEvent ) ;
368- TestRunner . subscribe ( TestRunner . TEST_IGNORE_EVENT , handleEvent ) ;
369- TestRunner . subscribe ( TestRunner . TEST_CASE_BEGIN_EVENT , handleEvent ) ;
370- TestRunner . subscribe ( TestRunner . TEST_CASE_COMPLETE_EVENT , handleEvent ) ;
371- TestRunner . subscribe ( TestRunner . TEST_SUITE_BEGIN_EVENT , handleEvent ) ;
372- TestRunner . subscribe ( TestRunner . TEST_SUITE_COMPLETE_EVENT , handleEvent ) ;
373- TestRunner . subscribe ( TestRunner . COMPLETE_EVENT , handleEvent ) ;
374- TestRunner . run ( ) ;
375- } ) ;
376-
377- grunt . registerMultiTask ( "changelog" , "Write the changelog file" , function ( ) {
378- var done = this . async ( ) ;
379- var lastTag ;
380- var files = this . filesSrc ;
381-
382-
383- grunt . util . spawn ( {
384- cmd : "git" ,
385- args : [ "tag" ]
386- } , function ( error , result ) {
387- //Find the latest git tag
388- var tags = result . stdout . split ( "\n" ) ,
389- semver = tags [ 0 ] . replace ( "v" , "" ) . split ( "." ) ,
390- major = parseInt ( semver [ 0 ] , 10 ) ,
391- minor = parseInt ( semver [ 1 ] , 10 ) ,
392- patch = parseInt ( semver [ 2 ] , 10 ) ;
393-
394- //A simple array sort can't be used because of the comparison of
395- //the strings "0.9.9" > "0.9.10"
396- for ( var i = 1 , len = tags . length ; i < len ; i ++ ) {
397- semver = tags [ i ] . replace ( "v" , "" ) . split ( "." ) ;
398-
399- var currentMajor = parseInt ( semver [ 0 ] , 10 ) ;
400- if ( currentMajor < major ) {
401- continue ;
402- } else if ( currentMajor > major ) {
403- major = currentMajor ;
404- }
405-
406- var currentMinor = parseInt ( semver [ 1 ] , 10 ) ;
407- if ( currentMinor < minor ) {
408- continue ;
409- } else if ( currentMinor > minor ) {
410- minor = currentMinor ;
411- }
412-
413- var currentPatch = parseInt ( semver [ 2 ] , 10 ) ;
414- if ( currentPatch < patch ) {
415- continue ;
416- } else if ( currentPatch > patch ) {
417- patch = currentPatch ;
418- }
419- }
420-
421- lastTag = "v" + major + "." + minor + "." + patch ;
422-
423- grunt . verbose . write ( "Last tag: " + lastTag ) . writeln ( ) ;
424-
425- //
426- grunt . util . spawn ( {
427- cmd : "git" ,
428- args : [ "log" , "--pretty=format:'* %s (%an)'" , lastTag + "..HEAD" ]
429- } , function ( error , result ) {
430- var prettyPrint = result . stdout . split ( "'\n'" ) . join ( "\n" ) . replace ( / \" $ / , "" ) . replace ( / ^ \" / , "" ) ;
431-
432- grunt . verbose . writeln ( ) . write ( prettyPrint ) . writeln ( ) ;
433-
434- var template = "<%= grunt.template.today('mmmm d, yyyy') %> - v<%= pkg.version %>\n\n" +
435- prettyPrint + "\n\n" +
436- grunt . file . read ( files [ 0 ] ) ;
437-
438- grunt . file . write ( files [ 0 ] , grunt . template . process ( template ) ) ;
439-
440- done ( ) ;
441- } ) ;
442- } ) ;
443-
444- } ) ;
445-
446- //Run test suite through rhino
447- grunt . registerMultiTask ( "test_rhino" , "Run the test suite through rhino" , function ( ) {
448- var done = this . async ( ) ;
449- var files = this . filesSrc ;
450- var progress = files . length ;
451-
452- files . forEach ( function ( filepath ) {
453- grunt . util . spawn ( {
454- cmd : "java" ,
455- args : [ "-jar" , "lib/js.jar" , "lib/yuitest-rhino-cli.js" , "build/csslint.js" , filepath ] ,
456- opts : { stdio : "inherit" }
457- } , function ( ) {
458- progress -- ;
459- if ( progress === 0 ) {
460- done ( ) ;
461- }
462- } ) ;
463- } ) ;
464- } ) ;
465234} ;
0 commit comments