jsonschema-rs/jsonschema/tests/test_suite.rs

50 lines
1.8 KiB
Rust

use json_schema_test_suite::{json_schema_test_suite, TestCase};
use jsonschema::{Draft, JSONSchema};
#[json_schema_test_suite("tests/suite", "draft4", {"optional_bignum_0_0", "optional_bignum_2_0", "optional_float_overflow_0_0", r"optional_format_email_0_\d+"})]
#[json_schema_test_suite("tests/suite", "draft6", {"optional_float_overflow_0_0", r"optional_format_email_0_\d+"})]
#[json_schema_test_suite("tests/suite", "draft7", {
r"optional_format_idn_hostname_0_\d+", // https://github.com/Stranger6667/jsonschema-rs/issues/101
"optional_float_overflow_0_0",
r"optional_format_email_0_\d+"
})]
fn test_draft(_server_address: &str, test_case: TestCase) {
let draft_version = match test_case.draft_version.as_ref() {
"draft4" => Draft::Draft4,
"draft6" => Draft::Draft6,
"draft7" => Draft::Draft7,
_ => panic!("Unsupported draft"),
};
let compiled = JSONSchema::options()
.with_draft(draft_version)
.compile(&test_case.schema)
.unwrap();
let result = compiled.validate(&test_case.instance);
if test_case.is_valid {
if let Err(mut errors_iterator) = result {
let first_error = errors_iterator.next();
assert!(
first_error.is_none(),
format!(
"Schema: {}\nInstance: {}\nError: {:?}",
test_case.schema, test_case.instance, first_error,
)
);
}
} else {
assert!(
result.is_err(),
format!(
"Schema: {}\nInstance: {}\nError: It is supposed to be INVALID!",
test_case.schema, test_case.instance,
)
);
}
// Ensure that `JSONSchema::is_valid` is in sync with the validity expectation
assert_eq!(compiled.is_valid(&test_case.instance), test_case.is_valid);
}