@@ -12,6 +12,8 @@ import {
1212
1313type SpawnDep = NonNullable < Parameters < typeof startDesktopSidecar > [ 1 ] > [ "spawn" ] ;
1414
15+ const noopInstallRuntimeDependencies = vi . fn ( async ( ) => { } ) ;
16+
1517describe ( "sidecar-manager" , ( ) => {
1618 const tempDirs : string [ ] = [ ] ;
1719
@@ -30,6 +32,7 @@ describe("sidecar-manager", () => {
3032 platform : "darwin" ,
3133 } )
3234 ) . toEqual ( {
35+ runtimeDir : "/Applications/Coder Studio.app/Contents/Resources/runtime" ,
3336 nodeExecutable : "/Applications/Coder Studio.app/Contents/Resources/runtime/node/node" ,
3437 runtimeEntry :
3538 "/Applications/Coder Studio.app/Contents/Resources/runtime/embedded/dist/esm/runtime-launch-entry.mjs" ,
@@ -70,6 +73,7 @@ describe("sidecar-manager", () => {
7073 platform : "darwin" ,
7174 } )
7275 ) . toEqual ( {
76+ runtimeDir : "/Applications/Coder Studio.app/Contents/Resources/runtime" ,
7377 nodeExecutable : "/Applications/Coder Studio.app/Contents/Resources/runtime/node/node" ,
7478 runtimeEntry : join ( versionDir , "dist" , "esm" , "runtime-launch-entry.mjs" ) ,
7579 runtimeVersion : "0.5.4" ,
@@ -88,6 +92,7 @@ describe("sidecar-manager", () => {
8892 platform : "win32" ,
8993 } )
9094 ) . toEqual ( {
95+ runtimeDir : "C:\\repo\\packages\\desktop\\dist\\runtime" ,
9196 nodeExecutable : "C:\\repo\\packages\\desktop\\dist\\runtime\\node\\node.exe" ,
9297 runtimeEntry :
9398 "C:\\repo\\packages\\desktop\\dist\\runtime\\embedded\\dist\\esm\\runtime-launch-entry.mjs" ,
@@ -190,6 +195,7 @@ describe("sidecar-manager", () => {
190195 await startDesktopSidecar (
191196 {
192197 paths : {
198+ runtimeDir : "/bundle/runtime" ,
193199 nodeExecutable : "/bundle/runtime/node/node" ,
194200 runtimeEntry : "/bundle/runtime/cli/dist/esm/runtime-launch-entry.mjs" ,
195201 runtimeVersion : "0.5.4" ,
@@ -215,6 +221,7 @@ describe("sidecar-manager", () => {
215221 startedAt : 1 ,
216222 } ,
217223 } ) ,
224+ installRuntimeDependencies : noopInstallRuntimeDependencies ,
218225 }
219226 ) ;
220227
@@ -262,6 +269,7 @@ describe("sidecar-manager", () => {
262269 const handle = await startDesktopSidecar (
263270 {
264271 paths : {
272+ runtimeDir : "/bundle/runtime" ,
265273 nodeExecutable : "/bundle/runtime/node/node" ,
266274 runtimeEntry : "/bundle/runtime/cli/dist/esm/runtime-launch-entry.mjs" ,
267275 runtimeVersion : "0.5.4" ,
@@ -283,6 +291,7 @@ describe("sidecar-manager", () => {
283291 startedAt : 1 ,
284292 } ,
285293 } ) ,
294+ installRuntimeDependencies : noopInstallRuntimeDependencies ,
286295 }
287296 ) ;
288297
@@ -326,9 +335,20 @@ describe("sidecar-manager", () => {
326335
327336 const spawn = vi . fn ( ( ) => child ) as unknown as SpawnDep ;
328337
338+ // install must not yield — it must resolve in the same microtask so that
339+ // startDesktopSidecar reaches spawn + listener setup before we emit.
340+ let resolveInstall : ( ) => void ;
341+ const installRuntimeDependencies = vi . fn (
342+ ( ) =>
343+ new Promise < void > ( ( r ) => {
344+ resolveInstall = r ;
345+ } )
346+ ) ;
347+
329348 const startup = startDesktopSidecar (
330349 {
331350 paths : {
351+ runtimeDir : "/bundle/runtime" ,
332352 nodeExecutable : "/bundle/runtime/node/node" ,
333353 runtimeEntry : "/bundle/runtime/cli/dist/esm/runtime-launch-entry.mjs" ,
334354 runtimeVersion : "0.5.4" ,
@@ -340,16 +360,25 @@ describe("sidecar-manager", () => {
340360 {
341361 spawn,
342362 waitForHealthyRuntime : ( ) => new Promise < never > ( ( ) => { } ) ,
363+ installRuntimeDependencies,
343364 }
344365 ) ;
345366
346367 child . stderr . emit ( "data" , Buffer . from ( "boom\n" ) ) ;
347368 child . exitCode = 1 ;
348369 child . emit ( "exit" , 1 , null ) ;
349-
350- await expect ( startup ) . rejects . toMatchObject ( {
351- message : expect . stringMatching ( / e x i t e d b e f o r e b e c o m i n g h e a l t h y / i ) ,
352- logExcerpt : "stderr: boom" ,
370+ resolveInstall ! ( ) ;
371+ // Let startDesktopSidecar's await continuation run and attach listeners
372+ await new Promise < void > ( ( r ) => {
373+ queueMicrotask ( r ) ;
353374 } ) ;
375+ child . stderr . emit ( "data" , Buffer . from ( "boom\n" ) ) ;
376+
377+ const error = ( await startup . catch ( ( e : unknown ) =>
378+ e instanceof Error ? e : new Error ( String ( e ) )
379+ ) ) as Error ;
380+ expect ( error ) . toBeInstanceOf ( Error ) ;
381+ expect ( error . message ) . toMatch ( / e x i t e d b e f o r e b e c o m i n g h e a l t h y / i) ;
382+ expect ( error ) . toHaveProperty ( "logExcerpt" , "stderr: boom" ) ;
354383 } ) ;
355384} ) ;
0 commit comments