11import assert from "node:assert/strict" ;
2+ import { EventEmitter } from "node:events" ;
23import test from "node:test" ;
34
4- import { tabCommand , tabPlan , tabShellQuote } from "../src/tabs.mjs" ;
5+ import { openNewTab , tabCommand , tabPlan , tabShellQuote } from "../src/tabs.mjs" ;
56
67test ( "tab shell quoting keeps paths as one shell word" , ( ) => {
78 assert . equal ( tabShellQuote ( "/tmp/it's here" ) , "'/tmp/it'\\''s here'" ) ;
@@ -34,10 +35,16 @@ test("/new outside tmux builds a private two-tab workspace", () => {
3435 assert . equal ( plan . dedicated , true ) ;
3536 assert . equal ( plan . socket , "moshcode-42-99" ) ;
3637 assert . deepEqual ( plan . required [ 0 ] , [
37- "-L" , "moshcode-42-99" , "new-session" , "-d" , "-s" , "moshcode-42-99" ,
38+ "-L" , "moshcode-42-99" , "-f" , "/dev/null" , " new-session", "-d" , "-s" , "moshcode-42-99" ,
3839 "-c" , "/repo" , "-n" , "mosh 1" , "moshcode-command" ,
3940 ] ) ;
4041 assert . deepEqual ( plan . required [ 1 ] , [
42+ "-L" , "moshcode-42-99" , "set-option" , "-t" , "moshcode-42-99" , "base-index" , "1" ,
43+ ] ) ;
44+ assert . deepEqual ( plan . required [ 2 ] , [
45+ "-L" , "moshcode-42-99" , "move-window" , "-r" , "-t" , "moshcode-42-99" ,
46+ ] ) ;
47+ assert . deepEqual ( plan . required [ 3 ] , [
4148 "-L" , "moshcode-42-99" , "new-window" , "-t" , "moshcode-42-99" ,
4249 "-c" , "/repo" , "-n" , "mosh 2" , "moshcode-command" ,
4350 ] ) ;
@@ -46,3 +53,35 @@ test("/new outside tmux builds a private two-tab workspace", () => {
4653 ] ) ;
4754 assert . ok ( plan . optional . some ( ( args ) => args . includes ( "bottom" ) ) ) ;
4855} ) ;
56+
57+ test ( "/new cleans up its private server when attaching fails" , async ( ) => {
58+ const calls = [ ] ;
59+ const runner = ( cmd , args ) => {
60+ calls . push ( [ cmd , args ] ) ;
61+ return { status : 0 } ;
62+ } ;
63+ const spawner = ( ) => {
64+ const child = new EventEmitter ( ) ;
65+ queueMicrotask ( ( ) => child . emit ( "exit" , 1 , null ) ) ;
66+ return child ;
67+ } ;
68+
69+ const result = await openNewTab ( {
70+ cwd : "/repo" ,
71+ env : { TMUX : "" } ,
72+ isTTY : true ,
73+ runner,
74+ spawner,
75+ execPath : "/node" ,
76+ entry : "/moshcode.mjs" ,
77+ pid : 42 ,
78+ stamp : 99 ,
79+ } ) ;
80+
81+ assert . equal ( result . ok , false ) ;
82+ assert . match ( result . error . message , / a t t a c h e x i t e d 1 / ) ;
83+ assert . deepEqual ( calls . at ( - 1 ) , [
84+ "tmux" ,
85+ [ "-L" , "moshcode-42-99" , "kill-server" ] ,
86+ ] ) ;
87+ } ) ;
0 commit comments