| package stream
|
|
|
| import (
|
| "bytes"
|
| "os"
|
| "strings"
|
| "testing"
|
| )
|
|
|
|
|
|
|
| func TestTransformMorphToClaudeStream_IncompleteToolCall(t *testing.T) {
|
|
|
| testData, err := os.ReadFile("../../test/fixtures/incomplete_tool_call.txt")
|
| if err != nil {
|
| t.Fatalf("Failed to read test data: %v", err)
|
| }
|
|
|
|
|
| input := bytes.NewReader(testData)
|
|
|
|
|
| var output bytes.Buffer
|
|
|
|
|
| err = TransformMorphToClaudeStream(input, "claude-sonnet-4-5", 0, &output, nil)
|
| if err != nil {
|
| t.Errorf("Transform failed: %v", err)
|
| }
|
|
|
|
|
| outputStr := output.String()
|
|
|
|
|
| if !strings.Contains(outputStr, "event: message_start") {
|
| t.Error("Missing message_start event")
|
| }
|
|
|
| if !strings.Contains(outputStr, "event: message_stop") {
|
| t.Error("Missing message_stop event - this is the bug!")
|
| }
|
|
|
|
|
| if !strings.Contains(outputStr, "I'll analyze this") {
|
| t.Error("Missing expected content")
|
| }
|
|
|
|
|
|
|
| if strings.Contains(outputStr, "function_calls") {
|
| t.Error("Incomplete tool call XML should not be in output")
|
| }
|
|
|
|
|
| eventCount := strings.Count(outputStr, "event:")
|
| t.Logf("Total events: %d", eventCount)
|
|
|
|
|
| t.Logf("Output:\n%s", outputStr)
|
| }
|
|
|
|
|
| func TestTransformMorphToClaudeStream_CompleteToolCall(t *testing.T) {
|
|
|
| t.Skip("TODO: Add complete tool call test case")
|
| }
|
|
|
|
|
| func TestTransformMorphToClaudeStream_NoToolCall(t *testing.T) {
|
| testData := `data: {"type":"start"}
|
|
|
| data: {"type":"start-step"}
|
|
|
| data: {"type":"text-start","id":"0"}
|
|
|
| data: {"type":"text-delta","id":"0","delta":"Hello"}
|
|
|
| data: {"type":"text-delta","id":"0","delta":" world"}
|
|
|
| data: {"type":"text-end","id":"0"}
|
|
|
| data: {"type":"finish-step"}
|
|
|
| data: {"type":"finish","finishReason":"stop"}
|
|
|
| data: [DONE]
|
|
|
| `
|
|
|
| input := strings.NewReader(testData)
|
| var output bytes.Buffer
|
|
|
| err := TransformMorphToClaudeStream(input, "claude-sonnet-4-5", 0, &output, nil)
|
| if err != nil {
|
| t.Fatalf("Transform failed: %v", err)
|
| }
|
|
|
| outputStr := output.String()
|
|
|
|
|
| requiredEvents := []string{
|
| "event: message_start",
|
| "event: content_block_start",
|
| "event: content_block_delta",
|
| "event: content_block_stop",
|
| "event: message_delta",
|
| "event: message_stop",
|
| }
|
|
|
| for _, event := range requiredEvents {
|
| if !strings.Contains(outputStr, event) {
|
| t.Errorf("Missing required event: %s", event)
|
| }
|
| }
|
|
|
|
|
| if !strings.Contains(outputStr, "Hello") || !strings.Contains(outputStr, "world") {
|
| t.Error("Missing expected content")
|
| }
|
|
|
| t.Logf("Output:\n%s", outputStr)
|
| } |