zyn 0.5.4

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

#[test]
fn new_is_empty() {
    let d = zyn::mark::new().build();
    assert!(d.is_empty());
    assert_eq!(d.len(), 0);
    assert!(!d.is_error());
    assert_eq!(d.level(), Level::None);
}

#[test]
fn default_is_empty() {
    let d = Diagnostic::default();
    assert!(d.is_empty());
}

#[test]
fn error_creates_single_with_correct_level() {
    let d = zyn::mark::error("something broke").build();
    assert!(d.is_error());
    assert_eq!(d.level(), Level::Error);

    let output = format!("{d}");
    assert!(output.contains("something broke"));
}

#[test]
fn from_syn_error_preserves_message() {
    let err = zyn::syn::Error::new(Span::call_site(), "field is missing");
    let d = Diagnostic::from(err);
    assert_eq!(d.len(), 1);
    assert!(d.is_error());

    let output = format!("{d}");
    assert!(output.contains("field is missing"));
}

#[test]
fn from_syn_error_combined_preserves_all_messages() {
    let mut err = zyn::syn::Error::new(Span::call_site(), "first problem");
    err.combine(zyn::syn::Error::new(Span::call_site(), "second problem"));
    err.combine(zyn::syn::Error::new(Span::call_site(), "third problem"));

    let d = Diagnostic::from(err);
    assert_eq!(d.len(), 3);

    let output = format!("{d}");
    assert!(output.contains("first problem"));
    assert!(output.contains("second problem"));
    assert!(output.contains("third problem"));
}