unhtml 0.8.0

A magic html parser
Documentation
use crate::{Result, Text};
use scraper::{Html, Selector};

#[test]
fn test_inner_text() {
    let selector = Selector::parse("p").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p> 1 </p>
            </div>
            <div>
                <p> 2 </p>
            </div>
            <p> 3 </p>
        </div>
    "##,
    );
    let result: u8 = html.select(&selector).inner_text().unwrap();
    assert_eq!(1, result);
}

#[test]
fn test_vec_inner_text() {
    let selector = Selector::parse("p").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p> 1 </p>
            </div>
            <div>
                <p> 2 </p>
            </div>
            <p> 3 </p>
        </div>
    "##,
    );
    let result: Vec<u8> = html.select(&selector).inner_text().unwrap();
    assert_eq!(result, vec![1, 2, 3]);
}

#[test]
fn test_option_inner_text() {
    let selector = Selector::parse("p").unwrap();
    let foo_selector = Selector::parse("a").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p> 1 </p>
            </div>
            <div>
                <p> 2 </p>
            </div>
            <p> 3 </p>
        </div>
    "##,
    );
    assert_eq!(Some(1u8), html.select(&selector).inner_text().unwrap());
    let foo_result: Option<u8> = html.select(&foo_selector).inner_text().unwrap();
    assert_eq!(None, foo_result);
}

#[test]
fn test_fail_inner_text() {
    let foo_selector = Selector::parse("a").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p> 1 </p>
            </div>
            <div>
                <p> 2 </p>
            </div>
            <p> 3 </p>
        </div>
    "##,
    );
    let foo_result: Result<u8> = html.select(&foo_selector).inner_text();
    assert!(!foo_result.is_ok());
}

#[test]
fn test_attr() {
    let selector = Selector::parse("p").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p value=" 1"></p>
            </div>
            <div>
                <p value=" 2"></p>
            </div>
            <p value="3 "></p>
        </div>
    "##,
    );
    let result: u8 = html.select(&selector).attr("value").unwrap();
    assert_eq!(1, result);
}

#[test]
fn test_vec_attr() {
    let selector = Selector::parse("p").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p value=" 1"></p>
            </div>
            <div>
                <p value=" 2"></p>
            </div>
            <p value="3 "></p>
        </div>
    "##,
    );
    let result: Vec<u8> = html.select(&selector).attr("value").unwrap();
    assert_eq!(result, vec![1, 2, 3]);
}

#[test]
fn test_option_attr() {
    let selector = Selector::parse("p").unwrap();
    let foo_selector = Selector::parse("a").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p value=" 1"></p>
            </div>
            <div>
                <p value=" 2"></p>
            </div>
            <p value="3 "></p>
        </div>
    "##,
    );
    assert_eq!(Some(1u8), html.select(&selector).attr("value").unwrap());
    let foo_result: Option<u8> = html.select(&foo_selector).attr("value").unwrap();
    assert_eq!(None, foo_result);
}

#[test]
fn test_fail_attr() {
    let foo_selector = Selector::parse("a").unwrap();
    let html = Html::parse_fragment(
        r##"
        <div>
            <div>
                <p value=" 1"></p>
            </div>
            <div>
                <p value=" 2"></p>
            </div>
            <p value="3 "></p>
        </div>
    "##,
    );
    let foo_result: Result<u8> = html.select(&foo_selector).attr("value");
    assert!(!foo_result.is_ok());
}