use anyhow::Result;
use oxigraph_testsuite::evaluator::TestEvaluator;
use oxigraph_testsuite::manifest::TestManifest;
use oxigraph_testsuite::sparql_evaluator::register_sparql_tests;

fn run_testsuite(manifest_urls: Vec<&str>) -> Result<()> {
    let mut evaluator = TestEvaluator::default();
    register_sparql_tests(&mut evaluator);
    let manifest = TestManifest::new(manifest_urls);
    let results = evaluator.evaluate(manifest)?;

    let mut errors = Vec::default();
    for result in results {
        if let Err(error) = &result.outcome {
            errors.push(format!("{}: failed with error {}", result.test, error))
        }
    }

    assert!(errors.is_empty(), "\n{}\n", errors.join("\n"));
    Ok(())
}

#[test]
fn oxigraph_sparql_testsuite() -> Result<()> {
    run_testsuite(vec![
        "https://github.com/oxigraph/oxigraph/tests/sparql/manifest.ttl",
    ])
}

#[test]
fn oxigraph_sparql_results_testsuite() -> Result<()> {
    run_testsuite(vec![
        "https://github.com/oxigraph/oxigraph/tests/sparql-results/manifest.ttl",
    ])
}