Blame view

node_modules/tapable/lib/__tests__/Tapable.js 1.52 KB
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  /*
  	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);
  	});
  });