UNPKG

nope-js-browser

Version:

NoPE Runtime for the Browser. For nodejs please use nope-js-node

99 lines (98 loc) 4.79 kB
/** * @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] */ import { expect, assert } from "chai"; import { describe, it } from "mocha"; import "reflect-metadata"; import { getLayer } from "../../communication/getLayer.nodejs"; import { NopeEventEmitter } from "../../eventEmitter"; import { sleep } from "../../helpers/async"; import { NopeBaseModule } from "../../module"; import { NopeObservable } from "../../observables/nopeObservable"; import { NopeInstanceManager } from "./InstanceManager"; describe("NopeInstanceManager", function () { // Describe the required Test: let manager; manager = new NopeInstanceManager({ communicator: getLayer("event", "", false), logger: false, }, () => new NopeEventEmitter(), () => new NopeObservable(), async () => "test", "test", undefined, undefined, manager); it("registering instance", async () => { let called = false; let calledService = false; class TestModule extends 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"; 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) => { assert(identifier === "instance", "The identifier has not been transmitted"); return new TestModule(core); }); await sleep(10); // Check the Constructors const constructors = manager.constructors.extractedKey; expect(constructors).to.include("TestModule"); assert(manager.constructors.amountOf.get("TestModule") == 1, "There should be one Provider for this constructor"); assert(manager.constructors.keyMappingReverse.get("TestModule").size == 1, "There should be one Provider for this constructor"); assert(manager.constructors.conflicts.size == 0, "There should be no conflict"); assert(manager.constructorExists("TestModule"), "Constructor should be known!"); assert(manager.constructorExists("unkown") == false, "Constructor should not be known!"); 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"], }); assert(manager.instanceExists("instance", false) == true, "The instance should be known!"); assert(manager.instanceExists("instance", true) == false, "No external manager is present!"); assert(manager.internalInstances.getContent().includes("instance"), "The instance should be listed as internal instance."); 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."); assert((await instance.listEvents()).length === 0, "No event has been defined"); assert((await instance.listProperties()).length === 0, "No property has been defined"); assert((await instance.listMethods()).length === 0, "No Method should be known"); assert(Object.keys(instance.dynamicInstanceMethods).length === 0, "No Method should be known"); assert(Object.keys(instance.methods).length === 0, "No Method should be known"); await instance.dispose(); await sleep(100); assert(!manager.instances.amountOf.has("instance"), "The Provider should be 'test'"); }); });