test.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. const { AdvancedBase } = require("@heyputer/puter-js-common");
  2. const CoreModule = require("../src/CoreModule");
  3. const { Context } = require("../src/util/context");
  4. class TestKernel extends AdvancedBase {
  5. constructor () {
  6. super();
  7. this.modules = [];
  8. this.logfn_ = (...a) => a;
  9. }
  10. add_module (module) {
  11. this.modules.push(module);
  12. }
  13. boot () {
  14. const { consoleLogManager } = require('../src/util/consolelog');
  15. consoleLogManager.initialize_proxy_methods();
  16. consoleLogManager.decorate_all(({ manager, replace }, ...a) => {
  17. replace(...this.logfn_(...a));
  18. });
  19. const { Container } = require('../src/services/Container');
  20. const services = new Container();
  21. this.services = services;
  22. // app.set('services', services);
  23. const root_context = Context.create({
  24. services,
  25. }, 'app');
  26. globalThis.root_context = root_context;
  27. root_context.arun(async () => {
  28. await this._install_modules();
  29. // await this._boot_services();
  30. });
  31. // Error.stackTraceLimit = Infinity;
  32. Error.stackTraceLimit = 200;
  33. }
  34. async _install_modules () {
  35. const { services } = this;
  36. for ( const module of this.modules ) {
  37. await module.install(Context.get());
  38. }
  39. // Real kernel initializes services here, but in this test kernel
  40. // we don't initialize any services.
  41. // Real kernel adds legacy services here but these will break
  42. // the test kernel.
  43. services.ready.resolve();
  44. // provide services to helpers
  45. // const { tmp_provide_services } = require('../src/helpers');
  46. // tmp_provide_services(services);
  47. }
  48. }
  49. const k = new TestKernel();
  50. k.add_module(new CoreModule());
  51. k.boot();
  52. const do_after_tests_ = [];
  53. // const do_after_tests = (fn) => {
  54. // do_after_tests_.push(fn);
  55. // };
  56. const repeat_after = (fn) => {
  57. fn();
  58. do_after_tests_.push(fn);
  59. };
  60. let total_passed = 0;
  61. let total_failed = 0;
  62. for ( const name in k.services.instances_ ) {
  63. console.log('name', name)
  64. const ins = k.services.instances_[name];
  65. ins.construct();
  66. if ( ! ins._test || typeof ins._test !== 'function' ) {
  67. continue;
  68. }
  69. let passed = 0;
  70. let failed = 0;
  71. repeat_after(() => {
  72. console.log(`\x1B[33;1m=== [ Service :: ${name} ] ===\x1B[0m`);
  73. });
  74. const testapi = {
  75. assert: (condition, name) => {
  76. name = name || condition.toString();
  77. if ( condition() ) {
  78. passed++;
  79. repeat_after(() => console.log(`\x1B[32;1m ✔ ${name}\x1B[0m`));
  80. } else {
  81. failed++;
  82. repeat_after(() => console.log(`\x1B[31;1m ✘ ${name}\x1B[0m`));
  83. }
  84. }
  85. };
  86. ins._test(testapi);
  87. total_passed += passed;
  88. total_failed += failed;
  89. }
  90. console.log(`\x1B[36;1m<===\x1B[0m ` +
  91. 'ASSERTION OUTPUTS ARE REPEATED BELOW' +
  92. ` \x1B[36;1m===>\x1B[0m`);
  93. for ( const fn of do_after_tests_ ) {
  94. fn();
  95. }
  96. console.log(`\x1B[36;1m=== [ Summary ] ===\x1B[0m`);
  97. console.log(`Passed: ${total_passed}`);
  98. console.log(`Failed: ${total_failed}`);