unify tests for ifc4 and ifc2x3

This commit is contained in:
Andrej730
2024-04-10 16:26:48 +05:00
parent 7af1632c1a
commit fa2009418c
6 changed files with 52 additions and 134 deletions
@@ -32,19 +32,9 @@ class TestAddReference(test.bootstrap.IFC4):
element = ifcopenshell.api.run("document.add_reference", self.file, information=information)
assert element.is_a("IfcDocumentReference")
assert len(self.file.by_type("IfcDocumentReference")) == 1
assert element.ReferencedDocument == information
ifc2x3 = self.file.schema == "IFC2X3"
assert (element.ReferenceToDocument[0] if ifc2x3 else element.ReferencedDocument) == information
class TestAddReferenceIFC2X3(test.bootstrap.IFC2X3):
def test_adding_a_reference(self):
element = ifcopenshell.api.run("document.add_reference", self.file, information=None)
assert element.is_a("IfcDocumentReference")
assert len(self.file.by_type("IfcDocumentReference")) == 1
def test_adding_a_reference_to_an_information(self):
self.file.createIfcProject()
information = ifcopenshell.api.run("document.add_information", self.file, parent=None)
element = ifcopenshell.api.run("document.add_reference", self.file, information=information)
assert element.is_a("IfcDocumentReference")
assert len(self.file.by_type("IfcDocumentReference")) == 1
assert element.ReferenceToDocument[0] == information
class TestAddReferenceIFC2X3(test.bootstrap.IFC2X3, TestAddReference):
pass
@@ -25,12 +25,12 @@ class TestAddReference(test.bootstrap.IFC4):
library = ifcopenshell.api.run("library.add_library", self.file, name="Name")
reference = ifcopenshell.api.run("library.add_reference", self.file, library=library)
assert reference.is_a("IfcLibraryReference")
assert reference.ReferencedLibrary == library
ifc2x3 = self.file.schema == "IFC2X3"
if ifc2x3:
assert library.LibraryReference == (reference,)
else:
assert reference.ReferencedLibrary == library
class TestAddReferenceIFC2X3(test.bootstrap.IFC2X3):
def test_adding_a_reference(self):
library = ifcopenshell.api.run("library.add_library", self.file, name="Name")
reference = ifcopenshell.api.run("library.add_reference", self.file, library=library)
assert reference.is_a("IfcLibraryReference")
assert library.LibraryReference == (reference,)
class TestAddReferenceIFC2X3(test.bootstrap.IFC2X3, TestAddReference):
pass
@@ -24,54 +24,15 @@ import ifcopenshell.util.system
class TestAssignPort(test.bootstrap.IFC4):
def test_assigning_a_port_once_only(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcChiller")
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
assert element.IsNestedBy[0].RelatedObjects == (port,)
assert ifcopenshell.util.system.get_ports(element) == [port]
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
assert ifcopenshell.util.system.get_ports(element) == [port]
def test_updating_the_placement_to_be_relative_if_it_exists(self):
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
ifcopenshell.api.run("unit.assign_unit", self.file)
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcChiller")
subelement = ifcopenshell.api.run("system.add_port", self.file)
matrix = numpy.array(
(
(1.0, 0.0, 0.0, 1.0),
(0.0, 1.0, 0.0, 1.0),
(0.0, 0.0, 1.0, 1.0),
(0.0, 0.0, 0.0, 1.0),
)
)
submatrix = numpy.array(
(
(1.0, 0.0, 0.0, 1.0),
(0.0, 1.0, 0.0, 2.0),
(0.0, 0.0, 1.0, 3.0),
(0.0, 0.0, 0.0, 1.0),
)
)
ifcopenshell.api.run(
"geometry.edit_object_placement", self.file, product=element, matrix=matrix.copy(), is_si=False
)
ifcopenshell.api.run(
"geometry.edit_object_placement", self.file, product=subelement, matrix=submatrix.copy(), is_si=False
)
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=subelement)
assert numpy.array_equal(ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement), matrix)
assert numpy.array_equal(ifcopenshell.util.placement.get_local_placement(subelement.ObjectPlacement), submatrix)
assert subelement.ObjectPlacement.PlacementRelTo == element.ObjectPlacement
class TestAssignPortIFC2X3(test.bootstrap.IFC2X3):
def test_assigning_a_port_once_only(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcFlowSegment")
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
assert element.HasPorts[0].RelatingPort == port
ifc2x3 = self.file.schema == "IFC2X3"
if ifc2x3:
assert element.HasPorts[0].RelatingPort == port
else:
assert element.IsNestedBy[0].RelatedObjects == (port,)
assert ifcopenshell.util.system.get_ports(element) == [port]
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
assert ifcopenshell.util.system.get_ports(element) == [port]
@@ -107,3 +68,7 @@ class TestAssignPortIFC2X3(test.bootstrap.IFC2X3):
assert numpy.array_equal(ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement), matrix)
assert numpy.array_equal(ifcopenshell.util.placement.get_local_placement(subelement.ObjectPlacement), submatrix)
assert subelement.ObjectPlacement.PlacementRelTo == element.ObjectPlacement
class TestAssignPortIFC2X3(test.bootstrap.IFC2X3, TestAssignPort):
pass
@@ -22,18 +22,13 @@ import ifcopenshell.util.system
class TestAssignPort(test.bootstrap.IFC4):
def test_assigning_a_port_once_only(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcChiller")
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
ifcopenshell.api.run("system.unassign_port", self.file, element=element, port=port)
assert ifcopenshell.util.system.get_ports(element) == []
class TestAssignPortIFC2X3(test.bootstrap.IFC2X3):
def test_assigning_a_port_once_only(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcFlowSegment")
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
ifcopenshell.api.run("system.unassign_port", self.file, element=element, port=port)
assert ifcopenshell.util.system.get_ports(element) == []
class TestAssignPortIFC2X3(test.bootstrap.IFC2X3, TestAssignPort):
pass
@@ -301,13 +301,8 @@ class TestGetTypeIFC4(test.bootstrap.IFC4):
assert subject.get_type(element_type) == element_type
class TestGetTypeIFC2X3(test.bootstrap.IFC2X3):
def test_getting_the_type_of_a_product(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
element_type = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
ifcopenshell.api.run("type.assign_type", self.file, related_object=element, relating_type=element_type)
assert subject.get_type(element) == element_type
assert subject.get_type(element_type) == element_type
class TestGetTypeIFC2X3(test.bootstrap.IFC2X3, TestGetTypeIFC4):
pass
class TestGetTypes(test.bootstrap.IFC4):
@@ -318,12 +313,8 @@ class TestGetTypes(test.bootstrap.IFC4):
assert subject.get_types(element_type) == (element,)
class TestGetTypesIFC2X3(test.bootstrap.IFC2X3):
def test_getting_the_type_of_a_product(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
element_type = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
ifcopenshell.api.run("type.assign_type", self.file, related_object=element, relating_type=element_type)
assert subject.get_types(element_type) == (element,)
class TestGetTypesIFC2X3(test.bootstrap.IFC2X3, TestGetTypes):
pass
class TestGetShapeAspects(test.bootstrap.IFC4):
@@ -645,42 +636,6 @@ class TestGetElementsByLayer(test.bootstrap.IFC4):
assert list(subject.get_elements_by_layer(self.file, layer)) == [element]
class TestGetlayers(test.bootstrap.IFC4):
def test_getting_the_layer_of_a_product_representation(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
representation = self.file.createIfcShapeRepresentation()
element.Representation = self.file.createIfcProductDefinitionShape(Representations=[representation])
ifcopenshell.api.run("layer.assign_layer", self.file, items=[representation], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
def test_getting_the_layer_of_a_product_item(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
item = self.file.createIfcExtrudedAreaSolid()
representation = self.file.createIfcShapeRepresentation(Items=[item])
element.Representation = self.file.createIfcProductDefinitionShape(Representations=[representation])
ifcopenshell.api.run("layer.assign_layer", self.file, items=[item], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
def test_getting_the_layer_of_a_type_product_representation(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
representation = self.file.createIfcShapeRepresentation()
element.RepresentationMaps = [self.file.createIfcRepresentationMap(MappedRepresentation=representation)]
ifcopenshell.api.run("layer.assign_layer", self.file, items=[representation], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
def test_getting_the_layer_of_a_type_product_item(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
item = self.file.createIfcExtrudedAreaSolid()
representation = self.file.createIfcShapeRepresentation(Items=[item])
element.RepresentationMaps = [self.file.createIfcRepresentationMap(MappedRepresentation=representation)]
ifcopenshell.api.run("layer.assign_layer", self.file, items=[item], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
class TestGetlayersIFC2X3(test.bootstrap.IFC2X3):
def test_getting_the_layer_of_a_product_item(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
@@ -701,6 +656,24 @@ class TestGetlayersIFC2X3(test.bootstrap.IFC2X3):
assert subject.get_layers(self.file, element) == [layer]
class TestGetlayers(test.bootstrap.IFC4, TestGetlayersIFC2X3):
def test_getting_the_layer_of_a_product_representation(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
representation = self.file.createIfcShapeRepresentation()
element.Representation = self.file.createIfcProductDefinitionShape(Representations=[representation])
ifcopenshell.api.run("layer.assign_layer", self.file, items=[representation], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
def test_getting_the_layer_of_a_type_product_representation(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType")
layer = ifcopenshell.api.run("layer.add_layer", self.file)
representation = self.file.createIfcShapeRepresentation()
element.RepresentationMaps = [self.file.createIfcRepresentationMap(MappedRepresentation=representation)]
ifcopenshell.api.run("layer.assign_layer", self.file, items=[representation], layer=layer)
assert subject.get_layers(self.file, element) == [layer]
class TestGetContainerIFC4(test.bootstrap.IFC4):
def test_getting_the_spatial_container_of_an_element(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
@@ -57,14 +57,6 @@ class TestGetElementSystems(test.bootstrap.IFC4):
class TestGetPorts(test.bootstrap.IFC4):
def test_run(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcChiller")
ifcopenshell.api.run("system.assign_port", self.file, element=element, port=port)
assert subject.get_ports(element) == [port]
class TestGetPortsIFC2X3(test.bootstrap.IFC2X3):
def test_run(self):
port = self.file.createIfcDistributionPort()
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcFlowSegment")
@@ -72,6 +64,10 @@ class TestGetPortsIFC2X3(test.bootstrap.IFC2X3):
assert subject.get_ports(element) == [port]
class TestGetPortsIFC2X3(test.bootstrap.IFC2X3, TestGetPorts):
pass
class TestGetConnectedPort(test.bootstrap.IFC4):
def test_run(self):
port1 = ifcopenshell.api.run("system.add_port", self.file)
@@ -104,6 +100,5 @@ class TestGetConnectedToFrom(test.bootstrap.IFC4):
assert subject.get_connected_from(element2) == []
class TestGetConnectedToFromIFC2X3(test.bootstrap.IFC2X3):
def test_run(self):
TestGetConnectedToFrom.test_run(self)
class TestGetConnectedToFromIFC2X3(test.bootstrap.IFC2X3, TestGetConnectedToFrom):
pass