@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
64 lines (59 loc) • 1.55 kB
JavaScript
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
;
const Tapable = require("../Tapable");
const SyncHook = require("../SyncHook");
const HookMap = require("../HookMap");
describe("Tapable", () => {
it("should use same name or camelCase hook by default", () => {
const t = new Tapable();
t.hooks = {
myHook: new SyncHook()
};
let called = 0;
t.plugin("my-hook", () => called++);
t.hooks.myHook.call();
t.plugin("myHook", () => (called += 10));
t.hooks.myHook.call();
expect(called).toEqual(12);
});
it("should throw on unknown hook", () => {
const t = new Tapable();
t.hooks = {
myHook: new SyncHook()
};
expect(() => {
t.plugin("some-hook", () => {});
}).toThrow(/some-hook/);
t.hooks.myHook.call();
});
it("should use custom mapping", () => {
const t = new Tapable();
t.hooks = {
myHook: new SyncHook(),
hookMap: new HookMap(name => new SyncHook())
};
let called = 0;
t._pluginCompat.tap("hookMap custom mapping", options => {
const match = /^hookMap (.+)$/.exec(options.name);
if (match) {
t.hooks.hookMap.tap(
match[1],
options.fn.name || "unnamed compat plugin",
options.fn
);
return true;
}
});
t.plugin("my-hook", () => called++);
t.plugin("hookMap test", () => (called += 10));
t.hooks.myHook.call();
expect(called).toEqual(1);
t.hooks.hookMap.for("test").call();
expect(called).toEqual(11);
t.hooks.hookMap.for("other").call();
expect(called).toEqual(11);
});
});