use referencing::{Draft, Registry}; use referencing_testsuite::{suite, Test}; #[suite( path = "crates/jsonschema-referencing/tests/suite", drafts = [ "json-schema-draft-04", "json-schema-draft-06", "json-schema-draft-07", "json-schema-draft-2019-09", "json-schema-draft-2020-12", ], xfail = [ // `fluent-uri` does not normalize 80 port "json-schema-draft-04::rfc3986_normalization_on_insertion::test_5", "json-schema-draft-04::rfc3986_normalization_on_insertion::test_11", "json-schema-draft-04::rfc3986_normalization_on_retrieval::test_5", "json-schema-draft-04::rfc3986_normalization_on_retrieval::test_11", "json-schema-draft-06::rfc3986_normalization_on_insertion::test_5", "json-schema-draft-06::rfc3986_normalization_on_insertion::test_11", "json-schema-draft-06::rfc3986_normalization_on_retrieval::test_5", "json-schema-draft-06::rfc3986_normalization_on_retrieval::test_11", "json-schema-draft-07::rfc3986_normalization_on_insertion::test_5", "json-schema-draft-07::rfc3986_normalization_on_insertion::test_11", "json-schema-draft-07::rfc3986_normalization_on_retrieval::test_5", "json-schema-draft-07::rfc3986_normalization_on_retrieval::test_11", "json-schema-draft-2019-09::rfc3986_normalization_on_insertion::test_5", "json-schema-draft-2019-09::rfc3986_normalization_on_insertion::test_11", "json-schema-draft-2019-09::rfc3986_normalization_on_retrieval::test_5", "json-schema-draft-2019-09::rfc3986_normalization_on_retrieval::test_11", "json-schema-draft-2020-12::rfc3986_normalization_on_insertion::test_5", "json-schema-draft-2020-12::rfc3986_normalization_on_insertion::test_11", "json-schema-draft-2020-12::rfc3986_normalization_on_retrieval::test_5", "json-schema-draft-2020-12::rfc3986_normalization_on_retrieval::test_11", ] )] fn test_suite(draft: &'static str, test: Test) { let draft = match draft { "json-schema-draft-04" => Draft::Draft4, "json-schema-draft-06" => Draft::Draft6, "json-schema-draft-07" => Draft::Draft7, "json-schema-draft-2019-09" => Draft::Draft201909, "json-schema-draft-2020-12" => Draft::Draft202012, _ => panic!("Unknown draft"), }; let registry = Registry::try_from_resources( test.registry .into_iter() .map(|(uri, content)| (uri, draft.create_resource(content))), ) .expect("Invalid registry"); let resolver = registry .try_resolver(test.base_uri.unwrap_or_default()) .expect("Invalid base URI"); if test.error.is_some() { assert!(resolver.lookup(test.reference).is_err()); } else { let mut resolved = resolver.lookup(test.reference).expect("Invalid reference"); assert_eq!( resolved.contents(), &test.target.expect("Should be present") ); let mut then = test.then; while let Some(then_) = then { resolved = resolved .resolver() .lookup(then_.reference) .expect("Invalid reference"); assert_eq!( resolved.contents(), &then_.target.expect("Should be present") ); then = then_.then; } } }