oximedia-core 0.1.5

Core types and traits for OxiMedia
Documentation
use oximedia_core::error_context::{ErrorContext, ErrorFrame};

#[test]
fn test_error_frame_display() {
    let frame = ErrorFrame {
        file: "src/lib.rs",
        line: 42,
        function: "my_func",
        message: std::borrow::Cow::Borrowed("something failed"),
    };
    let s = frame.to_string();
    assert!(s.contains("src/lib.rs"));
    assert!(s.contains("42"));
    assert!(s.contains("something failed"));
}

#[test]
fn test_error_chain_multi_frame() {
    let mut ctx = ErrorContext::new("comp", "op", "msg");
    ctx.push_frame(ErrorFrame {
        file: "a.rs",
        line: 1,
        function: "fn1",
        message: std::borrow::Cow::Borrowed("level 1"),
    });
    ctx.push_frame(ErrorFrame {
        file: "b.rs",
        line: 2,
        function: "fn2",
        message: std::borrow::Cow::Borrowed("level 2"),
    });
    ctx.push_frame(ErrorFrame {
        file: "c.rs",
        line: 3,
        function: "fn3",
        message: std::borrow::Cow::Borrowed("level 3"),
    });
    let display = ctx.frames_display();
    assert!(display.contains("fn1"), "frame 1 not in display");
    assert!(display.contains("fn2"), "frame 2 not in display");
    assert!(display.contains("fn3"), "frame 3 not in display");
}

#[test]
fn test_error_context_empty_display() {
    let ctx = ErrorContext::new("comp", "op", "msg");
    let s = ctx.frames_display();
    assert!(!s.is_empty());
}

#[test]
fn test_error_frame_function_field() {
    let frame = ErrorFrame {
        file: "src/codec.rs",
        line: 100,
        function: "decode_frame",
        message: std::borrow::Cow::Borrowed("bitstream error"),
    };
    let s = frame.to_string();
    assert!(s.contains("decode_frame"));
    assert!(s.contains("100"));
    assert!(s.contains("bitstream error"));
}

#[test]
fn test_with_frame_chaining() {
    let ctx = ErrorContext::new("muxer", "write", "disk full")
        .with_frame(ErrorFrame {
            file: "mux.rs",
            line: 55,
            function: "write_packet",
            message: std::borrow::Cow::Borrowed("I/O error"),
        })
        .with_frame(ErrorFrame {
            file: "io.rs",
            line: 10,
            function: "flush",
            message: std::borrow::Cow::Borrowed("disk full"),
        });
    assert_eq!(ctx.frame_count(), 2);
    let display = ctx.frames_display();
    assert!(display.contains("write_packet"));
    assert!(display.contains("flush"));
}

#[test]
fn test_error_frame_cow_owned() {
    let value = 99u32;
    let frame = ErrorFrame {
        file: "src/main.rs",
        line: 7,
        function: "run",
        message: std::borrow::Cow::Owned(format!("count was {value}")),
    };
    let s = frame.to_string();
    assert!(s.contains("99"));
}

#[test]
fn test_ctx_macro_borrowed() {
    let frame: ErrorFrame = oximedia_core::ctx!("literal message");
    let s = frame.to_string();
    assert!(s.contains("literal message"));
}

#[test]
fn test_ctx_macro_formatted() {
    let n = 42u32;
    let frame: ErrorFrame = oximedia_core::ctx!("value was {}", n);
    let s = frame.to_string();
    assert!(s.contains("42"));
}