zyn 0.5.4

A proc macro framework with templates, composable elements, and built-in diagnostics
Documentation
use zyn::Diagnostic;
use zyn::mark::Level;

#[test]
fn iter_yields_in_push_order() {
    let d = zyn::mark::new()
        .add(zyn::mark::error("first"))
        .add(zyn::mark::warning("second"))
        .add(zyn::mark::note("third"))
        .build();

    let levels: Vec<Level> = d.iter().map(|diag| diag.level()).collect();
    assert_eq!(levels, vec![Level::Error, Level::Warning, Level::Note]);
}

#[test]
fn iter_empty_yields_nothing() {
    let d = zyn::mark::new().build();
    assert_eq!(d.iter().count(), 0);
}

#[test]
fn into_iter_consumes_all() {
    let d = zyn::mark::new()
        .add(zyn::mark::error("a"))
        .add(zyn::mark::warning("b"))
        .add(zyn::mark::note("c"))
        .add(zyn::mark::help("d"))
        .build();

    let collected: Vec<Diagnostic> = d.into_iter().collect();
    assert_eq!(collected.len(), 4);
    assert_eq!(collected[0].level(), Level::Error);
    assert_eq!(collected[1].level(), Level::Warning);
    assert_eq!(collected[2].level(), Level::Note);
    assert_eq!(collected[3].level(), Level::Help);
}

#[test]
fn ref_into_iter_borrows() {
    let d = zyn::mark::new().add(zyn::mark::error("borrow")).build();

    let count = (&d).into_iter().count();
    assert_eq!(count, 1);
    assert_eq!(d.len(), 1);
}

#[test]
fn iter_with_multiple_children() {
    let d = zyn::mark::new()
        .add(zyn::mark::error("a1"))
        .add(zyn::mark::warning("b1"))
        .add(zyn::mark::note("b2"))
        .build();

    let levels: Vec<Level> = d.iter().map(|d| d.level()).collect();
    assert_eq!(levels, vec![Level::Error, Level::Warning, Level::Note]);
}