Created
January 14, 2015 23:13
-
-
Save jfarid27/744c3a69fe88464603ab to your computer and use it in GitHub Desktop.
prototype gulpfile.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gulp = require('gulp'), | |
gutil = require('gulp-util'), | |
gbower = require('gulp-bower'), | |
bower = require('bower'), | |
fs = require('fs'), | |
del = require('del'); | |
gulp.task('default', ['test'], function(){ | |
return | |
}) | |
gulp.task('loadBower', function(){ | |
gbower() | |
}) | |
gulp.task('gbower',['loadBower', 'clean'], function(){ | |
return gbower('./target/js') | |
}) | |
gulp.task ('prepare',['gbower'], function (done) { | |
gulp.src(["src/test/js/**/*.js", "src/main/js/**/*.js"]) | |
.pipe(gulp.dest('target/js')) | |
.on('end', function(){ | |
var head = 'var allTestFiles = [];' + | |
'var TEST_REGEXP = new RegExp("spec\\\\.js$");var pathToModule = function(path) {' + | |
'var baseRep = new RegExp("^\/base\/"); var jsRep = new RegExp("\\\\.js$"); ' + | |
'return path.replace(baseRep, "").replace(jsRep, ""); };' + | |
'Object.keys(window.__karma__.files).forEach(function(file) { ' + | |
' if (TEST_REGEXP.test(file)) { ' + | |
' allTestFiles.push(pathToModule(file)); ' + | |
' } ' + | |
'});require.config({ ' | |
var footer = "'deps': allTestFiles ,'callback': window.__karma__.start })" | |
//load base require | |
var rjs = require('./require.json') | |
rjs.baseUrl = '/base' | |
rjs.paths = {} | |
//Add more paths to require rjs for local gbower deps | |
bower.commands.list([], {paths: true, json: true}) | |
.on('end', function(results){ | |
var locals = recursePkgMain(results) | |
for (index in locals){ | |
rjs.paths[locals[index].package] = [locals[index].main] | |
} | |
for (index in locals){ | |
var shims = locals[index].shim | |
var packageExports = shims? Object.keys(shims) : [] | |
if (packageExports.length > 0){ | |
for (shimIndex in packageExports){ | |
rjs.shim[packageExports[shimIndex]] = locals[index].shim[packageExports[shimIndex]] | |
} | |
} | |
} | |
var body = "" | |
for (keyIndex in Object.keys(rjs)){ | |
var key = Object.keys(rjs)[keyIndex] | |
var dep = "" + key + ": " + JSON.stringify(rjs[key]) + ", " | |
body = body.concat(dep) | |
} | |
var buffer = new Buffer(head + body + footer) | |
fs | |
.writeFile('./target/require.test.main.js', buffer) | |
done() | |
}) | |
function recursePkgMain(package){ | |
var pkgMeta = package.pkgMeta | |
var deps = pkgMeta.dependencies ? Object.keys(pkgMeta.dependencies) | |
: undefined | |
var localMains = [] | |
for( index in deps){ | |
var key = deps[index] | |
if (pkgMeta.dependencies[key].indexOf('../') >= 0){ | |
var localMain = { | |
main: key + '/' + package.dependencies[key].pkgMeta.main.split('.js')[0], | |
package: key, | |
shim : package.dependencies[key].pkgMeta.shim ? package.dependencies[key].pkgMeta.shim : undefined | |
} | |
localMains | |
.push(localMain) | |
} else { | |
var main = package.dependencies[key].pkgMeta.main | |
var cleanMain = (main.indexOf('./') >= 0) ? | |
main.split('./')[1] : main | |
var localMain = { | |
main: key + '/' + cleanMain.split('.js')[0], | |
package: key, | |
shim : undefined | |
} | |
localMains | |
.push(localMain) | |
} | |
} | |
if (localMains.length > 0){ | |
var fullMains = localMains | |
for (index in localMains){ | |
var subPackage = package.dependencies[localMains[index].package] | |
fullmains = fullMains | |
.concat(recursePkgMain(subPackage)) | |
} | |
return fullMains | |
} | |
return undefined | |
} | |
}); | |
}); | |
gulp.task('test',['prepare'], function (done) { | |
var karma = require('karma').server; | |
karma.start({ | |
configFile: __dirname + '/src/test/js/karma.conf.js', | |
singleRun: true | |
}, done); | |
}); | |
gulp.task('bdd',['prepare'], function (done) { | |
var karma = require('karma').server; | |
karma.start({ | |
configFile: __dirname + '/src/test/js/karma.conf.js', | |
singleRun: false | |
}, done); | |
}); | |
gulp.task('clean', function (cb) { | |
del([ | |
'target/js/**' | |
], cb); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment