Files
PR-Helper/services/llm_test.go
T
2026-06-24 18:28:14 +08:00

110 lines
3.0 KiB
Go

package services
import "testing"
func TestExtractJSON_FromCodeBlock(t *testing.T) {
input := "Here is the result:\n```json\n{\"key\": \"value\"}\n```\nDone."
got := extractJSON(input)
want := "{\"key\": \"value\"}"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_FromPlainCodeBlock(t *testing.T) {
input := "Result:\n```\n[{\"a\": 1}]\n```\nEnd."
got := extractJSON(input)
want := "[{\"a\": 1}]"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_RawObject(t *testing.T) {
input := "Some text before {\"score\": 8, \"overall\": \"good\"} after text"
got := extractJSON(input)
want := "{\"score\": 8, \"overall\": \"good\"}"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_RawArray(t *testing.T) {
input := "Output: [{\"severity\": \"info\", \"description\": \"test\"}] end"
got := extractJSON(input)
want := "[{\"severity\": \"info\", \"description\": \"test\"}]"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_NestedBrackets(t *testing.T) {
input := `{"outer": {"inner": [1, 2, 3]}}`
got := extractJSON(input)
if got != input {
t.Errorf("extractJSON() = %q, want %q", got, input)
}
}
func TestExtractJSON_NestedBracketsInText(t *testing.T) {
input := `prefix {"arr": [{"k": "v"}]} suffix`
got := extractJSON(input)
want := `{"arr": [{"k": "v"}]}`
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_NoJSON(t *testing.T) {
input := "This is plain text with no JSON at all"
got := extractJSON(input)
if got != input {
t.Errorf("extractJSON() = %q, want %q (same as input)", got, input)
}
}
func TestExtractJSON_EmptyString(t *testing.T) {
got := extractJSON("")
if got != "" {
t.Errorf("extractJSON(\"\") = %q, want %q", got, "")
}
}
func TestExtractJSON_CodeBlockWithLanguageAndNewline(t *testing.T) {
input := "```json\n[\n {\"a\": 1},\n {\"b\": 2}\n]\n```"
got := extractJSON(input)
want := "[\n {\"a\": 1},\n {\"b\": 2}\n]"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_ArrayBeforeObject(t *testing.T) {
// When [ comes before { , array should be extracted
input := "[1, 2, 3] and {\"key\": \"val\"}"
got := extractJSON(input)
want := "[1, 2, 3]"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_ObjectBeforeArray(t *testing.T) {
input := "{\"key\": \"val\"} and [1, 2, 3]"
got := extractJSON(input)
want := "{\"key\": \"val\"}"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}
func TestExtractJSON_MultipleCodeBlocks(t *testing.T) {
// Should extract from the first code block
input := "```json\n{\"first\": true}\n```\n\nSome text\n\n```json\n{\"second\": true}\n```"
got := extractJSON(input)
want := "{\"first\": true}"
if got != want {
t.Errorf("extractJSON() = %q, want %q", got, want)
}
}