Add test cases for drawing duplication and shapely fill mode.

This commit is contained in:
Dion Moult
2025-04-19 13:42:36 +10:00
parent 3390f58c88
commit 4896a69981
6 changed files with 98 additions and 3 deletions
+70 -1
View File
@@ -19,6 +19,52 @@ Scenario: Duplicate drawing
When I press "bim.duplicate_drawing(drawing={drawing})"
Then nothing happens
Scenario: Duplicate drawing - without duplicating annotations
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
And I look at the "Class" panel
And I set the "Products" property to "IfcElement"
And I set the "Class" property to "IfcWall"
And I click "Assign IFC Class"
And I save sample test files
And I look at the "Drawings" panel
And I click "IMPORT"
And I click "ADD"
And I press "bim.expand_target_view(target_view='PLAN_VIEW')"
And I select the "PLAN_VIEW" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
And I press "bim.add_annotation"
And the variable "drawing" is "IfcStore.get_file().by_type('IfcAnnotation')[0].id()"
When I press "bim.duplicate_drawing(drawing={drawing})"
And I select the "PLAN_VIEW-X" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
Then the object "IfcAnnotation/TEXT" is not selected
And the object "IfcAnnotation/TEXT.001" does not exist
Scenario: Duplicate drawing - with duplicating annotations
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
And I look at the "Class" panel
And I set the "Products" property to "IfcElement"
And I set the "Class" property to "IfcWall"
And I click "Assign IFC Class"
And I save sample test files
And I look at the "Drawings" panel
And I click "IMPORT"
And I click "ADD"
And I press "bim.expand_target_view(target_view='PLAN_VIEW')"
And I select the "PLAN_VIEW" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
And I press "bim.add_annotation"
And the variable "drawing" is "IfcStore.get_file().by_type('IfcAnnotation')[0].id()"
When I press "bim.duplicate_drawing(drawing={drawing}, should_duplicate_annotations=True)"
And I select the "PLAN_VIEW-X" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
Then the object "IfcAnnotation/TEXT" is not selected
And the object "IfcAnnotation/TEXT.001" exists
Scenario: Create drawing
Given an empty IFC project
And I add a cube
@@ -35,7 +81,8 @@ Scenario: Create drawing
When I select the "PLAN_VIEW" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
And I click "OUTPUT"
Then nothing happens
Then the drawing "PLAN_VIEW.svg" contains "cut"
And the drawing "PLAN_VIEW.svg" contains "IfcWall"
Scenario: Create drawing after deleting a duplicated object
Given an empty IFC project
@@ -171,3 +218,25 @@ Scenario: Add annotation - auto create context if it doesn't exist
And I click "OUTLINER_OB_CAMERA"
When I press "bim.add_annotation"
Then the object "IfcAnnotation/TEXT" is selected
Scenario: Create drawing - using shapely fill mode
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
And I look at the "Class" panel
And I set the "Products" property to "IfcElement"
And I set the "Class" property to "IfcWall"
And I click "Assign IFC Class"
And I save sample test files
And I look at the "Drawings" panel
And I click "IMPORT"
And I set the "location_hint" property to "My Storey"
And I click "ADD"
And I press "bim.expand_target_view(target_view='PLAN_VIEW')"
When I select the "MY STOREY PLAN" item in the "BIM_UL_drawinglist" list
And I click "OUTLINER_OB_CAMERA"
And I look at the "Active Drawing" panel
And I set the "Fill Mode" property to "Shapely"
And I look at the "Drawings" panel
And I click "OUTPUT"
Then the drawing "MY STOREY PLAN.svg" contains "IfcWall material-null surface"
+17 -1
View File
@@ -670,6 +670,12 @@ def then_the_object_name_is_selected(name):
assert obj in bpy.context.selected_objects
@then(parsers.parse('the object "{name}" is not selected'))
def then_the_object_name_is_not_selected(name):
obj = the_object_name_exists(name)
assert obj not in bpy.context.selected_objects
@given(parsers.parse('the object "{name}" is rotated by "{rotation_deg}" deg'))
@when(parsers.parse('the object "{name}" is rotated by "{rotation_deg}" deg'))
def the_object_name_is_rotated_by(name, rotation_deg):
@@ -1487,7 +1493,7 @@ def the_obj1_and_obj2_belong_the_same_linked_aggregate_group(obj_name1, obj_name
@when(parsers.parse('the object layer length is set to "{value}"'))
def the_obj_layer_lenght_is_set_to(value):
def the_obj_layer_length_is_set_to(value):
value = float(value)
try:
eval("bpy.context.scene.BIMModelProperties.length")
@@ -1498,6 +1504,16 @@ def the_obj_layer_lenght_is_set_to(value):
bpy.ops.bim.change_layer_length(length=value)
@then(parsers.parse('the drawing "{filename}" contains "{text}"'))
def the_drawing_filename_contains_text(filename, text):
filepath = f"{variables['cwd']}/test/files/temp/drawings/{filename}"
with open(filepath, "r") as f:
content = f.read()
if text in content:
return True
assert False, f"Drawing {filename} does not contain {text}:\n{filepath}\n{content}"
# These definitions are not to be used in tests but simply in debugging failing tests