mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-06-23 23:54:09 +08:00
- Added `HostCallbackID` to request, response, and stream chunk interceptors for enhanced context tracking. - Updated JavaScript engine to support custom console logging with `HostCallbackID` forwarding. - Introduced tests verifying proper integration of `HostCallbackID` in all interceptor flows and engine logging. - Enhanced logging and error handling for consistent callback-related logic implementation.
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func TestConsoleLogWritesToLogger(t *testing.T) {
|
|
var out bytes.Buffer
|
|
logger := log.StandardLogger()
|
|
originalOut := logger.Out
|
|
originalFormatter := logger.Formatter
|
|
originalLevel := logger.Level
|
|
log.SetOutput(&out)
|
|
log.SetFormatter(&log.TextFormatter{
|
|
DisableColors: true,
|
|
DisableTimestamp: true,
|
|
})
|
|
log.SetLevel(log.InfoLevel)
|
|
defer func() {
|
|
log.SetOutput(originalOut)
|
|
log.SetFormatter(originalFormatter)
|
|
log.SetLevel(originalLevel)
|
|
}()
|
|
|
|
engine := newJSEngine()
|
|
_, errRun := engine.vm.RunString(`console.log("alpha", 42, true);`)
|
|
if errRun != nil {
|
|
t.Fatalf("RunString() error = %v", errRun)
|
|
}
|
|
|
|
got := out.String()
|
|
if !strings.Contains(got, "JS console log: alpha 42 true") {
|
|
t.Fatalf("console.log output = %q, want logger output with JS message", got)
|
|
}
|
|
}
|
|
|
|
func TestConsoleLogUsesConfiguredLogger(t *testing.T) {
|
|
var messages []string
|
|
engine := newJSEngine(func(message string) error {
|
|
messages = append(messages, message)
|
|
return nil
|
|
})
|
|
_, errRun := engine.vm.RunString(`console.log("alpha", 42, true);`)
|
|
if errRun != nil {
|
|
t.Fatalf("RunString() error = %v", errRun)
|
|
}
|
|
if len(messages) != 1 || messages[0] != "alpha 42 true" {
|
|
t.Fatalf("console log messages = %#v, want formatted message", messages)
|
|
}
|
|
}
|
|
|
|
func TestStopInterruptTimerClearsExpiredInterrupt(t *testing.T) {
|
|
engine := newJSEngine()
|
|
timer, done := engine.startInterruptTimer(time.Nanosecond)
|
|
select {
|
|
case <-done:
|
|
case <-time.After(time.Second):
|
|
t.Fatal("interrupt timer did not fire")
|
|
}
|
|
|
|
engine.stopInterruptTimer(timer, done)
|
|
value, errRun := engine.vm.RunString("1 + 1")
|
|
if errRun != nil {
|
|
t.Fatalf("RunString() error after clearing interrupt = %v", errRun)
|
|
}
|
|
if got := value.ToInteger(); got != 2 {
|
|
t.Fatalf("RunString() = %d, want 2", got)
|
|
}
|
|
}
|