dangerous 0.10.0

Safely and explicitly parse untrusted / dangerous data
Documentation
#[macro_use]
mod common;

use common::*;

#[test]
fn test_of_bytes() {
    let parent = &[1, 2, 3, 4][..];
    let sub = &parent[1..2];
    assert_eq!(Span::from(sub).of(parent).unwrap(), sub);

    let non_span = Span::from(&[1, 2, 2, 4][..]);
    assert_eq!(non_span.of(parent), None);
}

#[test]
fn test_of_str() {
    let parent = "1234";

    let sub = &parent[1..2];
    assert_eq!(Span::from(sub).of(parent).unwrap(), sub);

    let non_span = Span::from("1224");
    assert_eq!(non_span.of(parent), None);
}

#[test]
fn test_of_str_invalid() {
    let parent = "♥♥";

    let sub = &parent[0..3];
    assert_eq!(Span::from(sub).of(parent).unwrap(), sub);

    let non_span = Span::from(&parent.as_bytes()[0..1]);
    assert_eq!(non_span.of(parent), None);
}

#[test]
fn test_of_input_bytes() {
    let parent = dangerous::input(&[1, 2, 3, 4]);
    let sub = &parent.as_dangerous()[1..2];
    assert_eq!(Span::from(sub).of(parent.clone()).unwrap(), sub);

    let non_span = Span::from(&[1, 2, 2, 4][..]);
    assert_eq!(non_span.of(parent), None);
}

#[test]
fn test_of_input_string() {
    let parent = dangerous::input("1234");

    let sub = &parent.as_dangerous()[1..2];
    assert_eq!(Span::from(sub).of(parent.clone()).unwrap(), sub);

    let non_span = Span::from("1224");
    assert_eq!(non_span.of(parent), None);
}

#[test]
fn test_of_input_string_invalid() {
    let parent = dangerous::input("♥♥");

    let sub = &parent.as_dangerous()[0..3];
    assert_eq!(Span::from(sub).of(parent.clone()).unwrap(), sub);

    let non_span = Span::from(&parent.as_dangerous().as_bytes()[0..1]);
    assert_eq!(non_span.of(parent), None);
}