@@ -28,10 +28,11 @@ describe('PluginSystem', () => {
2828 }
2929 } ;
3030
31- await pluginSystem . loadPlugin ( plugin ) ;
31+ await pluginSystem . loadPlugin ( plugin , registry ) ;
3232
3333 expect ( pluginSystem . isLoaded ( 'test-plugin' ) ) . toBe ( true ) ;
3434 expect ( pluginSystem . getLoadedPlugins ( ) ) . toContain ( 'test-plugin' ) ;
35+ expect ( registry . has ( 'test' ) ) . toBe ( true ) ;
3536 } ) ;
3637
3738 it ( 'should execute onLoad lifecycle hook' , async ( ) => {
@@ -43,7 +44,7 @@ describe('PluginSystem', () => {
4344 onLoad
4445 } ;
4546
46- await pluginSystem . loadPlugin ( plugin ) ;
47+ await pluginSystem . loadPlugin ( plugin , registry ) ;
4748
4849 expect ( onLoad ) . toHaveBeenCalledTimes ( 1 ) ;
4950 } ) ;
@@ -57,7 +58,7 @@ describe('PluginSystem', () => {
5758 onLoad
5859 } ;
5960
60- await pluginSystem . loadPlugin ( plugin ) ;
61+ await pluginSystem . loadPlugin ( plugin , registry ) ;
6162
6263 expect ( onLoad ) . toHaveBeenCalledTimes ( 1 ) ;
6364 } ) ;
@@ -71,8 +72,8 @@ describe('PluginSystem', () => {
7172 onLoad
7273 } ;
7374
74- await pluginSystem . loadPlugin ( plugin ) ;
75- await pluginSystem . loadPlugin ( plugin ) ;
75+ await pluginSystem . loadPlugin ( plugin , registry ) ;
76+ await pluginSystem . loadPlugin ( plugin , registry ) ;
7677
7778 expect ( onLoad ) . toHaveBeenCalledTimes ( 1 ) ;
7879 } ) ;
@@ -85,7 +86,7 @@ describe('PluginSystem', () => {
8586 register : ( ) => { }
8687 } ;
8788
88- await expect ( pluginSystem . loadPlugin ( plugin ) ) . rejects . toThrow (
89+ await expect ( pluginSystem . loadPlugin ( plugin , registry ) ) . rejects . toThrow (
8990 'Missing dependency: base-plugin required by dependent-plugin'
9091 ) ;
9192 } ) ;
@@ -104,8 +105,8 @@ describe('PluginSystem', () => {
104105 register : ( ) => { }
105106 } ;
106107
107- await pluginSystem . loadPlugin ( basePlugin ) ;
108- await pluginSystem . loadPlugin ( dependentPlugin ) ;
108+ await pluginSystem . loadPlugin ( basePlugin , registry ) ;
109+ await pluginSystem . loadPlugin ( dependentPlugin , registry ) ;
109110
110111 expect ( pluginSystem . isLoaded ( 'base-plugin' ) ) . toBe ( true ) ;
111112 expect ( pluginSystem . isLoaded ( 'dependent-plugin' ) ) . toBe ( true ) ;
@@ -120,7 +121,7 @@ describe('PluginSystem', () => {
120121 onUnload
121122 } ;
122123
123- await pluginSystem . loadPlugin ( plugin ) ;
124+ await pluginSystem . loadPlugin ( plugin , registry ) ;
124125 expect ( pluginSystem . isLoaded ( 'test-plugin' ) ) . toBe ( true ) ;
125126
126127 await pluginSystem . unloadPlugin ( 'test-plugin' ) ;
@@ -143,8 +144,8 @@ describe('PluginSystem', () => {
143144 register : ( ) => { }
144145 } ;
145146
146- await pluginSystem . loadPlugin ( basePlugin ) ;
147- await pluginSystem . loadPlugin ( dependentPlugin ) ;
147+ await pluginSystem . loadPlugin ( basePlugin , registry ) ;
148+ await pluginSystem . loadPlugin ( dependentPlugin , registry ) ;
148149
149150 await expect ( pluginSystem . unloadPlugin ( 'base-plugin' ) ) . rejects . toThrow (
150151 'Cannot unload plugin "base-plugin" - plugin "dependent-plugin" depends on it'
@@ -164,7 +165,7 @@ describe('PluginSystem', () => {
164165 register : ( ) => { }
165166 } ;
166167
167- await pluginSystem . loadPlugin ( plugin ) ;
168+ await pluginSystem . loadPlugin ( plugin , registry ) ;
168169
169170 const retrieved = pluginSystem . getPlugin ( 'test-plugin' ) ;
170171 expect ( retrieved ) . toBe ( plugin ) ;
@@ -183,12 +184,41 @@ describe('PluginSystem', () => {
183184 register : ( ) => { }
184185 } ;
185186
186- await pluginSystem . loadPlugin ( plugin1 ) ;
187- await pluginSystem . loadPlugin ( plugin2 ) ;
187+ await pluginSystem . loadPlugin ( plugin1 , registry ) ;
188+ await pluginSystem . loadPlugin ( plugin2 , registry ) ;
188189
189190 const allPlugins = pluginSystem . getAllPlugins ( ) ;
190191 expect ( allPlugins ) . toHaveLength ( 2 ) ;
191192 expect ( allPlugins ) . toContain ( plugin1 ) ;
192193 expect ( allPlugins ) . toContain ( plugin2 ) ;
193194 } ) ;
195+
196+ it ( 'should call register function with registry' , async ( ) => {
197+ const registerFn = vi . fn ( ) ;
198+ const plugin : PluginDefinition = {
199+ name : 'test-plugin' ,
200+ version : '1.0.0' ,
201+ register : registerFn
202+ } ;
203+
204+ await pluginSystem . loadPlugin ( plugin , registry ) ;
205+
206+ expect ( registerFn ) . toHaveBeenCalledWith ( registry ) ;
207+ expect ( registerFn ) . toHaveBeenCalledTimes ( 1 ) ;
208+ } ) ;
209+
210+ it ( 'should cleanup on registration failure' , async ( ) => {
211+ const plugin : PluginDefinition = {
212+ name : 'failing-plugin' ,
213+ version : '1.0.0' ,
214+ register : ( ) => {
215+ throw new Error ( 'Registration failed' ) ;
216+ }
217+ } ;
218+
219+ await expect ( pluginSystem . loadPlugin ( plugin , registry ) ) . rejects . toThrow ( 'Registration failed' ) ;
220+
221+ expect ( pluginSystem . isLoaded ( 'failing-plugin' ) ) . toBe ( false ) ;
222+ expect ( pluginSystem . getPlugin ( 'failing-plugin' ) ) . toBeUndefined ( ) ;
223+ } ) ;
194224} ) ;
0 commit comments