Bound generated text content and diagnostics
This commit is contained in:
@@ -87,6 +87,56 @@ func TestTypedValidatorsMatchEmbeddedSchemaObjectShape(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTypedValidatorsMatchEmbeddedSchemaContentLimits(t *testing.T) {
|
||||
validators := []struct {
|
||||
name string
|
||||
valid string
|
||||
invalid []string
|
||||
validate func([]byte) error
|
||||
}{
|
||||
{
|
||||
name: "daily",
|
||||
valid: fmt.Sprintf(`{"summary":%q,"forecast_discussion":[%q],"precipitation_timing":""}`, strings.Repeat("s", 4_000), strings.Repeat("d", 4_000)),
|
||||
invalid: []string{fmt.Sprintf(`{"summary":%q,"forecast_discussion":["discussion"],"precipitation_timing":""}`, strings.Repeat("s", 4_001)), fmt.Sprintf(`{"summary":"summary","forecast_discussion":[%s],"precipitation_timing":""}`, strings.TrimSuffix(strings.Repeat(`"discussion",`, 13), ",")), `{"summary":"summary","forecast_discussion":[null],"precipitation_timing":""}`},
|
||||
validate: validateDailyJSON,
|
||||
},
|
||||
{
|
||||
name: "today",
|
||||
valid: fmt.Sprintf(`{"summary":%q,"forecast_discussion":[%q],"precipitation_timing":""}`, strings.Repeat("s", 4_000), strings.Repeat("d", 4_000)),
|
||||
invalid: []string{fmt.Sprintf(`{"summary":"summary","forecast_discussion":[%q],"precipitation_timing":""}`, strings.Repeat("d", 4_001))},
|
||||
validate: validateTodayJSON,
|
||||
},
|
||||
{
|
||||
name: "tomorrow",
|
||||
valid: fmt.Sprintf(`{"summary":%q,"forecast_discussion":[%q],"precipitation_timing":""}`, strings.Repeat("s", 4_000), strings.Repeat("d", 4_000)),
|
||||
invalid: []string{fmt.Sprintf(`{"summary":"summary","forecast_discussion":["discussion"],"precipitation_timing":%q}`, strings.Repeat("t", 4_001))},
|
||||
validate: validateTomorrowJSON,
|
||||
},
|
||||
{
|
||||
name: "hourly",
|
||||
valid: fmt.Sprintf(`{"summary":%q,"forecast_discussion":%q,"precipitation_timing":""}`, strings.Repeat("s", 4_000), strings.Repeat("d", 12_000)),
|
||||
invalid: []string{fmt.Sprintf(`{"summary":"summary","forecast_discussion":%q,"precipitation_timing":""}`, strings.Repeat("d", 12_001))},
|
||||
validate: validateHourlyJSON,
|
||||
},
|
||||
}
|
||||
for _, validator := range validators {
|
||||
t.Run(validator.name, func(t *testing.T) {
|
||||
schema := generatedTextSchema(t, validator.name)
|
||||
for _, input := range append([]string{validator.valid}, validator.invalid...) {
|
||||
instance, err := jsonschema.UnmarshalJSON(strings.NewReader(input))
|
||||
if err != nil {
|
||||
t.Fatalf("parse schema instance: %v", err)
|
||||
}
|
||||
schemaValid := schema.Validate(instance) == nil
|
||||
typedValid := validator.validate([]byte(input)) == nil
|
||||
if schemaValid != typedValid {
|
||||
t.Fatalf("schema valid = %t, typed valid = %t", schemaValid, typedValid)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func generatedTextSchema(t *testing.T, id string) *jsonschema.Schema {
|
||||
t.Helper()
|
||||
data, err := promptassets.Schema(id)
|
||||
|
||||
Reference in New Issue
Block a user