Files
byre/internal/claude/badline_internal_test.go
T

56 lines
1.3 KiB
Go

package claude
import (
"strings"
"testing"
"time"
)
func TestBadLines(t *testing.T) {
bad := []string{}
s := &Session{
events: make(chan Event, 16),
done: make(chan struct{}),
onBadLine: func(line []byte, reason string) {
bad = append(bad, string(line)+" | "+reason)
},
}
input := strings.Join([]string{
`{"type":"assistant","message":{"content":[]}}`,
``,
`warning: something on stdout`,
`{"type":"assistant",`,
`{"type":"mystery","x":1}`,
`{"type":"keep_alive"}`,
`{"type":"tool_progress","heartbeat":true}`,
}, "\n")
before := time.Now()
s.readLoop(strings.NewReader(input))
want := []string{
`warning: something on stdout | not a JSON object`,
`{"type":"assistant", | unexpected end of JSON input`,
`{"type":"mystery","x":1} | unrecognised type "mystery"`,
}
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"))
}
types := []string{}
for ev := range s.events {
types = append(types, ev.Type)
}
if strings.Join(types, ",") != "assistant,mystery,tool_progress" {
t.Errorf("events = %v", types)
}
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")
}
}