Files
cadcraft/crates/render/tests/dim_post_tolerance.rs

46 lines
1.8 KiB
Rust

//! DIMPOST's suffix goes on the tolerance values as well as on the measurement (issue #390).
use cadcraft_doc::{DimKind, DimStyle, Dimension};
use cadcraft_geom::Vec3;
use cadcraft_render::dimension_geometry;
fn text(vars: serde_json::Value) -> (String, String) {
let d = Dimension {
kind: DimKind::Linear { rotation: 0.0 },
defpt: Vec3::new(0.0, 5.0, 0.0),
text_mid: Vec3::ZERO,
p13: Vec3::ZERO,
p14: Vec3::new(10.0, 0.0, 0.0),
p15: Vec3::ZERO,
p16: Vec3::ZERO,
text: String::new(),
style: "Standard".into(),
measurement: 0.0,
text_rotation: 0.0,
user_text_pos: false,
block: None,
overrides: Default::default(),
assoc: Vec::new(),
marks: Default::default(),
};
let mut st = DimStyle::default();
let rejected = st.apply_fields(vars.as_object().unwrap());
assert!(rejected.is_empty(), "unknown variables {rejected:?}");
let g = dimension_geometry(&d, &st, 1.0);
(g.value, g.mtext)
}
#[test]
fn dimpost_suffix_applies_to_tolerances() {
let sym = serde_json::json!({"DIMPOST": "mm", "DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.1, "DIMTDEC": 1});
assert_eq!(text(sym).0, "10.0mm±0.1mm");
// With `<>` only the part after it is the suffix; the prefix stays on the measurement.
let dev = serde_json::json!({"DIMPOST": "L=<> mm", "DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.2, "DIMTDEC": 1});
let (_, mtext) = text(dev);
assert!(mtext.starts_with("L=10.0 mm{"), "{mtext}");
assert!(mtext.contains("\\S+0.1 mm^-0.2 mm;"), "{mtext}");
// No DIMPOST: unchanged.
let plain = serde_json::json!({"DIMDEC": 1, "DIMTOL": 1, "DIMTP": 0.1, "DIMTM": 0.1, "DIMTDEC": 1});
assert_eq!(text(plain).0, "10.0±0.1");
}