use proptest::prelude::*;
use crate::compat::graphql_parser_v0_4::to_graphql_parser_query_ast;
use crate::compat::graphql_parser_v0_4::to_graphql_parser_schema_ast;
use crate::tests::property_tests::generators::documents::arb_executable_document;
use crate::tests::property_tests::generators::documents::arb_schema_document;
use crate::tests::property_tests::proptest_config;
use crate::GraphQLParser;
proptest! {
#![proptest_config(proptest_config())]
#[test]
fn schema_differential_vs_graphql_parser_v04(
source in arb_schema_document(3)
) {
let our_result = GraphQLParser::new(&source).parse_schema_document();
let oracle_result =
graphql_parser::schema::parse_schema::<String>(&source);
match (our_result.has_errors(), oracle_result.is_err()) {
(false, false) => {
let (our_doc, _) = our_result.into_valid().unwrap();
let sm = crate::SourceMap::new_with_source(
&source, None,
);
let our_converted = to_graphql_parser_schema_ast(&our_doc, &sm);
let oracle_doc = oracle_result.unwrap().into_static();
let our_debug = format!("{:#?}", our_converted.into_ast());
let oracle_debug = format!("{oracle_doc:#?}");
prop_assert_eq!(
our_debug,
oracle_debug,
"AST mismatch between our parser and graphql_parser \
v0.4.\nSource:\n{}",
source,
);
},
(true, false) => {
prop_assert!(
false,
"Our parser rejected a document that graphql_parser \
v0.4 accepted.\n\
Source:\n{}\n\n\
Our errors:\n{}",
source,
our_result.formatted_errors(),
);
},
(false, true) => {
},
(true, true) => {},
}
}
#[test]
fn executable_differential_vs_graphql_parser_v04(
source in arb_executable_document(3)
) {
let our_result = GraphQLParser::new(&source)
.parse_executable_document();
let oracle_result =
graphql_parser::parse_query::<String>(&source);
match (our_result.has_errors(), oracle_result.is_err()) {
(false, false) => {
let (our_doc, _) = our_result.into_valid().unwrap();
let sm = crate::SourceMap::new_with_source(
&source, None,
);
let our_converted = to_graphql_parser_query_ast(&our_doc, &sm);
let oracle_doc = oracle_result.unwrap().into_static();
let our_debug =
format!("{:#?}", our_converted.into_ast());
let oracle_debug = format!("{oracle_doc:#?}");
prop_assert_eq!(
our_debug,
oracle_debug,
"AST mismatch between our parser and graphql_parser \
v0.4.\nSource:\n{}",
source,
);
},
(true, false) => {
prop_assert!(
false,
"Our parser rejected a document that graphql_parser \
v0.4 accepted.\n\
Source:\n{}\n\n\
Our errors:\n{}",
source,
our_result.formatted_errors(),
);
},
(false, true) => {},
(true, true) => {},
}
}
}