Fix failing tests and optimise brick tests.

This commit is contained in:
Dion Moult
2023-08-25 16:51:14 +10:00
parent 356bc18078
commit 66decc604e
12 changed files with 107 additions and 72 deletions
+29 -5
View File
@@ -3,28 +3,33 @@ Feature: Brick
Scenario: Create Brick project
Given an empty Blender session
And the Brickschema is stubbed
When I press "bim.new_brick_file"
Then nothing happens
Scenario: Load Brick project
Given an empty Blender session
And the Brickschema is stubbed
When I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
Then nothing happens
Scenario: View Brick class
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
When I press "bim.view_brick_class(brick_class='Building')"
Then nothing happens
Scenario: View Brick item
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
When I press "bim.view_brick_item(item='https://example.org/digitaltwin#lighting_zone_1')"
Then nothing happens
Scenario: Rewind Brick class
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I press "bim.view_brick_class(brick_class='Building')"
When I press "bim.rewind_brick_class"
@@ -32,19 +37,23 @@ Scenario: Rewind Brick class
Scenario: Close Brick project
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
When I press "bim.close_brick_project"
Then nothing happens
Scenario: Close Brick project then create Brick project
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I press "bim.close_brick_project"
And the Brickschema is stubbed
When I press "bim.new_brick_file"
Then nothing happens
Then nothing happens
Scenario: Add Brick - vanilla Brick with no IFC
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.new_brick_file"
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I set "scene.BIMBrickProperties.new_brick_label" to "abc123"
@@ -53,6 +62,7 @@ Scenario: Add Brick - vanilla Brick with no IFC
Scenario: Add Brick - from geometry without a Brick IFC library
Given an empty IFC project
And the Brickschema is stubbed
And I press "bim.new_brick_file"
And I add a cube
And the object "Cube" is selected
@@ -66,6 +76,7 @@ Scenario: Add Brick - from geometry without a Brick IFC library
Scenario: Add Brick - from geometry with a Brick IFC library
Given an empty IFC project
And the Brickschema is stubbed
And I add a cube
And the object "Cube" is selected
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
@@ -79,12 +90,14 @@ Scenario: Add Brick - from geometry with a Brick IFC library
Scenario: Refresh Brick viewer
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.new_brick_file"
When I press "bim.refresh_brick_viewer"
Then nothing happens
Scenario: Add Brick relation - vanilla Brick with no IFC
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I press "bim.view_brick_class(brick_class='Lighting_Zone')"
@@ -96,16 +109,17 @@ Scenario: Add Brick relation - vanilla Brick with no IFC
Scenario: Add Brick relation - vanilla Brick with no IFC and with split screen
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I set "scene.BIMBrickProperties.brick_entity_create_type" to "Location"
And I set "scene.BIMBrickProperties.new_brick_label" to "abc123"
And I set "scene.BIMBrickProperties.brick_entity_class" to "https://brickschema.org/schema/Brick#Room"
And I set "scene.BIMBrickProperties.brick_entity_class" to "https://brickschema.org/schema/Brick#Building"
And I press "bim.add_brick"
And I press "bim.view_brick_class(brick_class='Lighting_Zone')"
And I set "scene.BIMBrickProperties.active_brick_index" to "0"
And I set "scene.BIMBrickProperties.split_screen_toggled" to "True"
And I press "bim.view_brick_class(brick_class='Room', split_screen=True)"
And I press "bim.view_brick_class(brick_class='Building', split_screen=True)"
And I set "scene.BIMBrickProperties.split_screen_active_brick_index" to "0"
And I set "scene.BIMBrickProperties.brick_create_relations_toggled" to "True"
When I press "bim.add_brick_relation"
@@ -113,6 +127,7 @@ Scenario: Add Brick relation - vanilla Brick with no IFC and with split screen
Scenario: Remove Brick - vanilla Brick
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I press "bim.view_brick_class(brick_class='Lighting_Zone')"
And I set "scene.BIMBrickProperties.active_brick_index" to "0"
@@ -121,6 +136,7 @@ Scenario: Remove Brick - vanilla Brick
Scenario: Remove Brick - with a Brick IFC library reference
Given an empty IFC project
And the Brickschema is stubbed
And I add a cube
And the object "Cube" is selected
And I set "scene.BIMRootProperties.ifc_class" to "IfcChiller"
@@ -129,13 +145,14 @@ Scenario: Remove Brick - with a Brick IFC library reference
And the object "IfcChiller/Cube" is selected
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I press "bim.add_brick"
And I press "bim.view_brick_class(brick_class='Chiller')"
And I press "bim.view_brick_class(brick_class='Equipment')"
And I set "scene.BIMBrickProperties.active_brick_index" to "0"
When I press "bim.remove_brick"
Then nothing happens
Scenario: Change viewer list root
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I set "scene.BIMBrickProperties.set_list_root_toggled" to "True"
When I set "scene.BIMBrickProperties.brick_list_root" to "Location"
@@ -143,6 +160,7 @@ Scenario: Change viewer list root
Scenario: Change viewer list root - split screen
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I set "scene.BIMBrickProperties.set_list_root_toggled" to "True"
And I set "scene.BIMBrickProperties.split_screen_toggled" to "True"
@@ -151,17 +169,20 @@ Scenario: Change viewer list root - split screen
Scenario: Toggle split screen
Given an empty Blender session
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
When I set "scene.BIMBrickProperties.split_screen_toggled" to "True"
Then nothing happens
Scenario: Set active namespace
Given an empty Blender session
And the Brickschema is stubbed
When I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
Then nothing happens
Scenario: Bind new namespace
Given an empty Blender session
And the Brickschema is stubbed
And I set "scene.BIMBrickProperties.new_brick_namespace_alias" to "digitaltwin2"
And I set "scene.BIMBrickProperties.new_brick_namespace_uri" to "https://example.org/digitaltwin2#"
When I press "bim.add_brick_namespace"
@@ -169,12 +190,14 @@ Scenario: Bind new namespace
Scenario: Convert brick project
Given an empty IFC project
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
When I press "bim.convert_brick_project"
Then nothing happens
Scenario: Convert IFC to brick
Given an empty IFC project
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I press "bim.convert_brick_project"
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
@@ -188,6 +211,7 @@ Scenario: Convert IFC to brick
Scenario: Assign brick reference
Given an empty IFC project
And the Brickschema is stubbed
And I press "bim.load_brick_project(filepath='{cwd}/test/files/spaces.ttl')"
And I set "scene.BIMBrickProperties.namespace" to "https://example.org/digitaltwin#"
And I set "scene.BIMBrickProperties.brick_entity_class" to "https://brickschema.org/schema/Brick#Chiller"
@@ -201,4 +225,4 @@ Scenario: Assign brick reference
And the object "IfcChiller/Cube" is selected
And I press "bim.convert_brick_project"
When I press "bim.assign_brick_reference"
Then nothing happens
Then nothing happens
@@ -47,6 +47,7 @@ Scenario: Add representation - add a representation with a scale factor applied
And I add a cube
And the object "Cube" is selected
When the object "Cube" is scaled to "2"
And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcWall"
And I press "bim.assign_class"
Then the object "IfcWall/Cube" has no scale
@@ -58,6 +59,7 @@ Scenario: Add representation - add a representation with a scale factor removed
And I press "object.duplicate_move_linked"
And the object "Cube" is selected
When the object "Cube" is scaled to "2"
And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcWall"
And I press "bim.assign_class"
Then the object "IfcWall/Cube" has no scale
@@ -179,6 +181,7 @@ Scenario: Update representation - updating a tessellation
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcWall"
And I press "bim.assign_class"
And I press "bim.update_representation(obj='IfcWall/Cube')"
@@ -188,6 +191,7 @@ Scenario: Update representation - updating a layered extrusion
Given an empty IFC project
And I add a cube
And the object "Cube" is selected
And I set "scene.BIMRootProperties.ifc_product" to "IfcElement"
And I set "scene.BIMRootProperties.ifc_class" to "IfcWall"
And I press "bim.assign_class"
And I add an empty
@@ -318,7 +322,7 @@ Scenario: Override duplicate move - copying a coloured representation
When I duplicate the selected objects
And I press "export_ifc.bim(filepath='{cwd}/test/files/temp/export.ifc')"
And an empty Blender session is started
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')"
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc', should_start_fresh_session=False)"
Then the material "Material" colour is "1,0,0,1"
And the object "IfcWall/Cube" has the material "Material"
And the object "IfcWall/Cube.001" has the material "Material"
@@ -456,7 +456,7 @@ Scenario: Export IFC - with changed style colour synchronised
When the material "Material" colour is set to "1,0,0,1"
And I press "export_ifc.bim(filepath='{cwd}/test/files/temp/export.ifc')"
And an empty Blender session is started
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')"
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc', should_start_fresh_session=False)"
Then the material "Material" colour is "1,0,0,1"
Scenario: Export IFC - with changed style element synchronised
@@ -471,5 +471,5 @@ Scenario: Export IFC - with changed style element synchronised
And the material "Material.001" colour is set to "1,0,0,1"
And I press "export_ifc.bim(filepath='{cwd}/test/files/temp/export.ifc')"
And an empty Blender session is started
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc')"
And I press "bim.load_project(filepath='{cwd}/test/files/temp/export.ifc', should_start_fresh_session=False)"
Then the material "Material.001" colour is "1,0,0,1"
+10
View File
@@ -24,6 +24,7 @@ import ifcopenshell
import blenderbim.tool as tool
import blenderbim.bim
from blenderbim.bim.ifc import IfcStore
from blenderbim.tool.brick import BrickStore
from blenderbim.bim.module.model.data import AuthoringData
from pytest_bdd import scenarios, given, when, then, parsers
from mathutils import Vector
@@ -71,6 +72,8 @@ def an_empty_blender_session():
if len(bpy.data.objects) > 0:
bpy.data.batch_remove(bpy.data.objects)
bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True)
if len(bpy.data.materials) > 0:
bpy.data.batch_remove(bpy.data.materials)
# default project settings
bpy.context.scene.unit_settings.system = "METRIC"
@@ -92,6 +95,13 @@ def an_empty_ifc_2x3_project():
bpy.ops.bim.create_project()
@given("the Brickschema is stubbed")
def the_brickschema_is_stubbed():
# This makes things run faster since we don't need to load the entire brick schema
cwd = os.path.dirname(os.path.realpath(__file__))
BrickStore.schema = os.path.join(cwd, "..", "files", "BrickStub.ttl")
@when("I load a new pset template file")
def i_load_a_new_pset_template_file():
IfcStore.pset_template_path = bpy.context.scene.BIMPsetTemplateProperties.pset_template_files