nipper 0.1.9

HTML manipulation with CSS seletors
Documentation
mod data;

use data::doc;
use data::doc2;

#[test]
fn test_attr_exists() {
    let doc = doc();
    assert!(doc.select("a").attr("href").is_some());
}

#[test]
fn test_attr_or() {
    let doc = doc();
    let attr1: &str = &doc.select("a").attr_or("fake-attribute", "alternative");
    let attr2: &str = &doc.select("zz").attr_or("fake-attribute", "alternative");
    assert_eq!(attr1, "alternative");
    assert_eq!(attr2, "alternative");
}

#[test]
fn test_attr_not_exist() {
    let doc = doc();
    assert!(doc.select("div.row-fluid").attr("href").is_none());
}

#[test]
fn test_remove_attr() {
    let doc = doc2();
    let mut sel = doc.select("div");

    sel.remove_attr("id");

    assert!(sel.attr("id").is_none());
}

#[test]
fn test_set_attr() {
    let doc = doc2();
    let mut sel = doc.select("#main");
    sel.set_attr("id", "not-main");

    let id: &str = &sel.attr("id").expect("got an attribute");
    assert_eq!(id, "not-main");
}

#[test]
fn test_set_attr2() {
    let doc = doc2();
    let mut sel = doc.select("#main");

    sel.set_attr("foo", "bar");

    let id: &str = &sel.attr("foo").expect("got an attribute");
    assert_eq!(id, "bar");
}

#[test]
fn test_text() {
    let doc = doc();
    let txt: &str = &doc.select("h1").text();

    assert_eq!(txt.trim(), "Provok.in");
}

#[test]
fn test_add_class() {
    let doc = doc2();
    let mut sel = doc.select("#main");

    sel.add_class("main main main");
    let class: &str = &sel.attr("class").unwrap();
    assert_eq!(class, "main");
}

#[test]
fn test_add_class_similar() {
    let doc = doc2();
    let mut sel = doc.select("#nf5");

    sel.add_class("odd");
    println!("{}", sel.html());

    assert!(sel.has_class("odd"));
    assert!(sel.has_class("odder"));
}

#[test]
fn test_add_empty_class() {
    let doc = doc2();
    let mut sel = doc.select("#main");

    sel.add_class("");
    assert!(sel.attr("class").is_none());
}

#[test]
fn test_add_classes() {
    let doc = doc2();
    let mut sel = doc.select("#main");

    sel.add_class("a b");
    assert!(sel.has_class("a"));
    assert!(sel.has_class("b"));
}

#[test]
fn test_has_class() {
    let doc = doc();
    let sel = doc.select("div");
    assert!(sel.has_class("span12"));
}

#[test]
fn has_class_none() {
    let doc = doc();
    let sel = doc.select("toto");
    assert!(!sel.has_class("toto"));
}

#[test]
fn has_class_not_first() {
    let doc = doc();
    let sel = doc.select(".alert");
    assert!(sel.has_class("alert-error"));
}

#[test]
fn test_remove_class() {
    let doc = doc2();
    let mut sel = doc.select("#nf1");
    sel.remove_class("one row");

    assert!(sel.has_class("even"));
    assert!(!sel.has_class("one"));
    assert!(!sel.has_class("row"));
}

#[test]
fn test_remove_class_similar() {
    let doc = doc2();
    let mut sel = doc.select("#nf5, #nf6");
    assert_eq!(sel.length(), 2);

    sel.remove_class("odd");
    assert!(sel.has_class("odder"));
}