From 3df4fec6dd6ff6b23086607f498273babecde345 Mon Sep 17 00:00:00 2001 From: freespace8 Date: Fri, 28 Nov 2025 15:10:47 +0800 Subject: [PATCH] =?UTF-8?q?test(ParseJSONStream):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E8=B6=85=E5=A4=A7=E5=8D=95=E8=A1=8C=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E5=92=8C=E9=9D=9E=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codex-wrapper/main_test.go | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/codex-wrapper/main_test.go b/codex-wrapper/main_test.go index 112330b..ab123cb 100644 --- a/codex-wrapper/main_test.go +++ b/codex-wrapper/main_test.go @@ -330,12 +330,16 @@ func TestNormalizeText(t *testing.T) { } func TestParseJSONStream(t *testing.T) { - tests := []struct { + type testCase struct { name string input string wantMessage string wantThreadID string - }{ + } + + longText := strings.Repeat("a", 2*1024*1024) // >1MB agent_message payload + + tests := []testCase{ { name: "thread started and agent message", input: `{"type":"thread.started","thread_id":"abc-123"} @@ -364,6 +368,12 @@ func TestParseJSONStream(t *testing.T) { wantMessage: "Valid", wantThreadID: "", }, + { + name: "super long single line (>1MB)", + input: `{"type":"item.completed","item":{"type":"agent_message","text":"` + longText + `"}}`, + wantMessage: longText, + wantThreadID: "", + }, { name: "empty input", input: "", @@ -371,23 +381,25 @@ func TestParseJSONStream(t *testing.T) { wantThreadID: "", }, { - name: "invalid JSON (skipped)", - input: "not valid json\n{\"type\":\"thread.started\",\"thread_id\":\"xyz\"}", + name: "item completed with nil item", + input: strings.Join([]string{ + `{"type":"thread.started","thread_id":"nil-item-thread"}`, + `{"type":"item.completed","item":null}`, + }, "\n"), wantMessage: "", - wantThreadID: "xyz", + wantThreadID: "nil-item-thread", }, { - name: "blank lines ignored", - input: "\n\n{\"type\":\"thread.started\",\"thread_id\":\"test\"}\n\n", + name: "agent message with non-string text", + input: `{"type":"item.completed","item":{"type":"agent_message","text":12345}}`, wantMessage: "", - wantThreadID: "test", + wantThreadID: "", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - r := strings.NewReader(tt.input) - gotMessage, gotThreadID := parseJSONStream(r) + gotMessage, gotThreadID := parseJSONStream(strings.NewReader(tt.input)) if gotMessage != tt.wantMessage { t.Errorf("parseJSONStream() message = %q, want %q", gotMessage, tt.wantMessage)