45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package util
|
|
|
|
import (
|
|
"testing"
|
|
"unsafe"
|
|
)
|
|
|
|
func TestGetGJSONBytesNoCopy(t *testing.T) {
|
|
input := []byte(`{"request":{"contents":[{"role":"user"}]}}`)
|
|
contents := GetGJSONBytesNoCopy(input, "request.contents")
|
|
if !contents.IsArray() || contents.Get("0.role").String() != "user" {
|
|
t.Fatalf("request.contents = %s, want user content array", contents.Raw)
|
|
}
|
|
}
|
|
|
|
func TestGetGJSONBytesNoCopyEmptyInput(t *testing.T) {
|
|
if result := GetGJSONBytesNoCopy(nil, "contents"); result.Exists() {
|
|
t.Fatalf("empty input result = %s, want missing", result.Raw)
|
|
}
|
|
}
|
|
|
|
func TestParseGJSONBytesNoCopy(t *testing.T) {
|
|
input := []byte(`{"request":{"contents":[{"role":"user"}]}}`)
|
|
root := ParseGJSONBytesNoCopy(input)
|
|
if !root.IsObject() || root.Get("request.contents.0.role").String() != "user" {
|
|
t.Fatalf("parsed root = %s, want user content array", root.Raw)
|
|
}
|
|
}
|
|
|
|
func TestParseGJSONBytesNoCopyReferencesInput(t *testing.T) {
|
|
input := []byte(`{"contents":[{"role":"user"}]}`)
|
|
root := ParseGJSONBytesNoCopy(input)
|
|
if len(root.Raw) != len(input) {
|
|
t.Fatalf("raw length = %d, want %d", len(root.Raw), len(input))
|
|
}
|
|
if unsafe.StringData(root.Raw) != unsafe.SliceData(input) {
|
|
t.Fatal("parsed result copied the input instead of referencing it")
|
|
}
|
|
}
|
|
|
|
func TestParseGJSONBytesNoCopyEmptyInput(t *testing.T) {
|
|
if result := ParseGJSONBytesNoCopy(nil); result.Exists() {
|
|
t.Fatalf("empty input result = %s, want missing", result.Raw)
|
|
}
|
|
}
|