use std::str::FromStr;
use crate::meta::observe::{render_chrome, render_flamegraph, render_human, TraceFormat};
use super::sample_trace;
#[test]
fn parses_every_declared_trace_format() {
assert_eq!(TraceFormat::from_str("none"), Ok(TraceFormat::None));
assert_eq!(TraceFormat::from_str("human"), Ok(TraceFormat::Human));
assert_eq!(TraceFormat::from_str("chrome"), Ok(TraceFormat::Chrome));
assert_eq!(
TraceFormat::from_str("flamegraph"),
Ok(TraceFormat::Flamegraph)
);
}
#[test]
fn renders_human_table_with_layer_op_verdict_and_duration() {
let rendered = render_human(&sample_trace());
assert!(rendered.contains("layer op verdict duration_us"));
assert!(rendered.contains("L1"));
assert!(rendered.contains("primitive.bitwise.xor"));
assert!(rendered.contains("pass"));
}
#[test]
fn renders_chrome_trace_events_json() {
let rendered = render_chrome(&sample_trace()).expect("chrome trace should render");
let parsed: serde_json::Value =
serde_json::from_str(&rendered).expect("chrome trace should be valid JSON");
assert!(parsed["traceEvents"].is_array());
assert_eq!(parsed["traceEvents"][0]["ph"], "X");
}
#[test]
fn renders_inferno_folded_stack_lines() {
let rendered = render_flamegraph(&sample_trace());
assert!(rendered.contains("vyre_conform.enforce_all;L1:primitive.bitwise.xor 25"));
}