aurelia-karma.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. (function(global) {
  2. var karma = global.__karma__;
  3. var requirejs = global.requirejs
  4. var locationPathname = global.location.pathname;
  5. if (!karma || !requirejs) {
  6. return;
  7. }
  8. function normalizePath(path) {
  9. var normalized = []
  10. var parts = path
  11. .split('?')[0] // cut off GET params, used by noext requirejs plugin
  12. .split('/')
  13. for (var i = 0; i < parts.length; i++) {
  14. if (parts[i] === '.') {
  15. continue
  16. }
  17. if (parts[i] === '..' && normalized.length && normalized[normalized.length - 1] !== '..') {
  18. normalized.pop()
  19. continue
  20. }
  21. normalized.push(parts[i])
  22. }
  23. return normalized.join('/')
  24. }
  25. function patchRequireJS(files, originalLoadFn, locationPathname) {
  26. var IS_DEBUG = /debug\.html$/.test(locationPathname)
  27. requirejs.load = function (context, moduleName, url) {
  28. url = normalizePath(url)
  29. if (files.hasOwnProperty(url) && !IS_DEBUG) {
  30. url = url + '?' + files[url]
  31. }
  32. if (url.indexOf('/base') !== 0) {
  33. url = '/base/' + url;
  34. }
  35. return originalLoadFn.call(this, context, moduleName, url)
  36. }
  37. let originalDefine = global.define;
  38. global.define = function(name, deps, m) {
  39. if (typeof name === 'string') {
  40. originalDefine('/base/src/' + name, [name], function (result) { return result; });
  41. }
  42. return originalDefine(name, deps, m);
  43. }
  44. }
  45. function requireTests() {
  46. var TEST_REGEXP = /(spec)\.js$/i;
  47. var allTestFiles = ['/base/test/unit/setup.js'];
  48. Object.keys(window.__karma__.files).forEach(function(file) {
  49. if (TEST_REGEXP.test(file)) {
  50. allTestFiles.push(file);
  51. }
  52. });
  53. require(allTestFiles, window.__karma__.start);
  54. }
  55. karma.loaded = function() {}; // make it async
  56. patchRequireJS(karma.files, requirejs.load, locationPathname);
  57. requireTests();
  58. })(window);