nope-js-node
Version:
NoPE Runtime for Nodejs. For Browser-Support please use nope-browser
101 lines (100 loc) • 5.23 kB
JavaScript
;
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2022-01-05 17:50:44
* @modify date 2022-01-05 17:50:44
* @desc [description]
*/
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const mocha_1 = require("mocha");
require("reflect-metadata");
const getLayer_nodejs_1 = require("../../communication/getLayer.nodejs");
const eventEmitter_1 = require("../../eventEmitter");
const async_1 = require("../../helpers/async");
const module_1 = require("../../module");
const nopeObservable_1 = require("../../observables/nopeObservable");
const InstanceManager_1 = require("./InstanceManager");
(0, mocha_1.describe)("NopeInstanceManager", function () {
// Describe the required Test:
let manager;
manager = new InstanceManager_1.NopeInstanceManager({
communicator: (0, getLayer_nodejs_1.getLayer)("event", "", false),
logger: false,
}, () => new eventEmitter_1.NopeEventEmitter(), () => new nopeObservable_1.NopeObservable(), async () => "test", "test", undefined, undefined, manager);
(0, mocha_1.it)("registering instance", async () => {
let called = false;
let calledService = false;
class TestModule extends module_1.NopeBaseModule {
// We can not provide a service.
// @nopeMethod({
// id: "service",
// schema: {},
// })
// public async service() {
// calledService = true;
// return "called";
// }
async dispose() {
await super.dispose();
called = true;
}
async init(p1, p2) {
this.author = {
forename: "test",
surename: "test",
mail: "test",
};
this.version = {
date: new Date(),
version: 1,
};
this.description = "test";
(0, chai_1.assert)(p1 == "p1" && p2 == "p2", "parameters where matched wrong");
await super.init();
}
}
await manager.ready.waitFor();
// Now we register the Service
await manager.registerConstructor("TestModule", async (core, identifier) => {
(0, chai_1.assert)(identifier === "instance", "The identifier has not been transmitted");
return new TestModule(core);
});
await (0, async_1.sleep)(10);
// Check the Constructors
const constructors = manager.constructors.extractedKey;
(0, chai_1.expect)(constructors).to.include("TestModule");
(0, chai_1.assert)(manager.constructors.amountOf.get("TestModule") == 1, "There should be one Provider for this constructor");
(0, chai_1.assert)(manager.constructors.keyMappingReverse.get("TestModule").size == 1, "There should be one Provider for this constructor");
(0, chai_1.assert)(manager.constructors.conflicts.size == 0, "There should be no conflict");
(0, chai_1.assert)(manager.constructorExists("TestModule"), "Constructor should be known!");
(0, chai_1.assert)(manager.constructorExists("unkown") == false, "Constructor should not be known!");
(0, chai_1.assert)(Array.from(manager.constructors.keyMappingReverse.get("TestModule"))[0] ==
"test", "The Provider should be 'test'");
const instance = await manager.createInstance({
identifier: "instance",
type: "TestModule",
params: ["p1", "p2"],
});
(0, chai_1.assert)(manager.instanceExists("instance", false) == true, "The instance should be known!");
(0, chai_1.assert)(manager.instanceExists("instance", true) == false, "No external manager is present!");
(0, chai_1.assert)(manager.internalInstances.getContent().includes("instance"), "The instance should be listed as internal instance.");
(0, chai_1.assert)(Array.from(manager.instances.keyMappingReverse.get("instance"))[0] ==
"test", "The Provider should be 'test'");
// Now test the instance wrapper
// assert(
// (await instance.service()) === "called",
// "The result should be called"
// );
// assert(calledService, "The service flag should be different now.");
(0, chai_1.assert)((await instance.listEvents()).length === 0, "No event has been defined");
(0, chai_1.assert)((await instance.listProperties()).length === 0, "No property has been defined");
(0, chai_1.assert)((await instance.listMethods()).length === 0, "No Method should be known");
(0, chai_1.assert)(Object.keys(instance.dynamicInstanceMethods).length === 0, "No Method should be known");
(0, chai_1.assert)(Object.keys(instance.methods).length === 0, "No Method should be known");
await instance.dispose();
await (0, async_1.sleep)(100);
(0, chai_1.assert)(!manager.instances.amountOf.has("instance"), "The Provider should be 'test'");
});
});