use plumb_core::{Config, PlumbSnapshot, ViewportKey, Violation, run_many};
fn snapshot_for(viewport: &str, width: u32, height: u32) -> PlumbSnapshot {
let mut snap = PlumbSnapshot::canned();
snap.viewport = ViewportKey::new(viewport);
snap.viewport_width = width;
snap.viewport_height = height;
snap
}
fn keys(violations: &[Violation]) -> Vec<(&str, &str, &str, u64)> {
violations.iter().map(Violation::sort_key).collect()
}
#[test]
fn run_many_collects_violations_from_every_snapshot() {
let mobile = snapshot_for("mobile", 375, 812);
let desktop = snapshot_for("desktop", 1280, 800);
let config = Config::default();
let violations = run_many([&mobile, &desktop], &config);
assert_eq!(violations.len(), 2);
let viewports: Vec<&str> = violations.iter().map(|v| v.viewport.as_str()).collect();
assert!(viewports.contains(&"mobile"));
assert!(viewports.contains(&"desktop"));
}
#[test]
fn run_many_sorts_by_rule_id_viewport_selector_dom_order() {
let mobile = snapshot_for("mobile", 375, 812);
let desktop = snapshot_for("desktop", 1280, 800);
let config = Config::default();
let violations = run_many([&mobile, &desktop], &config);
assert_eq!(
keys(&violations),
vec![
("spacing/grid-conformance", "desktop", "html > body", 2_u64,),
("spacing/grid-conformance", "mobile", "html > body", 2_u64,),
],
);
}
#[test]
fn run_many_is_input_order_independent() {
let mobile = snapshot_for("mobile", 375, 812);
let desktop = snapshot_for("desktop", 1280, 800);
let config = Config::default();
let forward = run_many([&mobile, &desktop], &config);
let reverse = run_many([&desktop, &mobile], &config);
assert_eq!(forward, reverse);
}