mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 06:21:40 +00:00
Bimtester: Fixed attributes_psets step files (#1580)
Co-authored-by: Nitsch Alexander <alexander.nitsch@scs.ch>
This commit is contained in:
@@ -21,3 +21,6 @@ from bimtester.features.steps.project_setup import de, en, fr, it, nl
|
|||||||
|
|
||||||
use_step_matcher("parse")
|
use_step_matcher("parse")
|
||||||
from bimtester.features.steps.aggregation import en
|
from bimtester.features.steps.aggregation import en
|
||||||
|
|
||||||
|
use_step_matcher("parse")
|
||||||
|
from bimtester.features.steps.attributes_psets import en, de
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
from behave import step, use_step_matcher
|
||||||
|
|
||||||
|
use_step_matcher("parse")
|
||||||
|
|
||||||
|
|
||||||
|
@step("An alle {ifc_class} Bauteile ist im PSet {pset} das Attribut {aproperty} angehängt")
|
||||||
|
def step_impl(context, ifc_class, aproperty, pset):
|
||||||
|
context.execute_steps(f"all {ifc_class} elements have an {aproperty} property in the {pset} pset")
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
from behave import step, use_step_matcher
|
||||||
|
|
||||||
|
from bimtester.ifc import IfcStore
|
||||||
|
from bimtester.util import assert_elements
|
||||||
|
from bimtester.lang import _
|
||||||
|
|
||||||
|
|
||||||
|
@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,
|
||||||
|
ifc_class,
|
||||||
|
aproperty,
|
||||||
|
pset
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
# STEPS with Regular Expression Matcher ("re")
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
use_step_matcher("re")
|
||||||
|
|
||||||
|
|
||||||
|
@step(r"all (?P<ifc_class>.*) elements have an? (?P<property_path>.*\..*) 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
|
||||||
|
|
||||||
|
|
||||||
|
@step(
|
||||||
|
r'all (?P<ifc_class>.*) elements have an? (?P<property_path>.*\..*) property value matching the pattern "(?P<pattern>.*)"'
|
||||||
|
)
|
||||||
|
def step_impl(context, ifc_class, property_path, pattern):
|
||||||
|
import re
|
||||||
|
|
||||||
|
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:
|
||||||
|
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(
|
||||||
|
context, ifc_class, aproperty, pset
|
||||||
|
):
|
||||||
|
context.falseelems = []
|
||||||
|
context.falseguids = []
|
||||||
|
context.falseprops = {}
|
||||||
|
from ifcopenshell.util.element import get_psets
|
||||||
|
|
||||||
|
elements = IfcStore.file.by_type(ifc_class)
|
||||||
|
for elem in elements:
|
||||||
|
psets = get_psets(elem)
|
||||||
|
if not (pset in psets and aproperty in psets[pset]):
|
||||||
|
context.falseelems.append(str(elem))
|
||||||
|
context.falseguids.append(elem.GlobalId)
|
||||||
|
context.falseprops[elem.id()] = str(psets)
|
||||||
|
|
||||||
|
context.elemcount = len(elements)
|
||||||
|
context.falsecount = len(context.falseelems)
|
||||||
|
assert_elements(
|
||||||
|
ifc_class,
|
||||||
|
context.elemcount,
|
||||||
|
context.falsecount,
|
||||||
|
context.falseelems,
|
||||||
|
# TODO: Translate these messages into other languages
|
||||||
|
message_all_falseelems=_("All {elemcount} {ifc_class} elements are missing the property {parameter} in the pset."),
|
||||||
|
message_some_falseelems=_("The following {falsecount} of {elemcount} {ifc_class} elements are missing the property {parameter} in the pset: {falseelems}"),
|
||||||
|
message_no_elems=_("There are no {ifc_class} elements in the IFC file."),
|
||||||
|
parameter=aproperty
|
||||||
|
)
|
||||||
|
# the pset name is missing in the failing message, but it is in the step test name
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
from behave import step
|
|
||||||
|
|
||||||
import attributes_psets_methods as apm
|
|
||||||
from utils import assert_elements
|
|
||||||
from utils import IfcFile
|
|
||||||
from utils import switch_locale
|
|
||||||
|
|
||||||
|
|
||||||
the_lang = "en"
|
|
||||||
|
|
||||||
|
|
||||||
@step("all {ifc_class} elements have an {aproperty} property in the {pset} pset")
|
|
||||||
def step_impl(context, ifc_class, aproperty, pset):
|
|
||||||
switch_locale(context.localedir, the_lang)
|
|
||||||
apm.eleclass_has_property_in_pset(
|
|
||||||
context,
|
|
||||||
ifc_class,
|
|
||||||
aproperty,
|
|
||||||
pset
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
|
||||||
# STEPS with Regular Expression Matcher ("re")
|
|
||||||
# ------------------------------------------------------------------------
|
|
||||||
use_step_matcher("re")
|
|
||||||
|
|
||||||
|
|
||||||
@step("all (?P<ifc_class>.*) elements have an? (?P<property_path>.*\..*) property")
|
|
||||||
def step_impl(context, ifc_class, property_path):
|
|
||||||
pset_name, property_name = property_path.split(".")
|
|
||||||
elements = IfcFile.get().by_type(ifc_class)
|
|
||||||
for element in elements:
|
|
||||||
if not IfcFile.get_property(element, pset_name, property_name):
|
|
||||||
assert False
|
|
||||||
|
|
||||||
|
|
||||||
@step(
|
|
||||||
'all (?P<ifc_class>.*) elements have an? (?P<property_path>.*\..*) property value matching the pattern "(?P<pattern>.*)"'
|
|
||||||
)
|
|
||||||
def step_impl(context, ifc_class, property_path, pattern):
|
|
||||||
import re
|
|
||||||
|
|
||||||
pset_name, property_name = property_path.split(".")
|
|
||||||
elements = IfcFile.get().by_type(ifc_class)
|
|
||||||
for element in elements:
|
|
||||||
prop = IfcFile.get_property(element, pset_name, property_name)
|
|
||||||
if not 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
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
from behave import step
|
|
||||||
|
|
||||||
import attributes_psets_methods as apm
|
|
||||||
from utils import switch_locale
|
|
||||||
|
|
||||||
|
|
||||||
the_lang = "de"
|
|
||||||
|
|
||||||
|
|
||||||
@step("An alle {ifc_class} Bauteile ist im PSet {pset} das Attribut {aproperty} angehängt")
|
|
||||||
def step_impl(context, ifc_class, aproperty, pset):
|
|
||||||
switch_locale(context.localedir, the_lang)
|
|
||||||
apm.eleclass_has_property_in_pset(
|
|
||||||
context,
|
|
||||||
ifc_class,
|
|
||||||
aproperty,
|
|
||||||
pset
|
|
||||||
)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
from behave import step
|
|
||||||
|
|
||||||
import attributes_psets_methods as apm
|
|
||||||
from utils import switch_locale
|
|
||||||
|
|
||||||
|
|
||||||
the_lang = "fr"
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
# TODO the next line needs translation
|
|
||||||
@step("All {ifc_class} elements have an {aproperty} property in the {pset} pset")
|
|
||||||
def step_impl(context, ifc_class, aproperty, pset):
|
|
||||||
switch_locale(context.localedir, the_lang)
|
|
||||||
apm.eleclass_has_property_in_pset(
|
|
||||||
context,
|
|
||||||
ifc_class,
|
|
||||||
aproperty,
|
|
||||||
pset
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
import gettext # noqa
|
|
||||||
|
|
||||||
from utils import assert_elements
|
|
||||||
from utils import IfcFile
|
|
||||||
|
|
||||||
|
|
||||||
def eleclass_has_property_in_pset(
|
|
||||||
context, ifc_class, aproperty, pset
|
|
||||||
):
|
|
||||||
|
|
||||||
context.falseelems = []
|
|
||||||
context.falseguids = []
|
|
||||||
context.falseprops = {}
|
|
||||||
from ifcopenshell.util.element import get_psets
|
|
||||||
|
|
||||||
elements = IfcFile.get().by_type(ifc_class)
|
|
||||||
for elem in elements:
|
|
||||||
psets = get_psets(elem)
|
|
||||||
if not (pset in psets and aproperty in psets[pset]):
|
|
||||||
context.falseelems.append(str(elem))
|
|
||||||
context.falseguids.append(elem.GlobalId)
|
|
||||||
context.falseprops[elem.id()] = str(psets)
|
|
||||||
|
|
||||||
context.elemcount = len(elements)
|
|
||||||
context.falsecount = len(context.falseelems)
|
|
||||||
assert_elements(
|
|
||||||
ifc_class,
|
|
||||||
context.elemcount,
|
|
||||||
context.falsecount,
|
|
||||||
context.falseelems,
|
|
||||||
message_all_falseelems=_("All {elemcount} {ifc_class} elements are missing the property {parameter} in the pset."),
|
|
||||||
message_some_falseelems=_("The following {falsecount} of {elemcount} {ifc_class} elements are missing the property {parameter} in the pset: {falseelems}"),
|
|
||||||
message_no_elems=_("There are no {ifc_class} elements in the IFC file."),
|
|
||||||
parameter=aproperty
|
|
||||||
)
|
|
||||||
# the pset name is missing in the failing message, but it is in the step test name
|
|
||||||
Reference in New Issue
Block a user