tortank 0.30.7

Turtle/N3 parser
Documentation
use std::{fs::File, io::BufReader, path::PathBuf, str::FromStr};

use crate::turtle::turtle_doc::{RdfJsonTriple, TurtleDoc};
const DEBUG_TTL: bool = false;
fn cmp_input_file(
    test_name: &str,
    diff_file: Option<&str>,
    output_json: bool,
    directory: &str,
    well_known_prefix: Option<String>,
) {
    println!("running {test_name}");
    let mut input_buf = String::new();
    let mut output_buf = String::new();
    let input = TurtleDoc::from_file(
        PathBuf::from_str(directory)
            .map(|p| p.join("input").join(format!("{test_name}.ttl")))
            .unwrap(),
        well_known_prefix.clone(),
        &mut input_buf,
    )
    .unwrap();
    println!("len: {}", input.len());

    if output_json {
        let f = File::open(
            PathBuf::from_str(directory)
                .map(|p| p.join("output").join(format!("{test_name}.json")))
                .unwrap(),
        )
        .unwrap();
        let output: Vec<RdfJsonTriple> = serde_json::from_reader(BufReader::new(f)).unwrap();
        assert_eq!(input.len(), output.len());
        let output_doc: TurtleDoc = (&output).try_into().unwrap();
        assert_eq!(input.difference(&output_doc).unwrap().len(), 0);
        let input: Vec<RdfJsonTriple> = (&input).into();
        assert_eq!(input, output);
        return;
    }

    let output = TurtleDoc::from_file(
        PathBuf::from_str(directory)
            .map(|p| p.join("output").join(format!("{test_name}.ttl")))
            .unwrap(),
        well_known_prefix.clone(),
        &mut output_buf,
    )
    .unwrap();
    if let Some(diff) = diff_file {
        let mut diff_buf = String::new();
        let diff = TurtleDoc::from_file(
            PathBuf::from_str(directory)
                .map(|p| p.join("diff").join(format!("{diff}.ttl")))
                .unwrap(),
            well_known_prefix,
            &mut diff_buf,
        )
        .unwrap();
        let input = input.difference(&diff).unwrap();
        assert!(!input.is_empty());
        assert_eq!(input.difference(&output).unwrap().len(), 0);
    } else {
        let diff = input.difference(&output).unwrap();
        if DEBUG_TTL {
            println!(
                "{}",
                input
                    .to_string()
                    .replace("\n", "<NEWLINE>")
                    .replace("\t", "<TAB>")
                    .replace(" ", "<SPACE>"),
            );
            println!("===");
            println!(
                "{}",
                output
                    .to_string()
                    .replace("\n", "<NEWLINE>")
                    .replace("\t", "<TAB>")
                    .replace(" ", "<SPACE>"),
            );
        }
        if !diff.is_empty() {
            println!("========== Differences ==========");
            println!("{diff}");
            println!("========== Differences ==========");
        }
        assert_eq!(diff.len(), 0);
        assert_eq!(input.len(), output.len());
    }
}
mod iri_test;
mod query;
mod triple_common_parser_test_misc;
mod turtle_doc_test;
mod turtle_doc_test_misc;
mod turtle_parser_test_misc;