ft-webplatform/test/webstorm-karma.js

78 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-09-28 12:04:16 +00:00
/* eslint-disable no-var */
(function(global) {
var karma = global.__karma__;
var requirejs = global.requirejs;
var locationPathname = global.location.pathname;
if (!karma || !requirejs) {
return;
}
function normalizePath(path) {
var i = 0;
var normalized = [];
var parts = path
.split('?')[0] // cut off GET params, used by noext requirejs plugin
.split('/');
for (i; i < parts.length; i++) {
if (parts[i] === '.') {
continue;
}
if (parts[i] === '..' && normalized.length && normalized[normalized.length - 1] !== '..') {
normalized.pop();
continue;
}
normalized.push(parts[i]);
}
return normalized.join('/');
}
function patchRequireJS(files, originalLoadFn) {
var IS_DEBUG = /debug\.html$/.test(locationPathname);
requirejs.load = function(context, moduleName, url) {
url = normalizePath(url);
if (files.hasOwnProperty(url) && !IS_DEBUG) {
url = url + '?' + files[url];
}
if (url.indexOf('/base') !== 0) {
url = '/base/' + url;
}
return originalLoadFn.call(this, context, moduleName, url);
};
let originalDefine = global.define;
global.define = function(name, deps, m) {
if (typeof name === 'string') {
originalDefine('/base/src/' + name, [name], function(result) { return result; });
}
return originalDefine(name, deps, m);
};
}
function requireTests() {
var TEST_REGEXP = /(spec)\.js$/i;
var allTestFiles = ['/base/test/unit/setup.js'];
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
allTestFiles.push(file);
}
});
require(allTestFiles, window.__karma__.start);
}
karma.loaded = function() {}; // make it async
patchRequireJS(karma.files, requirejs.load);
requireTests();
})(window);