blob: a00a8c25d7d22259f746db9477b3cda07fecc509 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var FILE_SEPARATOR = process.env.FILE_SEPARATOR;
var PROJECT_CONFIG = process.env.PROJECT_CONFIG;
var BASE_DIR = process.env.BASE_DIR;
var AUTOWATCH = Boolean(process.env.AUTOWATCH);
var KARMA_NETBEANS_REPORTER = process.env.KARMA_NETBEANS_REPORTER;
var COVERAGE = Boolean(process.env.COVERAGE);
var COVERAGE_DIR = process.env.COVERAGE_DIR;
var DEBUG = Boolean(process.env.DEBUG);
var BROWSERS_MESSAGE = '$NB$netbeans browsers %s';
var util = require('util');
var projectConf = require(PROJECT_CONFIG);
var printMessage = function() {
var args = Array.prototype.slice.call(arguments);
process.stdout.write(util.format.apply(null, args) + '\n');
};
var arrayUnique = function(input) {
return input.filter(function (e, i, arr) {
return arr.lastIndexOf(e) === i;
});
};
var arrayRemove = function(input, value) {
var index = input.indexOf(value);
if (index > -1) {
input.splice(index, 1);
}
};
module.exports = function(config) {
projectConf(config);
if (DEBUG) {
printMessage('NetBeans: Coverage is automatically disabled in Karma Debug mode.');
}
// base path
if (config.basePath) {
if (config.basePath.substr(0, 1) === '/' // unix
|| config.basePath.substr(1, 2) === ':\\') { // windows
// noop
} else {
config.basePath = BASE_DIR + FILE_SEPARATOR + config.basePath;
}
} else {
config.basePath = BASE_DIR + FILE_SEPARATOR;
}
config.reporters = config.reporters || [];
config.reporters.push('netbeans');
if (COVERAGE) {
config.reporters.push('coverage');
} else if (DEBUG) {
arrayRemove(config.reporters, 'coverage');
}
config.reporters = arrayUnique(config.reporters);
config.plugins = config.plugins || [];
config.plugins.push(KARMA_NETBEANS_REPORTER);
if (COVERAGE) {
config.plugins.push('karma-coverage');
}
config.plugins = arrayUnique(config.plugins);
printMessage(BROWSERS_MESSAGE, config.browsers.join(','));
config.colors = true;
config.autoWatch = AUTOWATCH;
config.singleRun = false;
if (COVERAGE) {
var nbCoverageReporter = {
type: 'clover',
dir: COVERAGE_DIR + FILE_SEPARATOR,
file: 'clover.xml'
};
if (config.coverageReporter) {
if (config.coverageReporter.reporters) {
config.coverageReporter.reporters.push(nbCoverageReporter);
} else {
config.coverageReporter = {
reporters: [
nbCoverageReporter,
config.coverageReporter
]
};
}
} else {
config.coverageReporter = nbCoverageReporter;
}
} else if (DEBUG
&& config.preprocessors) {
for (var property in config.preprocessors) {
var prep = config.preprocessors[property];
if (typeof prep === 'object'
&& prep.constructor === Array) {
arrayRemove(prep, 'coverage');
}
}
}
};