forked from 1b-agent/opencadstudio-upstream
fix(bedit): refuse entities_create and redefine while a session is open
This commit is contained in:
1 parent
f7bd0ca5ee
commit
b221ce5e33
5 files changed
+301
No files matched your search
@@ -1255,3 +1255,71 @@ fn locked_redefine_block_raw_refuses_cycle() {
|
||||
"expected cycle error, got: {err}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn locked_redefine_block_raw_refuses_open_block() {
|
||||
let mut scene = Scene::new();
|
||||
let open_name = "REDEF_OPEN";
|
||||
let other_name = "REDEF_CLOSED";
|
||||
|
||||
scene.define_block_raw(
|
||||
open_name,
|
||||
Vector3::ZERO,
|
||||
vec![EntityType::Line(Line::from_points(
|
||||
Vector3::ZERO,
|
||||
Vector3::new(1.0, 0.0, 0.0),
|
||||
))],
|
||||
);
|
||||
scene.define_block_raw(
|
||||
other_name,
|
||||
Vector3::ZERO,
|
||||
vec![EntityType::Line(Line::from_points(
|
||||
Vector3::ZERO,
|
||||
Vector3::new(2.0, 0.0, 0.0),
|
||||
))],
|
||||
);
|
||||
|
||||
let open_record = scene.document.block_records.get(open_name).unwrap().handle;
|
||||
let members_before = scene
|
||||
.document
|
||||
.block_records
|
||||
.get(open_name)
|
||||
.unwrap()
|
||||
.entity_handles
|
||||
.clone();
|
||||
scene.block_edit_block = Some(open_record);
|
||||
|
||||
let res = scene.redefine_block_raw(
|
||||
open_name,
|
||||
Vector3::ZERO,
|
||||
vec![EntityType::Line(Line::from_points(
|
||||
Vector3::ZERO,
|
||||
Vector3::new(9.0, 9.0, 0.0),
|
||||
))],
|
||||
);
|
||||
let err = res.expect_err("redefining the open block must be refused");
|
||||
assert!(
|
||||
err.contains(open_name) && err.contains("Block Editor"),
|
||||
"expected refusal naming the block and the editor, got: {err}"
|
||||
);
|
||||
assert_eq!(
|
||||
scene
|
||||
.document
|
||||
.block_records
|
||||
.get(open_name)
|
||||
.unwrap()
|
||||
.entity_handles,
|
||||
members_before,
|
||||
"the open definition must be untouched"
|
||||
);
|
||||
|
||||
let res = scene.redefine_block_raw(
|
||||
other_name,
|
||||
Vector3::ZERO,
|
||||
vec![EntityType::Line(Line::from_points(
|
||||
Vector3::ZERO,
|
||||
Vector3::new(8.0, 0.0, 0.0),
|
||||
))],
|
||||
);
|
||||
assert!(res.is_ok(), "a closed block must still redefine: {res:?}");
|
||||
}
|
||||
@@ -1432,6 +1432,11 @@ impl Scene {
|
||||
self.define_block_raw(name, base_point, entities);
|
||||
return Ok(());
|
||||
};
|
||||
if self.block_edit_block == Some(br_handle) {
|
||||
return Err(format!(
|
||||
"block \"{name}\" is open in the Block Editor; close it before redefining"
|
||||
));
|
||||
}
|
||||
let owned: Vec<Handle> = self
|
||||
.document
|
||||
.entities()
|
||||
|
||||
Reference in new issue
Block a user