mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-05 02:30:26 +08:00
* fix(gemini): filter noisy stderr output from gemini backend - Add filteringWriter to filter [STARTUP], Warning, Session cleanup etc. - Apply filter only for gemini backend stderr output - Add unit tests for filtering logic * fix: use defer for stderrFilter.Flush to cover all return paths Address review feedback: ensure filter is flushed on failure paths
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func TestFilteringWriter(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
patterns []string
|
|
input string
|
|
want string
|
|
}{
|
|
{
|
|
name: "filter STARTUP lines",
|
|
patterns: geminiNoisePatterns,
|
|
input: "[STARTUP] Recording metric\nHello World\n[STARTUP] Another line\n",
|
|
want: "Hello World\n",
|
|
},
|
|
{
|
|
name: "filter Warning lines",
|
|
patterns: geminiNoisePatterns,
|
|
input: "Warning: something bad\nActual output\n",
|
|
want: "Actual output\n",
|
|
},
|
|
{
|
|
name: "filter multiple patterns",
|
|
patterns: geminiNoisePatterns,
|
|
input: "YOLO mode is enabled\nSession cleanup disabled\nReal content\nLoading extension: foo\n",
|
|
want: "Real content\n",
|
|
},
|
|
{
|
|
name: "no filtering needed",
|
|
patterns: geminiNoisePatterns,
|
|
input: "Line 1\nLine 2\nLine 3\n",
|
|
want: "Line 1\nLine 2\nLine 3\n",
|
|
},
|
|
{
|
|
name: "empty input",
|
|
patterns: geminiNoisePatterns,
|
|
input: "",
|
|
want: "",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
fw := newFilteringWriter(&buf, tt.patterns)
|
|
fw.Write([]byte(tt.input))
|
|
fw.Flush()
|
|
|
|
if got := buf.String(); got != tt.want {
|
|
t.Errorf("got %q, want %q", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFilteringWriterPartialLines(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
fw := newFilteringWriter(&buf, geminiNoisePatterns)
|
|
|
|
// Write partial line
|
|
fw.Write([]byte("Hello "))
|
|
fw.Write([]byte("World\n"))
|
|
fw.Flush()
|
|
|
|
if got := buf.String(); got != "Hello World\n" {
|
|
t.Errorf("got %q, want %q", got, "Hello World\n")
|
|
}
|
|
}
|