#[cfg(test)]
mod tests {
use crate::render::mode::json::{JsonLine, JsonRenderer};
#[test]
fn compact_is_single_line() {
let mut buf = Vec::new();
{
let mut r = JsonRenderer::new(&mut buf, false);
r.render(&JsonLine {
origin: "app.log",
raw: "hello",
fields: vec![],
seq: 1,
})
.unwrap();
}
let out = String::from_utf8(buf).unwrap();
assert_eq!(out.lines().count(), 1);
assert!(out.contains("\"origin\":\"app.log\""));
}
#[test]
fn pretty_adds_indentation() {
let mut buf = Vec::new();
{
let mut r = JsonRenderer::new(&mut buf, true);
r.render(&JsonLine {
origin: "app.log",
raw: "hi",
fields: vec![],
seq: 2,
})
.unwrap();
}
let out = String::from_utf8(buf).unwrap();
assert!(out.lines().count() > 1);
assert!(out.contains("\n \"origin\""));
}
#[test]
fn fields_roundtrip() {
let mut buf = Vec::new();
{
let mut r = JsonRenderer::new(&mut buf, false);
let fields = vec![("user".to_string(), "alice".to_string())];
r.render_raw("app.log", "hi", &fields, 7).unwrap();
}
let out = String::from_utf8(buf).unwrap();
assert!(out.contains("[[\"user\",\"alice\"]]"));
assert!(out.contains("\"seq\":7"));
}
#[test]
fn error_line_is_valid_json() {
let mut buf = Vec::new();
{
let mut r = JsonRenderer::new(&mut buf, false);
r.write_error("bad input").unwrap();
}
let out = String::from_utf8(buf).unwrap();
assert_eq!(out.trim(), "{\"error\":\"bad input\"}");
}
}