src/render/mode/stream_test.rs

#[cfg(test)]
mod tests {
    use crate::render::mode::stream::StreamRenderer;

    #[test]
    fn no_origin_means_plain_line() {
        let mut buf = Vec::new();
        {
            let mut r = StreamRenderer::new(&mut buf, false, false);
            r.render("app.log", "hello").unwrap();
            r.flush().unwrap();
        }
        assert_eq!(String::from_utf8(buf).unwrap(), "hello\n");
    }

    #[test]
    fn origin_is_prefixed_with_pipe_when_enabled() {
        let mut buf = Vec::new();
        {
            let mut r = StreamRenderer::new(&mut buf, true, false);
            r.render("app.log", "hello").unwrap();
        }
        assert_eq!(String::from_utf8(buf).unwrap(), "app.log | hello\n");
    }

    #[test]
    fn with_color_emits_sgr_sequences() {
        let mut buf = Vec::new();
        {
            let mut r = StreamRenderer::new(&mut buf, true, true);
            r.render("app.log", "hello").unwrap();
        }
        let out = String::from_utf8(buf).unwrap();
        assert!(out.contains("\x1b["));
        assert!(out.ends_with("hello\n"));
    }

    #[test]
    fn multiple_lines_preserve_order() {
        let mut buf = Vec::new();
        {
            let mut r = StreamRenderer::new(&mut buf, false, false);
            r.render("a", "1").unwrap();
            r.render("a", "2").unwrap();
            r.render("a", "3").unwrap();
        }
        assert_eq!(String::from_utf8(buf).unwrap(), "1\n2\n3\n");
    }
}