Chart.js/test/fixture.js
Simon Brunel 2dbf1cd1af
Add support for *.js test fixture config (#5777)
JSON doesn't support functions which are needed to create scriptable options, so implement a very basic method to load a JavaScript file exporting the config in `module.exports`. Also rename test sources (remove the `jasmine.` prefix), cleanup `karma.conf.js` and add an example .js fixture config (bubble radius option).
2018-10-20 11:38:48 +02:00

86 lines
1.8 KiB
JavaScript

/* global __karma__ */
'use strict';
var utils = require('./utils');
function readFile(url, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === 4) {
return callback(request.responseText);
}
};
request.open('GET', url, false);
request.send(null);
}
function loadConfig(url, callback) {
var regex = /\.(json|js)$/i;
var matches = url.match(regex);
var type = matches ? matches[1] : 'json';
var cfg = null;
readFile(url, function(content) {
switch (type) {
case 'js':
// eslint-disable-next-line
cfg = new Function('"use strict"; var module = {};' + content + '; return module.exports;')();
break;
case 'json':
cfg = JSON.parse(content);
break;
default:
}
callback(cfg);
});
}
function specFromFixture(description, inputs) {
var input = inputs.js || inputs.json;
it(input, function(done) {
loadConfig(input, function(json) {
var chart = utils.acquireChart(json.config, json.options);
if (!inputs.png) {
fail('Missing PNG comparison file for ' + inputs.json);
done();
}
utils.readImageData(inputs.png, function(expected) {
expect(chart).toEqualImageData(expected, json);
utils.releaseChart(chart);
done();
});
});
});
}
function specsFromFixtures(path) {
var regex = new RegExp('(^/base/test/fixtures/' + path + '.+)\\.(png|json|js)');
var inputs = {};
Object.keys(__karma__.files || {}).forEach(function(file) {
var matches = file.match(regex);
var name = matches && matches[1];
var type = matches && matches[2];
if (name && type) {
inputs[name] = inputs[name] || {};
inputs[name][type] = file;
}
});
return function() {
Object.keys(inputs).forEach(function(key) {
specFromFixture(key, inputs[key]);
});
};
}
module.exports = {
specs: specsFromFixtures
};