




























@@ -56,6 +56,14 @@ func TestDocsI18nPromptTimeoutUsesEnvOverride(t *testing.T) {
5656 }
5757}
585859+func TestDocsI18nCommandWaitDelayUsesEnvOverride(t *testing.T) {
60+t.Setenv(envDocsI18nCommandWaitDelay, "50ms")
61+62+if got := docsI18nCommandWaitDelay(); got != 50*time.Millisecond {
63+t.Fatalf("expected 50ms wait delay, got %s", got)
64+ }
65+}
66+5967func TestIsRetryableTranslateErrorRejectsDeadlineExceeded(t *testing.T) {
6068t.Parallel()
6169@@ -235,6 +243,37 @@ printf 'translated from codex\n' > "$out"
235243 }
236244}
237245246+func TestRunCodexExecPromptDoesNotHangOnInheritedPipesAfterTimeout(t *testing.T) {
247+dir := t.TempDir()
248+fakeCodex := filepath.Join(dir, "codex")
249+if err := os.WriteFile(fakeCodex, []byte(`#!/bin/sh
250+set -eu
251+(sleep 10) &
252+sleep 10
253+`), 0o755); err != nil {
254+t.Fatalf("write fake codex: %v", err)
255+ }
256+t.Setenv(envDocsI18nCodexExecutable, fakeCodex)
257+t.Setenv(envDocsI18nCommandWaitDelay, "20ms")
258+t.Setenv("OPENAI_API_KEY", "test-openai-key")
259+260+ctx, cancel := context.WithTimeout(context.Background(), 20*time.Millisecond)
261+defer cancel()
262+started := time.Now()
263+_, err := runCodexExecPrompt(ctx, codexPromptRequest{
264+SystemPrompt: "Translate.",
265+Message: "Hello",
266+Model: "gpt-5.5",
267+Thinking: "high",
268+ })
269+if err == nil {
270+t.Fatal("expected timeout error")
271+ }
272+if elapsed := time.Since(started); elapsed > 2*time.Second {
273+t.Fatalf("expected bounded timeout, took %s", elapsed)
274+ }
275+}
276+238277func TestPreviewCommandOutputFlattensAndTruncates(t *testing.T) {
239278input := "line one\n\nline two\tline three " + strings.Repeat("x", 600)
240279preview := previewCommandOutput(input, "")
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。