返回 DeepSeek-Reasonix
terminal_env_test.go
根目录 / internal / acp / terminal_env_test.go
1 package acp
2
3 import (
4 "context"
5 "encoding/json"
6 "testing"
7 "time"
8 )
9
10 func TestTerminalCreateSerializesEnvOverrides(t *testing.T) {
11 req := newScriptedRequester()
12 req.results["terminal/create"] = TerminalCreateResult{TerminalID: "term-env"}
13 req.results["terminal/wait_for_exit"] = TerminalWaitResult{}
14 exitZero := 0
15 req.results["terminal/output"] = TerminalOutputResult{
16 Output: "ok",
17 ExitStatus: &TerminalExitStatus{ExitCode: &exitZero},
18 }
19 req.results["terminal/release"] = struct{}{}
20 io := newClientIO(req, "sess-env", ClientCapabilities{Terminal: true})
21
22 env := map[string]string{
23 "TMPDIR": "/private/session-tmp",
24 "TMP": "/private/session-tmp",
25 "TEMP": "/private/session-tmp",
26 }
27 if _, ok, err := io.RunCommand(context.Background(), "echo hi", "/proj", time.Minute, env); !ok || err != nil {
28 t.Fatalf("RunCommand = ok=%v err=%v", ok, err)
29 }
30
31 raw, ok := req.params["terminal/create"]
32 if !ok {
33 t.Fatal("terminal/create params not recorded")
34 }
35 var params TerminalCreateParams
36 if err := json.Unmarshal(raw, &params); err != nil {
37 t.Fatal(err)
38 }
39 if len(params.Env) != 3 {
40 t.Fatalf("env entries = %d, want 3: %+v", len(params.Env), params.Env)
41 }
42 got := map[string]string{}
43 for _, e := range params.Env {
44 got[e.Name] = e.Value
45 }
46 for k, v := range env {
47 if got[k] != v {
48 t.Fatalf("env[%s] = %q, want %q", k, got[k], v)
49 }
50 }
51 }
52
53 func TestEnvMapToVariablesStableOrder(t *testing.T) {
54 got := envMapToVariables(map[string]string{"TMP": "a", "TEMP": "a", "TMPDIR": "a"})
55 if len(got) != 3 {
56 t.Fatalf("len = %d", len(got))
57 }
58 // TEMP < TMP < TMPDIR lexicographically.
59 if got[0].Name != "TEMP" || got[1].Name != "TMP" || got[2].Name != "TMPDIR" {
60 t.Fatalf("order = %v", got)
61 }
62 if envMapToVariables(nil) != nil {
63 t.Fatal("nil map should yield nil")
64 }
65 }
66
66 lines GO