1
- /* jshint camelcase:false, evil:true, node:true */
1
+ /* jshint camelcase:false, node:true */
2
2
3
3
"use strict" ;
4
4
@@ -166,7 +166,7 @@ module.exports = function(grunt) {
166
166
jshintrc : ".jshintrc"
167
167
} ,
168
168
gruntfile : {
169
- src : "Gruntfile.js"
169
+ src : [ "Gruntfile.js" , "tasks/*.js" ]
170
170
} ,
171
171
demo : {
172
172
src : "demos/*.js"
@@ -217,6 +217,9 @@ module.exports = function(grunt) {
217
217
grunt . loadNpmTasks ( "grunt-contrib-watch" ) ;
218
218
grunt . loadNpmTasks ( "grunt-include-replace" ) ;
219
219
220
+ // Load custom tasks
221
+ grunt . loadTasks ( "tasks" ) ;
222
+
220
223
// Default task.
221
224
grunt . registerTask ( "default" , [ "test" ] ) ;
222
225
@@ -228,238 +231,4 @@ module.exports = function(grunt) {
228
231
grunt . registerTask ( "rhino" , [ "clean:build" , "jshint" , "concat" , "test_rhino" ] ) ;
229
232
230
233
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
- } ) ;
465
234
} ;
0 commit comments