Skip to content

Commit 6e920e3

Browse files
committed
test: esm-based plugins
1 parent e956ff9 commit 6e920e3

1 file changed

Lines changed: 93 additions & 43 deletions

File tree

test/plugin/plugin.test.ts

Lines changed: 93 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,101 @@ describe('loading plugins from packages', () => {
1111
spawnSync('npm', ['install'], { cwd: testPackagePath, timeout: 5000 });
1212
});
1313

14-
it(
15-
'should load plugins that are the default export (module.exports = pluginObj)',
16-
async () => {
17-
const loader = new PluginLoader([join(testPackagePath, 'default-export.js')]);
18-
await loader.load();
19-
expect(loader.pushPlugins.length).toBe(1);
20-
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
21-
expect(
22-
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
23-
).toBe(true);
24-
},
25-
{ timeout: 10000 },
26-
);
14+
describe('CommonJS syntax', () => {
15+
it(
16+
'should load plugins that are the default export',
17+
async () => {
18+
const loader = new PluginLoader([join(testPackagePath, 'default-export.js')]);
19+
await loader.load();
20+
expect(loader.pushPlugins.length).toBe(1);
21+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
22+
expect(
23+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
24+
).toBe(true);
25+
},
26+
{ timeout: 10000 },
27+
);
2728

28-
it(
29-
'should load multiple plugins from a module that match the plugin class (module.exports = { pluginFoo, pluginBar })',
30-
async () => {
31-
const loader = new PluginLoader([join(testPackagePath, 'multiple-export.js')]);
32-
await loader.load();
33-
expect(loader.pushPlugins.length).toBe(1);
34-
expect(loader.pullPlugins.length).toBe(1);
35-
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
36-
expect(
37-
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
38-
).toBe(true);
39-
expect(
40-
loader.pullPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPullActionPlugin')),
41-
).toBe(true);
42-
},
43-
{ timeout: 10000 },
44-
);
29+
it(
30+
'should load multiple plugins from a module that match the plugin class',
31+
async () => {
32+
const loader = new PluginLoader([join(testPackagePath, 'multiple-export.js')]);
33+
await loader.load();
34+
expect(loader.pushPlugins.length).toBe(1);
35+
expect(loader.pullPlugins.length).toBe(1);
36+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
37+
expect(
38+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
39+
).toBe(true);
40+
expect(
41+
loader.pullPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPullActionPlugin')),
42+
).toBe(true);
43+
},
44+
{ timeout: 10000 },
45+
);
4546

46-
it(
47-
'should load plugins that are subclassed from plugin classes',
48-
async () => {
49-
const loader = new PluginLoader([join(testPackagePath, 'subclass.js')]);
50-
await loader.load();
51-
expect(loader.pushPlugins.length).toBe(1);
52-
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
53-
expect(
54-
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
55-
).toBe(true);
56-
},
57-
{ timeout: 10000 },
58-
);
47+
it(
48+
'should load plugins that are subclassed from plugin classes',
49+
async () => {
50+
const loader = new PluginLoader([join(testPackagePath, 'subclass.js')]);
51+
await loader.load();
52+
expect(loader.pushPlugins.length).toBe(1);
53+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
54+
expect(
55+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
56+
).toBe(true);
57+
},
58+
{ timeout: 10000 },
59+
);
60+
});
61+
62+
describe('ESM syntax', () => {
63+
it(
64+
'should load plugins that are the default export (exports default pluginObj)',
65+
async () => {
66+
const loader = new PluginLoader([join(testPackagePath, 'esm-export.js')]);
67+
await loader.load();
68+
expect(loader.pushPlugins.length).toBe(1);
69+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
70+
expect(
71+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
72+
).toBe(true);
73+
},
74+
{ timeout: 10000 },
75+
);
76+
77+
it(
78+
'should load multiple plugins from a module that match the plugin class',
79+
async () => {
80+
const loader = new PluginLoader([join(testPackagePath, 'esm-multiple-export.js')]);
81+
await loader.load();
82+
expect(loader.pushPlugins.length).toBe(1);
83+
expect(loader.pullPlugins.length).toBe(1);
84+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
85+
expect(
86+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
87+
).toBe(true);
88+
expect(
89+
loader.pullPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPullActionPlugin')),
90+
).toBe(true);
91+
},
92+
{ timeout: 10000 },
93+
);
94+
95+
it(
96+
'should load plugins that are subclassed from plugin classes',
97+
async () => {
98+
const loader = new PluginLoader([join(testPackagePath, 'esm-subclass.js')]);
99+
await loader.load();
100+
expect(loader.pushPlugins.length).toBe(1);
101+
expect(loader.pushPlugins.every((p) => isCompatiblePlugin(p))).toBe(true);
102+
expect(
103+
loader.pushPlugins.every((p) => isCompatiblePlugin(p, 'isGitProxyPushActionPlugin')),
104+
).toBe(true);
105+
},
106+
{ timeout: 10000 },
107+
);
108+
});
59109

60110
it(
61111
'should not load plugins that are not valid modules',

0 commit comments

Comments
 (0)