Files
byre/internal/codex/badline_internal_test.go
T

54 lines
1.5 KiB
Go

package codex
import (
"io"
"strings"
"testing"
"time"
)
func TestBadLines(t *testing.T) {
bad := []string{}
input := strings.Join([]string{
`{"method":"turn/started","params":{"threadId":"t","turn":{"id":"u","items":[],"status":"inProgress"}}}`,
``,
`warning: something on stdout`,
`{"method":"turn/started",`,
`{"method":"mystery/event","params":{}}`,
`{"method":"turn/completed","params":{"threadId":"t","turn":{"id":"u","items":[],"status":"completed"}}}`,
}, "\n")
before := time.Now()
r, w := io.Pipe()
s := newSession(Options{OnBadLine: func(line []byte, reason string) {
bad = append(bad, string(line)+" | "+reason)
}}, w, strings.NewReader(input))
methods := []string{}
for ev := range s.events {
methods = append(methods, ev.Method)
}
r.Close()
want := []string{
`warning: something on stdout | not a JSON object`,
`{"method":"turn/started", | unexpected end of JSON input`,
`{"method":"mystery/event","params":{}} | unrecognised method "mystery/event"`,
}
if strings.Join(bad, "\n") != strings.Join(want, "\n") {
t.Errorf("bad lines:\n%s\nwant:\n%s", strings.Join(bad, "\n"), strings.Join(want, "\n"))
}
if strings.Join(methods, ",") != "turn/started,mystery/event,turn/completed" {
t.Errorf("events = %v", methods)
}
if s.TurnID() != "" {
t.Errorf("turn %q still tracked after turn/completed", s.TurnID())
}
if s.LastLine().Before(before) {
t.Errorf("last line time %v not updated", s.LastLine())
}
if !s.Exited() {
t.Errorf("session not exited after stdout closed")
}
}