mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 02:07:36 +00:00
bimtester: steps, add element class attributes test
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
from behave import step
|
from behave import step
|
||||||
|
|
||||||
|
from attributes_eleclasses_methods import all_element_attribs_have_a_value
|
||||||
from attributes_eleclasses_methods import no_element_class_ele
|
from attributes_eleclasses_methods import no_element_class_ele
|
||||||
from utils import IfcFile
|
from utils import IfcFile
|
||||||
|
|
||||||
@@ -10,6 +11,12 @@ def step_impl(context, ifc_class, reason):
|
|||||||
no_element_class_ele(context, ifc_class, reason)
|
no_element_class_ele(context, ifc_class, reason)
|
||||||
|
|
||||||
|
|
||||||
|
@step('all {ifc_class} elements class attributes have a value')
|
||||||
|
def step_impl(context, ifc_class):
|
||||||
|
switch_locale(context.localedir, "en")
|
||||||
|
all_element_attribs_have_a_value(context, ifc_class)
|
||||||
|
|
||||||
|
|
||||||
@step('all {ifc_class} elements have a name matching the pattern "{pattern}"')
|
@step('all {ifc_class} elements have a name matching the pattern "{pattern}"')
|
||||||
def step_impl(context, ifc_class, pattern):
|
def step_impl(context, ifc_class, pattern):
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import gettext # noqa
|
import gettext # noqa
|
||||||
|
|
||||||
from utils import assert_elements
|
from utils import assert_elements
|
||||||
from utils import IfcFile
|
from utils import IfcFile
|
||||||
|
|
||||||
@@ -39,3 +40,46 @@ def no_element_class_ele(context, ifc_class, reason):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert False, _("Error in falsecount, something went wrong.")
|
assert False, _("Error in falsecount, something went wrong.")
|
||||||
|
|
||||||
|
|
||||||
|
def all_element_attribs_have_a_value(context, ifc_class):
|
||||||
|
|
||||||
|
from ifcopenshell.ifcopenshell_wrapper import schema_by_name
|
||||||
|
# schema = schema_by_name("IFC2X3")
|
||||||
|
schema = schema_by_name(IfcFile.get().schema)
|
||||||
|
class_attributes = []
|
||||||
|
for cl_attrib in schema.declaration_by_name(ifc_class).all_attributes():
|
||||||
|
class_attributes.append(cl_attrib.name())
|
||||||
|
# print(class_attributes)
|
||||||
|
|
||||||
|
context.falseelems = []
|
||||||
|
context.falseguids = []
|
||||||
|
context.falseprops = {}
|
||||||
|
|
||||||
|
elements = IfcFile.get().by_type(ifc_class)
|
||||||
|
for elem in elements:
|
||||||
|
failed_attribs = []
|
||||||
|
elem_failed = False
|
||||||
|
for cl_attrib in class_attributes:
|
||||||
|
attrib_value = getattr(elem, cl_attrib)
|
||||||
|
if not attrib_value:
|
||||||
|
elem_failed = True
|
||||||
|
failed_attribs.append(cl_attrib)
|
||||||
|
# print(attrib_value)
|
||||||
|
if elem_failed is True:
|
||||||
|
context.falseelems.append(str(elem))
|
||||||
|
context.falseguids.append(elem.GlobalId)
|
||||||
|
context.falseprops[elem.id()] = failed_attribs
|
||||||
|
|
||||||
|
context.elemcount = len(elements)
|
||||||
|
context.falsecount = len(context.falseelems)
|
||||||
|
assert_elements(
|
||||||
|
ifc_class,
|
||||||
|
context.elemcount,
|
||||||
|
context.falsecount,
|
||||||
|
context.falseelems,
|
||||||
|
message_all_falseelems=_("For all {elemcount} {ifc_class} elements at least one of these class attributes {parameter} has no value."),
|
||||||
|
message_some_falseelems=_("For the following {falsecount} out of {elemcount} {ifc_class} elements at least one of these class attributes {parameter} has no value: {falseelems}"),
|
||||||
|
message_no_elems=_("There are no {ifc_class} elements in the IFC file."),
|
||||||
|
parameter=failed_attribs
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user