fixture.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. import utils from './utils';
  3. function readFile(url, callback) {
  4. var request = new XMLHttpRequest();
  5. request.onreadystatechange = function() {
  6. if (request.readyState === 4) {
  7. return callback(request.responseText);
  8. }
  9. };
  10. request.open('GET', url, false);
  11. request.send(null);
  12. }
  13. function loadConfig(url, callback) {
  14. var regex = /\.(json|js)$/i;
  15. var matches = url.match(regex);
  16. var type = matches ? matches[1] : 'json';
  17. var cfg = null;
  18. readFile(url, function(content) {
  19. switch (type) {
  20. case 'js':
  21. cfg = new Function('"use strict";' + content + ';return fixture;')();
  22. break;
  23. case 'json':
  24. cfg = JSON.parse(content);
  25. break;
  26. default:
  27. }
  28. callback(cfg);
  29. });
  30. }
  31. function specFromFixture(description, inputs) {
  32. var input = inputs.js || inputs.json;
  33. it(input, function(done) {
  34. loadConfig(input, function(json) {
  35. var chart = utils.acquireChart(json.config, json.options);
  36. if (!inputs.png) {
  37. fail('Missing PNG comparison file for ' + inputs.json);
  38. done();
  39. }
  40. utils.readImageData(inputs.png, function(expected) {
  41. expect(chart).toEqualImageData(expected, json);
  42. utils.releaseChart(chart);
  43. done();
  44. });
  45. });
  46. });
  47. }
  48. function specsFromFixtures(path) {
  49. var regex = new RegExp('(^/base/test/fixtures/' + path + '.+)\\.(png|json|js)');
  50. var inputs = {};
  51. Object.keys(__karma__.files || {}).forEach(function(file) {
  52. var matches = file.match(regex);
  53. var name = matches && matches[1];
  54. var type = matches && matches[2];
  55. if (name && type) {
  56. inputs[name] = inputs[name] || {};
  57. inputs[name][type] = file;
  58. }
  59. });
  60. return function() {
  61. Object.keys(inputs).forEach(function(key) {
  62. specFromFixture(key, inputs[key]);
  63. });
  64. };
  65. }
  66. export default {
  67. specs: specsFromFixtures
  68. };