2018-10-20 11:38:48 +02:00
|
|
|
/* global __karma__ */
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
2020-01-18 01:13:38 +01:00
|
|
|
import utils from './utils';
|
2018-10-20 11:38:48 +02:00
|
|
|
|
|
|
|
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) {
|
2020-07-13 19:20:05 +02:00
|
|
|
var descr = json.description || (json.description = description);
|
2020-11-23 23:58:03 +01:00
|
|
|
|
|
|
|
var config = json.config;
|
|
|
|
var options = config.options || (config.options = {});
|
|
|
|
|
|
|
|
// plugins are disabled by default, except if the path contains 'plugin' or there are instance plugins
|
|
|
|
if (input.indexOf('plugin') === -1 && config.plugins === undefined) {
|
|
|
|
options.plugins = options.plugins || false;
|
|
|
|
}
|
|
|
|
|
|
|
|
var chart = utils.acquireChart(config, json.options);
|
2018-10-20 11:38:48 +02:00
|
|
|
if (!inputs.png) {
|
2020-07-13 19:20:05 +02:00
|
|
|
fail(descr + '\r\nMissing PNG comparison file for ' + input);
|
2018-10-20 11:38:48 +02:00
|
|
|
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]);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-01-18 01:13:38 +01:00
|
|
|
export default {
|
2018-10-20 11:38:48 +02:00
|
|
|
specs: specsFromFixtures
|
|
|
|
};
|