mirror of
https://github.com/webpack/tapable.git
synced 2026-01-25 15:07:55 +00:00
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
"use strict";
|
|
|
|
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);
|
|
});
|
|
})
|