test.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /* eslint-disable */ // so that the CI linting process doesn't fail - this will be removed in the final revision
  2. const jsl = require("svjsl");
  3. const fs = require("fs-extra");
  4. const cp = require("child_process");
  5. const requireUncached = require('import-fresh');
  6. const { resolve, join } = require("path");
  7. const { XMLHttpRequest } = require("xmlhttprequest");
  8. const debug = require("../src/verboseLogging");
  9. const settings = require("../settings");
  10. var col = { rst: jsl.colors.rst, ...jsl.colors.fg };
  11. var runningTests = false;
  12. // const baseURL = `http://127.0.0.1:${settings.httpServer.port}`;
  13. function init()
  14. {
  15. // let pingIv;
  16. // let pingJAPI = () => {
  17. // let xhr = new XMLHttpRequest();
  18. // xhr.open("GET", `${baseURL}/ping`);
  19. // xhr.onreadystatechange = () => {
  20. // if(xhr.readyState == 4 && !runningTests)
  21. // {
  22. // if(xhr.status < 300)
  23. // {
  24. // console.log(`\n\n${col.blue}${settings.info.name} is now running.${col.rst}`);
  25. // clearInterval(pingIv);
  26. // }
  27. // }
  28. // };
  29. // xhr.send();
  30. // };
  31. // pingIv = setInterval(() => pingJAPI(), settings.tests.initPingInterval);
  32. // pingJAPI();
  33. console.log(`Trying to run tests...`);
  34. runAllTests();
  35. }
  36. function runAllTests()
  37. {
  38. runningTests = true;
  39. if(process.argv.includes("--colorblind") || process.argv.includes("-c"))
  40. {
  41. col.green = jsl.colors.fg.cyan;
  42. col.red = jsl.colors.fg.magenta;
  43. }
  44. let success = true;
  45. let tests = getAllTests();
  46. let testsRun = tests.map(t => t.run());
  47. console.log(`${col.blue}Running ${tests.length} unit test scripts...${col.rst}`);
  48. Promise.allSettled(testsRun).then(results => {
  49. let allOk = true;
  50. results.forEach(r => {
  51. if(r.status == "rejected")
  52. allOk = false;
  53. });
  54. let oneSuccessful = false;
  55. console.log(`\n\n${col.green}These test scripts were successful:\n${col.rst}`);
  56. results.forEach(res => {
  57. if(res.status != "fulfilled")
  58. return;
  59. oneSuccessful = true;
  60. let meta = res.value.meta;
  61. console.log(`- ${col.green}[${meta.category}/${col.cyan}${meta.name}${col.green}]${col.rst}`);
  62. });
  63. if(!oneSuccessful)
  64. console.log("(none)");
  65. results.forEach(res => {
  66. if(res.status != "rejected")
  67. return;
  68. if(success)
  69. {
  70. console.error(`\n\n${col.red}These tests were unsuccessful:\n${col.rst}`);
  71. success = false;
  72. }
  73. let meta = res.reason.meta;
  74. let errors = res.reason.errors;
  75. console.log(`${col.red}[${meta.category}/${col.cyan}${meta.name}${col.red}]:${col.rst}`);
  76. errors.forEach(e => {
  77. console.log(` - ${e}`);
  78. });
  79. process.stdout.write("\n");
  80. });
  81. console.log(`\n${!success ? `\n${col.red}^ Some unit tests were not successful ^${col.rst}` : ""}\n`);
  82. process.exit(success ? 0 : 1);
  83. }).catch(err => {
  84. console.error(`${col.red}Error while running unit tests: ${err}\n\n${col.rst}`);
  85. process.exit(1);
  86. });
  87. }
  88. function getAllTests()
  89. {
  90. let allTests = [];
  91. let testsFolder = resolve(settings.tests.location);
  92. let testFiles = fs.readdirSync(testsFolder);
  93. testFiles.forEach(testFile => {
  94. if(testFile == "template.js")
  95. return;
  96. let testPath = join(testsFolder, testFile);
  97. try
  98. {
  99. let testScript = requireUncached(testPath); // the normal require sometimes returns outdated files out of the cache so I need to use an external module
  100. if(typeof testScript.meta == "object" && typeof testScript.run == "function")
  101. {
  102. allTests.push({
  103. meta: testScript.meta,
  104. run: testScript.run
  105. });
  106. }
  107. else
  108. console.error(`Error while reading test script "${testFile}": meta and/or run exports are missing\n(skipping)`);
  109. }
  110. catch(err)
  111. {
  112. console.error(`Error while reading test script "${testFile}": ${err}\n(skipping)`);
  113. }
  114. });
  115. return allTests;
  116. }
  117. init();