use fulgur_chart::frontend::chartjs;
use fulgur_chart::render::render_chart;
fn render(json: &str) -> String {
render_chart(&chartjs::parse(json, false).unwrap())
}
const MIXED_JSON: &str = r#"{
"type": "bar",
"data": {
"labels": ["1月", "2月", "3月"],
"datasets": [
{ "label": "売上", "data": [120, 200, 150] },
{ "type": "line", "label": "目標", "data": [140, 180, 170] }
]
},
"options": { "plugins": { "title": { "display": true, "text": "売上と目標" } } }
}"#;
#[test]
fn mixed_has_bars_line_and_markers() {
let svg = render(MIXED_JSON);
assert!(svg.matches("<rect").count() >= 3, "棒(rect)が足りない");
assert!(
svg.contains("<polyline") || svg.contains("<path"),
"折れ線(polyline/path)が無い"
);
assert!(
svg.matches("<circle").count() >= 3,
"マーカー(circle)が足りない"
);
assert!(
svg.contains("1月") && svg.contains("3月"),
"カテゴリラベルが無い"
);
assert!(svg.contains("売上") && svg.contains("目標"), "凡例が無い");
assert!(!svg.contains("NaN") && !svg.contains("inf"));
assert!(svg.starts_with("<svg") && svg.trim_end().ends_with("</svg>"));
}
#[test]
fn mixed_deterministic() {
assert_eq!(render(MIXED_JSON), render(MIXED_JSON));
}
#[test]
fn mixed_snapshot() {
let svg = render(MIXED_JSON);
insta::assert_snapshot!(svg);
}