nope/lib/eventEmitter/nopeEventEmitter.spec.ts

298 lines
6.9 KiB
TypeScript
Raw Normal View History

2021-11-14 22:16:07 +00:00
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-11-23 08:06:30
* @modify date 2021-10-19 17:55:35
* @desc [description]
*/
import { assert } from "chai";
import "chai/register-should";
import { beforeEach, describe, it } from "mocha";
import { NopeEventEmitter } from "./nopeEventEmitter";
describe("NopeEventEmitter", function () {
// Describe the required Test:
describe("NopeEventEmitter wichout current-value", function () {
let emitter = new NopeEventEmitter<string>();
beforeEach(() => {
emitter = new NopeEventEmitter<string>();
});
it("subscribe callback without inital value", (done) => {
try {
const subscriber = emitter.subscribe({
next: (data) => {
done();
}
});
subscriber.pause();
emitter.emit("Hello");
subscriber.unpause();
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with inital value", (done) => {
try {
emitter.emit("This is a Test.");
const subscriber = emitter.subscribe({
next: (data) => {
done();
}
});
subscriber.pause();
emitter.emit("Hello");
subscriber.unpause();
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with setter", (done) => {
try {
emitter.emit("This is a Test.");
emitter.setter = (data) => {
return {
valid: true,
data: "Hello " + data
};
};
emitter.subscribe({
next: (data) => {
try {
assert.strictEqual(data, "Hello World!");
done();
} catch (e) {
done(e);
}
}
});
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with getter", (done) => {
try {
emitter.emit("This is a Test.");
emitter.getter = (data) => {
return data + "!";
};
emitter.subscribe({
next: (data) => {
try {
assert.strictEqual(data, "Hello World!");
done();
} catch (e) {
done(e);
}
}
});
emitter.emit("Hello World");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe check order", (done) => {
const items: string[] = [];
try {
emitter.emit("0");
const subscriber = emitter.subscribe({
next: (data) => {
items.push(data);
if (items.length === 3) {
try {
assert.deepEqual(items, ["1", "2", "3"]);
done();
} catch (e) {
done(e);
}
}
}
});
for (let i = 1; i <= 3; i++) {
emitter.emit(i.toString());
}
} catch (e) {
throw Error("Something went wrong");
}
});
});
describe("NopeEventEmitter-Without-History", function () {
let emitter = new NopeEventEmitter<string>({
showCurrent: true
});
beforeEach(() => {
emitter = new NopeEventEmitter<string>({
showCurrent: true
});
});
it("subscribe callback without inital value", (done) => {
try {
const subscriber = emitter.subscribe({
next: (data) => {
done();
}
});
subscriber.pause();
emitter.emit("Hello");
subscriber.unpause();
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with inital value", (done) => {
try {
emitter.emit("This is a Test.");
const subscriber = emitter.subscribe({
next: (data) => {
done();
}
}, {
skipCurrent: true
});
subscriber.pause();
emitter.emit("Hello");
subscriber.unpause();
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with setter", (done) => {
try {
emitter.emit("This is a Test.");
emitter.setter = (data) => {
return {
valid: true,
data: "Hello " + data
};
};
emitter.subscribe({
next: (data) => {
try {
assert.strictEqual(data, "Hello World!");
done();
} catch (e) {
done(e);
}
}
});
emitter.emit("World!");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe callback with getter", (done) => {
try {
emitter.emit("This is a Test.");
emitter.getter = (data) => {
return data + "!";
};
emitter.subscribe({
next: (data) => {
try {
assert.strictEqual(data, "Hello World!");
done();
} catch (e) {
done(e);
}
}
});
emitter.emit("Hello World");
} catch (e) {
throw Error("Something went wrong");
}
});
it("subscribe check order", (done) => {
const items: string[] = [];
try {
emitter.emit("0");
const subscriber = emitter.subscribe({
next: (data) => {
items.push(data);
if (items.length === 3) {
try {
assert.deepEqual(items, ["1", "2", "3"]);
done();
} catch (e) {
done(e);
}
}
}
});
for (let i = 1; i <= 3; i++) {
emitter.emit(i.toString());
}
} catch (e) {
throw Error("Something went wrong");
}
});
});
describe("NopeEventEmitter with record", function () {
let emitter = new NopeEventEmitter<string>({
showCurrent: true,
playHistory: true,
});
beforeEach(() => {
emitter = new NopeEventEmitter<string>({
showCurrent: true,
playHistory: true,
});
});
it("subscribe check order", (done) => {
const items: string[] = [];
try {
emitter.emit("0");
emitter.emit("1");
const subscriber = emitter.subscribe({
next: (data) => {
items.push(data);
if (items.length === 3) {
try {
assert.deepEqual(items, ["0", "1", "2"]);
done();
} catch (e) {
done(e);
}
}
}
});
emitter.emit("2");
} catch (e) {
throw Error("Something went wrong");
}
});
});
});