12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package llama
- import (
- "strings"
- "testing"
- "github.com/google/go-cmp/cmp"
- )
- func TestJsonSchema(t *testing.T) {
- testCases := []struct {
- name string
- schema JsonSchema
- expected string
- }{
- {
- name: "empty schema",
- schema: JsonSchema{
- Type: "object",
- },
- expected: `array ::= "[" space ( value ("," space value)* )? "]" space
- boolean ::= ("true" | "false") space
- char ::= [^"\\\x7F\x00-\x1F] | [\\] (["\\bfnrt] | "u" [0-9a-fA-F]{4})
- decimal-part ::= [0-9]{1,16}
- integral-part ::= [0] | [1-9] [0-9]{0,15}
- null ::= "null" space
- number ::= ("-"? integral-part) ("." decimal-part)? ([eE] [-+]? integral-part)? space
- object ::= "{" space ( string ":" space value ("," space string ":" space value)* )? "}" space
- root ::= object
- space ::= | " " | "\n" [ \t]{0,20}
- string ::= "\"" char* "\"" space
- value ::= object | array | string | number | boolean | null`,
- },
- {
- name: "invalid schema with circular reference",
- schema: JsonSchema{
- Type: "object",
- Properties: map[string]any{
- "self": map[string]any{
- "$ref": "#", // Self reference
- },
- },
- },
- expected: "", // Should return empty string for invalid schema
- },
- {
- name: "schema with invalid type",
- schema: JsonSchema{
- Type: "invalid_type", // Invalid type
- Properties: map[string]any{
- "foo": map[string]any{
- "type": "string",
- },
- },
- },
- expected: "", // Should return empty string for invalid schema
- },
- }
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- result := tc.schema.AsGrammar()
- if !strings.EqualFold(strings.TrimSpace(result), strings.TrimSpace(tc.expected)) {
- if diff := cmp.Diff(tc.expected, result); diff != "" {
- t.Fatalf("grammar mismatch (-want +got):\n%s", diff)
- }
- }
- })
- }
- }
|