mirror of
https://github.com/nasa/openmct.git
synced 2024-12-23 15:02:23 +00:00
32ab324eee
Update test runner to provide analogous require configuration behavior, such that scripts which utilize libraries exposed from bundles via bundle.json can be unit tested appropriately. Necessary after capabilities added by WTD-568.
177 lines
6.8 KiB
HTML
177 lines
6.8 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<link rel="stylesheet"
|
|
type="text/css"
|
|
href="platform/framework/test/lib/css/jasmine.css">
|
|
<script type="text/javascript"
|
|
src="platform/framework/lib/es6-promise-2.0.0.min.js">
|
|
</script>
|
|
<script type="text/javascript"
|
|
src="platform/framework/lib/require.js">
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
window.Promise = window.Promise || ES6Promise.Promise;
|
|
require(
|
|
{
|
|
paths: {
|
|
'jasmine': 'platform/framework/test/lib/jasmine',
|
|
'jasmine-html': 'platform/framework/test/lib/jasmine-html',
|
|
'blanket-jasmine': 'platform/framework/test/lib/blanket_jasmine',
|
|
'console-runner': 'platform/framework/test/lib/console-runner'
|
|
},
|
|
shim: {
|
|
'jasmine': {
|
|
'exports': 'jasmine'
|
|
},
|
|
'jasmine-html': {
|
|
'exports': 'jasmine',
|
|
'deps': ['jasmine']
|
|
},
|
|
'console-runner': {
|
|
'exports': 'jasmine',
|
|
'deps': ['jasmine']
|
|
},
|
|
'blanket-jasmine': {
|
|
'exports': 'blanket',
|
|
'deps': ['jasmine']
|
|
}
|
|
}
|
|
},
|
|
[
|
|
'blanket-jasmine',
|
|
'jasmine-html',
|
|
'console-runner'
|
|
],
|
|
function () {
|
|
"use strict";
|
|
|
|
// Utility function; load a JSON definition
|
|
function loadJSON(file, callback) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("GET", file);
|
|
xhr.onreadystatechange = function () {
|
|
if (xhr.readyState === 4) { // DONE
|
|
try {
|
|
callback(JSON.parse(xhr.response));
|
|
} catch (e) {
|
|
// No suite defined, so no tests
|
|
callback([]);
|
|
}
|
|
}
|
|
}
|
|
xhr.send();
|
|
}
|
|
|
|
// Run Jasmine upon full declared suite.
|
|
// Called after all tests loaded.
|
|
function runJasmine() {
|
|
var jasmineEnv = jasmine.getEnv(),
|
|
htmlReporter,
|
|
titleReporter;
|
|
jasmineEnv.updateInterval = 250;
|
|
|
|
htmlReporter = new jasmine.HtmlReporter();
|
|
//https://github.com/jcarver989/phantom-jasmine/issues/2
|
|
window.console_reporter = new jasmine.ConsoleReporter();
|
|
|
|
titleReporter = new jasmine.Reporter();
|
|
titleReporter.reportRunnerResults = function (runner) {
|
|
document.title = runner.results().passed() ?
|
|
"PASSING" : "FAILING";
|
|
};
|
|
|
|
jasmineEnv.addReporter(htmlReporter);
|
|
jasmineEnv.addReporter(new jasmine.BlanketReporter());
|
|
jasmineEnv.addReporter(window.console_reporter);
|
|
jasmineEnv.addReporter(titleReporter);
|
|
jasmineEnv.specFilter = function (spec) {
|
|
return htmlReporter.specFilter(spec);
|
|
};
|
|
jasmineEnv.currentRunner().execute();
|
|
}
|
|
|
|
function lookupSource(component) {
|
|
return component.src;
|
|
}
|
|
|
|
function lookupSpec(component) {
|
|
return component.spec;
|
|
}
|
|
|
|
// Run a full list of specs.
|
|
// Should be done after loading and path-correcting all specs
|
|
function runSpecs(components) {
|
|
blanket.options({'filter': components.map(lookupSource)});
|
|
require(components.map(lookupSpec), runJasmine);
|
|
}
|
|
|
|
// Run all test suites contained in all bundles
|
|
function runSuites(bundles) {
|
|
var components = [],
|
|
configuration = { baseUrl: "" },
|
|
count = 0;
|
|
|
|
function addSuite(bundle) {
|
|
function fixPath(name) {
|
|
return {
|
|
spec: bundle + "/test/" + name + "Spec",
|
|
src: bundle + "/src/" + name
|
|
};
|
|
}
|
|
|
|
function addSpecs(suiteSpecs) {
|
|
components = components.concat(suiteSpecs.map(fixPath));
|
|
count += 1;
|
|
if (count === bundles.length) {
|
|
require.config(configuration);
|
|
runSpecs(components);
|
|
}
|
|
}
|
|
|
|
loadJSON(bundle + "/test/suite.json", addSpecs);
|
|
}
|
|
|
|
// Some AMD modules are configured in bundle.json files,
|
|
// so those need to be read and a require definition built
|
|
function readConfig(bundle, definition) {
|
|
var lib = bundle.libraries || "lib",
|
|
bundleConfig = definition.configuration || {};
|
|
|
|
// Merge in paths
|
|
Object.keys(bundleConfig.paths || {}).forEach(function (path) {
|
|
configuration.paths = configuration.paths || {};
|
|
configuration.paths[path] =
|
|
bundle + "/" + lib + "/" + bundleConfig.paths[path];
|
|
});
|
|
|
|
// Merge in shims
|
|
Object.keys(bundleConfig.shim || {}).forEach(function (shim) {
|
|
configuration.shim = configuration.shim || {};
|
|
configuration.shim[shim] = bundleConfig.shim[shim];
|
|
});
|
|
}
|
|
|
|
function addBundle(bundle) {
|
|
function readConfigAndContinue(definition) {
|
|
readConfig(bundle, definition);
|
|
addSuite(bundle);
|
|
}
|
|
|
|
loadJSON(bundle + "/bundle.json", readConfigAndContinue);
|
|
}
|
|
|
|
bundles.forEach(addBundle);
|
|
}
|
|
|
|
// Set the ball rolling; load and run all test suites
|
|
loadJSON("bundles.json", runSuites);
|
|
}
|
|
);
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|