sppparse 0.1.4

Sparsed pointer parser for JSON/YAML
Documentation
use super::*;

fn ref_pointer_local_helper(raw_pointer: &str, expected_pointer: &str) {
    let r = SparseMetadata::new(
        raw_pointer.to_string(),
        PathBuf::from(sparse_test_rel_path!("./examples/selector.json")),
    );

    assert_eq!(
        r.pfile_path(),
        &PathBuf::from(sparse_test_rel_path!("./examples/selector.json")),
        "File path mismatch"
    );
    assert_eq!(expected_pointer, r.pointer(), "pointers mismatch");
}

fn ref_pointer_distant_helper(raw_pointer: &str, expected_path: &str, expected_pointer: &str) {
    let r = SparseMetadata::new(
        raw_pointer.to_string(),
        PathBuf::from(sparse_test_rel_path!("./examples/selector.json")),
    );
    let root = sparse_test_rel_path!("./examples/");
    let mut distant_path = PathBuf::from(root);
    distant_path.push(PathBuf::from(expected_path));
    assert_eq!(r.pfile_path(), &distant_path, "No distant reference");
    assert_eq!(expected_pointer, r.pointer(), "pointers mismatch");
}

#[test]
fn ref_pointer_local_simple() {
    ref_pointer_local_helper("/hello", "/hello");
}

#[test]
fn ref_pointer_local_missing_slash() {
    ref_pointer_local_helper("hello", "/hello");
}

#[test]
fn ref_pointer_local_with_1_hashtag() {
    ref_pointer_local_helper("#hello", "/hello");
}

#[test]
fn ref_pointer_local_with_multiple_hashtags() {
    ref_pointer_local_helper("####hel#lo", "/###hel#lo");
}

#[test]
fn ref_pointer_distant_simple() {
    ref_pointer_distant_helper("./world.json#/hello", "./world.json", "/hello");
}

#[test]
fn ref_pointer_distant_absolute() {
    ref_pointer_distant_helper("/tmp/hello.json#/hello", "/tmp/hello.json", "/hello");
}

#[test]
fn ref_pointer_distant_additional_hashtag() {
    ref_pointer_distant_helper("/tmp/#hello.json#/hello", "/tmp/", "/hello.json#/hello");
}