@@ -369,6 +369,65 @@ def test_getting_an_element_type_null_predefined_type(self):
369369 assert subject .get_predefined_type (element_type ) == "NOTDEFINED"
370370
371371
372+ class TestIsUserdefinedTypeIFC4 (test .bootstrap .IFC4 ):
373+ def test_getting_a_predefined_element (self ):
374+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
375+ element .PredefinedType = "PARTITIONING"
376+ assert not subject .is_userdefined_type (element )
377+
378+ def test_getting_an_element_userdefined_type (self ):
379+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
380+ element .PredefinedType = "USERDEFINED"
381+ element .ObjectType = "FOOBAR"
382+ assert subject .is_userdefined_type (element )
383+
384+ def test_getting_an_element_type_without_a_predefined_type_attribute (self ):
385+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcAnnotation" )
386+ element .ObjectType = "FOOBAR"
387+ assert subject .is_userdefined_type (element )
388+
389+ def test_getting_an_inherited_predefined_type (self ):
390+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
391+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWallType" )
392+ ifcopenshell .api .type .assign_type (self .file , related_objects = [element ], relating_type = element_type )
393+ element_type .PredefinedType = "PARTITIONING"
394+ assert not subject .is_userdefined_type (element )
395+
396+ def test_getting_an_inherited_userdefined_type_for_an_element_type (self ):
397+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
398+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWallType" )
399+ ifcopenshell .api .type .assign_type (self .file , related_objects = [element ], relating_type = element_type )
400+ element_type .PredefinedType = "USERDEFINED"
401+ element_type .ElementType = "FOOBAR"
402+ assert subject .is_userdefined_type (element )
403+
404+ def test_getting_an_overriden_predefined_type (self ):
405+ element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
406+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWallType" )
407+ ifcopenshell .api .type .assign_type (self .file , related_objects = [element ], relating_type = element_type )
408+ element_type .PredefinedType = "NOTDEFINED"
409+ element .PredefinedType = "PARTITIONING"
410+ assert not subject .is_userdefined_type (element )
411+
412+ def test_getting_an_inherited_userdefined_type_for_a_process_type (self ):
413+ element = ifcopenshell .api .sequence .add_task (self .file )
414+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcTaskType" )
415+ ifcopenshell .api .type .assign_type (self .file , related_objects = [element ], relating_type = element_type )
416+ element_type .PredefinedType = "USERDEFINED"
417+ element_type .ProcessType = "FOOBAR"
418+ assert subject .is_userdefined_type (element )
419+
420+ def test_getting_an_element_type_predefined_type (self ):
421+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWallType" )
422+ element_type .PredefinedType = "PARTITIONING"
423+ assert not subject .is_userdefined_type (element_type )
424+
425+ def test_getting_an_element_type_null_predefined_type (self ):
426+ element_type = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWallType" )
427+ element_type .PredefinedType = "NOTDEFINED"
428+ assert not subject .is_userdefined_type (element_type )
429+
430+
372431class TestGetTypeIFC4 (test .bootstrap .IFC4 ):
373432 def test_getting_the_type_of_a_product (self ):
374433 element = ifcopenshell .api .root .create_entity (self .file , ifc_class = "IfcWall" )
0 commit comments