mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-24 19:06:56 -06:00
62 lines
2.1 KiB
Rust
62 lines
2.1 KiB
Rust
//! The Parametric category of the Tool Sets offers the constraint tools that only Tools ›
|
||
//! Parametric used to reach: Fix, Symmetric, Delete Constraints and the rest (#1134).
|
||
|
||
use cadcraft_engine::Session;
|
||
use cadcraft_ui_egui::{CadApp, Services};
|
||
use egui::accesskit::Role;
|
||
use egui::vec2;
|
||
use egui_kittest::Harness;
|
||
use egui_kittest::kittest::{NodeT, Queryable};
|
||
|
||
fn harness() -> Harness<'static, CadApp> {
|
||
let mut app = CadApp::new(Session::default(), Services::default());
|
||
app.ui.in_window_menu = false;
|
||
app.integrated_titlebar = true;
|
||
// Tall enough that the Parametric category, last in Drafting, is on screen.
|
||
let mut harness = Harness::builder().with_size(vec2(1280.0, 1600.0)).build_ui_state(
|
||
|ui, app: &mut CadApp| {
|
||
app.logic(&ui.ctx().clone());
|
||
app.ui(ui);
|
||
},
|
||
app,
|
||
);
|
||
harness.run_steps(5);
|
||
harness
|
||
}
|
||
|
||
#[test]
|
||
fn the_parametric_category_lists_fix_symmetric_and_delete_constraints() {
|
||
let parametric = cadcraft_ui_egui::palettes::DRAFTING.iter().find(|(name, _, _)| *name == "Parametric").unwrap();
|
||
let ids: Vec<&str> = parametric.1.iter().chain(parametric.2).map(|(_, cmd, _)| *cmd).collect();
|
||
for id in [
|
||
"gcfix",
|
||
"gcsymmetric",
|
||
"gccollinear",
|
||
"gcsmooth",
|
||
"dclinear",
|
||
"dcaligned",
|
||
"dcangular",
|
||
"dcradius",
|
||
"dcdiameter",
|
||
"delconstraint",
|
||
"parameters",
|
||
] {
|
||
assert!(ids.contains(&id), "{id} is missing from the Parametric tool set: {ids:?}");
|
||
}
|
||
|
||
let harness = harness();
|
||
for label in ["Fix", "Symmetric", "Delete Constraints"] {
|
||
let button = harness.get_by_role_and_label(Role::Button, label);
|
||
assert!(!button.accesskit_node().is_disabled(), "{label} is a known command, so its button is enabled");
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn clicking_fix_in_the_tool_set_starts_gcfix() {
|
||
let mut harness = harness();
|
||
assert!(harness.state().session.running.is_none());
|
||
harness.get_by_role_and_label(Role::Button, "Fix").click();
|
||
harness.run_steps(5);
|
||
assert_eq!(harness.state().session.running.as_ref().map(|r| r.id.as_str()), Some("gcfix"));
|
||
}
|