diff --git a/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py b/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py index c8cdf7aa02..3a3f5fb522 100644 --- a/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py +++ b/src/ifcbimtester/bimtester/features/steps/attributes_psets/en.py @@ -5,7 +5,7 @@ from bimtester.util import assert_elements from bimtester.lang import _ -@step("all {ifc_class} elements have an {aproperty} property in the {pset} pset") +@step("All {ifc_class} elements have an {aproperty} property in the {pset} pset") def step_impl(context, ifc_class, aproperty, pset): eleclass_has_property_in_pset( context, @@ -21,31 +21,42 @@ def step_impl(context, ifc_class, aproperty, pset): use_step_matcher("re") -@step(r"all (?P.*) elements have an? (?P.*\..*) property") +@step(r"All (?P.*) elements have an? (?P.*\..*) property") def step_impl(context, ifc_class, property_path): - pset_name, property_name = property_path.split(".") - elements = IfcStore.file.by_type(ifc_class) - for element in elements: - if not IfcStore.file.get_property(element, pset_name, property_name): - assert False + import re + pset, aproperty = property_path.split(".") + eleclass_has_property_in_pset( + context, + ifc_class, + aproperty, + pset + ) -@step( - r'all (?P.*) elements have an? (?P.*\..*) property value matching the pattern "(?P.*)"' +@step(r'All (?P.*) elements have an? (?P.*\..*) property value matching the pattern "(?P.*)"' ) def step_impl(context, ifc_class, property_path, pattern): import re + from ifcopenshell.util.element import get_psets pset_name, property_name = property_path.split(".") elements = IfcStore.file.by_type(ifc_class) for element in elements: - prop = IfcStore.file.get_property(element, pset_name, property_name) - if not prop: + + psets = get_psets(element) + + if not pset_name in psets: + assert False + + pset = psets[pset_name] + if not property_name in pset: + assert False + + prop = pset[property_name] + # get_psets returns just strings + + if not re.search(pattern, prop): assert False - # For now, we only check single values - if prop.is_a("IfcPropertySingleValue"): - if not (prop.NominalValue and re.search(pattern, prop.NominalValue.wrappedValue)): - assert False def eleclass_has_property_in_pset( diff --git a/src/ifcbimtester/bimtester/reports.py b/src/ifcbimtester/bimtester/reports.py index 5a6683df0d..c76cb9b26c 100644 --- a/src/ifcbimtester/bimtester/reports.py +++ b/src/ifcbimtester/bimtester/reports.py @@ -2,6 +2,7 @@ import datetime import json import os import pystache +import sys from bimtester.lang import _