fix scratchpad routing by caller project
This commit is contained in:
@@ -98,3 +98,65 @@ func TestSwitchProjectPreservesProjectProcessTrees(t *testing.T) {
|
||||
t.Fatalf("switching back should preserve both project process trees")
|
||||
}
|
||||
}
|
||||
|
||||
func TestProjectRegistryScratchpadsRouteByCallerProject(t *testing.T) {
|
||||
t.Setenv("XDG_DATA_HOME", t.TempDir())
|
||||
t.Setenv("XDG_CONFIG_HOME", t.TempDir())
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
reg := newProjectRegistry(preset.Set{}, defaultSettings(), nil, 80, 24)
|
||||
defer reg.Shutdown()
|
||||
|
||||
projectA, err := reg.Open(ctx, t.TempDir())
|
||||
if err != nil {
|
||||
t.Fatalf("open project A: %v", err)
|
||||
}
|
||||
projectB, err := reg.Open(ctx, t.TempDir())
|
||||
if err != nil {
|
||||
t.Fatalf("open project B: %v", err)
|
||||
}
|
||||
|
||||
a, err := projectA.Session.Spawn(SpawnSpec{
|
||||
Kind: KindCommand,
|
||||
Argv: []string{"sh", "-c", "trap 'exit 0' TERM; while :; do sleep 1; done"},
|
||||
Name: "a-caller",
|
||||
}, 80, 24)
|
||||
if err != nil {
|
||||
t.Fatalf("spawn project A caller: %v", err)
|
||||
}
|
||||
b, err := projectB.Session.Spawn(SpawnSpec{
|
||||
Kind: KindCommand,
|
||||
Argv: []string{"sh", "-c", "trap 'exit 0' TERM; while :; do sleep 1; done"},
|
||||
Name: "b-caller",
|
||||
}, 80, 24)
|
||||
if err != nil {
|
||||
t.Fatalf("spawn project B caller: %v", err)
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
_ = projectA.Session.Kill(a.ID, syscall.SIGTERM)
|
||||
_ = projectB.Session.Kill(b.ID, syscall.SIGTERM)
|
||||
})
|
||||
waitUntilLive(t, a)
|
||||
waitUntilLive(t, b)
|
||||
|
||||
if _, err := reg.ScratchpadWrite(a.ID, "note.md", "project A", ""); err != nil {
|
||||
t.Fatalf("write project A scratchpad: %v", err)
|
||||
}
|
||||
if _, err := reg.ScratchpadWrite(b.ID, "note.md", "project B", ""); err != nil {
|
||||
t.Fatalf("write project B scratchpad: %v", err)
|
||||
}
|
||||
|
||||
gotA, _, err := reg.ScratchpadRead(a.ID, "note.md")
|
||||
if err != nil {
|
||||
t.Fatalf("read project A scratchpad: %v", err)
|
||||
}
|
||||
gotB, _, err := reg.ScratchpadRead(b.ID, "note.md")
|
||||
if err != nil {
|
||||
t.Fatalf("read project B scratchpad: %v", err)
|
||||
}
|
||||
if gotA != "project A" || gotB != "project B" {
|
||||
t.Fatalf("scratchpad routing leaked between projects: A=%q B=%q", gotA, gotB)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user