mirror of
https://github.com/HeyPuter/puter
synced 2024-11-15 06:15:47 +00:00
159 lines
3.9 KiB
JavaScript
159 lines
3.9 KiB
JavaScript
const { AdvancedBase } = require("@heyputer/puter-js-common");
|
|
const useapi = require("useapi");
|
|
const { BaseService } = require("../exports");
|
|
const CoreModule = require("../src/CoreModule");
|
|
const { Context } = require("../src/util/context");
|
|
|
|
class TestLogger {
|
|
constructor () {
|
|
console.log(
|
|
`\x1B[36;1mBoot logger started :)\x1B[0m`,
|
|
);
|
|
}
|
|
info (...args) {
|
|
console.log(
|
|
'\x1B[36;1m[TESTKERNEL/INFO]\x1B[0m',
|
|
...args,
|
|
);
|
|
}
|
|
error (...args) {
|
|
console.log(
|
|
'\x1B[31;1m[TESTKERNEL/ERROR]\x1B[0m',
|
|
...args,
|
|
);
|
|
}
|
|
}
|
|
|
|
class TestKernel extends AdvancedBase {
|
|
constructor () {
|
|
super();
|
|
|
|
this.modules = [];
|
|
this.useapi = useapi();
|
|
|
|
this.useapi.withuse(() => {
|
|
def('Module', AdvancedBase)
|
|
def('Service', BaseService)
|
|
});
|
|
|
|
this.logfn_ = (...a) => a;
|
|
}
|
|
|
|
add_module (module) {
|
|
this.modules.push(module);
|
|
}
|
|
|
|
boot () {
|
|
const { consoleLogManager } = require('../src/util/consolelog');
|
|
consoleLogManager.initialize_proxy_methods();
|
|
|
|
consoleLogManager.decorate_all(({ manager, replace }, ...a) => {
|
|
replace(...this.logfn_(...a));
|
|
});
|
|
|
|
const { Container } = require('../src/services/Container');
|
|
|
|
this.testLogger = new TestLogger();
|
|
|
|
const services = new Container({ logger: this.testLogger });
|
|
this.services = services;
|
|
// app.set('services', services);
|
|
|
|
const root_context = Context.create({
|
|
services,
|
|
useapi: this.useapi,
|
|
}, 'app');
|
|
globalThis.root_context = root_context;
|
|
|
|
root_context.arun(async () => {
|
|
await this._install_modules();
|
|
// await this._boot_services();
|
|
});
|
|
|
|
// Error.stackTraceLimit = Infinity;
|
|
Error.stackTraceLimit = 200;
|
|
}
|
|
|
|
async _install_modules () {
|
|
const { services } = this;
|
|
|
|
for ( const module of this.modules ) {
|
|
await module.install(Context.get());
|
|
}
|
|
|
|
// Real kernel initializes services here, but in this test kernel
|
|
// we don't initialize any services.
|
|
|
|
// Real kernel adds legacy services here but these will break
|
|
// the test kernel.
|
|
|
|
services.ready.resolve();
|
|
|
|
// provide services to helpers
|
|
// const { tmp_provide_services } = require('../src/helpers');
|
|
// tmp_provide_services(services);
|
|
}
|
|
}
|
|
|
|
const k = new TestKernel();
|
|
k.add_module(new CoreModule());
|
|
k.boot();
|
|
|
|
const do_after_tests_ = [];
|
|
|
|
// const do_after_tests = (fn) => {
|
|
// do_after_tests_.push(fn);
|
|
// };
|
|
const repeat_after = (fn) => {
|
|
fn();
|
|
do_after_tests_.push(fn);
|
|
};
|
|
|
|
let total_passed = 0;
|
|
let total_failed = 0;
|
|
|
|
for ( const name in k.services.instances_ ) {
|
|
console.log('name', name)
|
|
const ins = k.services.instances_[name];
|
|
ins.construct();
|
|
if ( ! ins._test || typeof ins._test !== 'function' ) {
|
|
continue;
|
|
}
|
|
let passed = 0;
|
|
let failed = 0;
|
|
|
|
repeat_after(() => {
|
|
console.log(`\x1B[33;1m=== [ Service :: ${name} ] ===\x1B[0m`);
|
|
});
|
|
|
|
const testapi = {
|
|
assert: (condition, name) => {
|
|
name = name || condition.toString();
|
|
if ( condition() ) {
|
|
passed++;
|
|
repeat_after(() => console.log(`\x1B[32;1m ✔ ${name}\x1B[0m`));
|
|
} else {
|
|
failed++;
|
|
repeat_after(() => console.log(`\x1B[31;1m ✘ ${name}\x1B[0m`));
|
|
}
|
|
}
|
|
};
|
|
|
|
ins._test(testapi);
|
|
|
|
total_passed += passed;
|
|
total_failed += failed;
|
|
}
|
|
|
|
console.log(`\x1B[36;1m<===\x1B[0m ` +
|
|
'ASSERTION OUTPUTS ARE REPEATED BELOW' +
|
|
` \x1B[36;1m===>\x1B[0m`);
|
|
|
|
for ( const fn of do_after_tests_ ) {
|
|
fn();
|
|
}
|
|
|
|
console.log(`\x1B[36;1m=== [ Summary ] ===\x1B[0m`);
|
|
console.log(`Passed: ${total_passed}`);
|
|
console.log(`Failed: ${total_failed}`);
|