|
|
|
use crate::evaluator::TestEvaluator;
|
|
|
|
use crate::files::load_dataset;
|
|
|
|
use crate::manifest::Test;
|
|
|
|
use crate::report::dataset_diff;
|
|
|
|
use anyhow::{anyhow, bail, Result};
|
|
|
|
|
|
|
|
pub fn register_parser_tests(evaluator: &mut TestEvaluator) {
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestNTriplesPositiveSyntax",
|
|
|
|
evaluate_positive_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestNQuadsPositiveSyntax",
|
|
|
|
evaluate_positive_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTurtlePositiveSyntax",
|
|
|
|
evaluate_positive_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTrigPositiveSyntax",
|
|
|
|
evaluate_positive_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestNTriplesNegativeSyntax",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestNQuadsNegativeSyntax",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTurtleNegativeSyntax",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTurtleNegativeEval",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTrigNegativeSyntax",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTrigNegativeEval",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestXMLNegativeSyntax",
|
|
|
|
evaluate_negative_syntax_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTurtleEval",
|
|
|
|
evaluate_eval_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestTrigEval",
|
|
|
|
evaluate_eval_test,
|
|
|
|
);
|
|
|
|
evaluator.register(
|
|
|
|
"http://www.w3.org/ns/rdftest#TestXMLEval",
|
|
|
|
evaluate_eval_test,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn evaluate_positive_syntax_test(test: &Test) -> Result<()> {
|
|
|
|
let action = test
|
|
|
|
.action
|
|
|
|
.as_deref()
|
|
|
|
.ok_or_else(|| anyhow!("No action found for test {test}"))?;
|
|
|
|
load_dataset(action).map_err(|e| anyhow!("Parse error: {e}"))?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn evaluate_negative_syntax_test(test: &Test) -> Result<()> {
|
|
|
|
let action = test
|
|
|
|
.action
|
|
|
|
.as_deref()
|
|
|
|
.ok_or_else(|| anyhow!("No action found for test {test}"))?;
|
|
|
|
match load_dataset(action) {
|
|
|
|
Ok(_) => bail!("File parsed with an error even if it should not"),
|
|
|
|
Err(_) => Ok(()),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn evaluate_eval_test(test: &Test) -> Result<()> {
|
|
|
|
let action = test
|
|
|
|
.action
|
|
|
|
.as_deref()
|
|
|
|
.ok_or_else(|| anyhow!("No action found for test {test}"))?;
|
|
|
|
let mut actual_graph =
|
|
|
|
load_dataset(action).map_err(|e| anyhow!("Parse error on file {action}: {e}"))?;
|
|
|
|
actual_graph.canonicalize();
|
|
|
|
if let Some(result) = &test.result {
|
|
|
|
let mut expected_graph =
|
|
|
|
load_dataset(result).map_err(|e| anyhow!("Parse error on file {action}: {e}"))?;
|
|
|
|
expected_graph.canonicalize();
|
|
|
|
if expected_graph == actual_graph {
|
|
|
|
Ok(())
|
|
|
|
} else {
|
|
|
|
bail!(
|
|
|
|
"The two files are not isomorphic. Diff:\n{}",
|
|
|
|
dataset_diff(&expected_graph, &actual_graph)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
bail!("No tests result found")
|
|
|
|
}
|
|
|
|
}
|