diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index ce2b7acc47..da71c87c96 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -262,8 +262,6 @@ class Specification: for facet in self.requirements: result = facet(element) is_pass = bool(result) - if facet.cardinality == "prohibited": - is_pass = not is_pass if self.maxOccurs != 0: # This is a required or optional specification if not is_pass: self.failed_entities.add(element) diff --git a/src/ifctester/test/test_ids.py b/src/ifctester/test/test_ids.py index 0d68c2af7d..9059519b3e 100644 --- a/src/ifctester/test/test_ids.py +++ b/src/ifctester/test/test_ids.py @@ -352,3 +352,22 @@ class TestSpecification: None, None, ) + + def test_prohibited_facet(self): + specs = ids.Ids(title="Title") + spec = ids.Specification(name="Name") + spec.applicability.append(ids.Entity(name="IFCWALL")) + spec.requirements.append(ids.Attribute(name="Name", value="Waldo", cardinality="prohibited")) + specs.specifications.append(spec) + + spec.set_usage("required") + model = ifcopenshell.file() + wall = model.createIfcWall(Name="Wally") + run( + "Prohibited facet not to fail if no entity passes it", + specs, + model, + True, + [wall], + [], + )