72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
const Server = require('karma').Server;
|
|
const closure = require('closure-util');
|
|
const path = require('path');
|
|
const processCliArgs = require('karma/lib/cli').process;
|
|
|
|
/**
|
|
* Start Karma. This prepends the Karma `files` config with all library files
|
|
* sorted in dependency order.
|
|
* @param {Object} config Karma options.
|
|
* @param {Manager} manager The dependency file manager.
|
|
* @param {function(Error)} callback Called with any error.
|
|
*/
|
|
function serve(config, manager, callback) {
|
|
function exit(code) {
|
|
let error = null;
|
|
if (code) {
|
|
error = new Error(`Karma exited with ${code}`);
|
|
error.code = code;
|
|
}
|
|
callback(error);
|
|
}
|
|
const server = new Server(config, exit);
|
|
|
|
const files = server.get('config.files');
|
|
const dependencies = manager.getDependencies().map(script => script.path);
|
|
dependencies.reverse().forEach(filePath => {
|
|
files.unshift({
|
|
pattern: filePath,
|
|
included: true,
|
|
served: true,
|
|
watched: true
|
|
});
|
|
});
|
|
|
|
// stop goog base.js from trying to load deps.js
|
|
files.unshift({
|
|
pattern: path.resolve(__dirname, '../test/no-deps.js'),
|
|
included: true,
|
|
served: true,
|
|
watched: false
|
|
});
|
|
|
|
server.start();
|
|
}
|
|
|
|
function main(config, callback) {
|
|
const manager = new closure.Manager({
|
|
lib: [
|
|
'src/**/*.js',
|
|
'build/ol.ext/*.js'
|
|
]
|
|
});
|
|
|
|
manager.on('error', callback);
|
|
|
|
manager.on('ready', () => {
|
|
serve(config, manager, callback);
|
|
});
|
|
}
|
|
|
|
if (require.main === module) {
|
|
const config = processCliArgs();
|
|
main(config, (err, manager) => {
|
|
if (err) {
|
|
process.stderr.write(err.message, () => process.exit(1));
|
|
return;
|
|
} else {
|
|
process.exit(0);
|
|
}
|
|
});
|
|
}
|