Salome HOME
bug fix for bos#37741: EDF 28623 : import fails with accent characters
[modules/shaper.git] / src / ExchangePlugin / Test / TestImport.py
index 1f5b39dad6b8f95ae8e80197cfb438c90c0dd089..56d89bf8804436bfd12343102219ee2f1256bd65 100644 (file)
@@ -1,3 +1,22 @@
+# Copyright (C) 2014-2023  CEA, EDF
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
 """
       TestImport.py
       Unit test of ExchangePlugin_TestImport class
 #=========================================================================
 from ModelAPI import *
 from GeomAlgoAPI import *
+
+import os
 import math
+import shutil
+from tempfile import TemporaryDirectory
 
 __updated__ = "2015-05-22"
 
 aSession = ModelAPI_Session.get()
+
 #=========================================================================
 # Common test function
 #=========================================================================
-def testImport(theType, theFile, theVolume, theDelta):
+def getShapePath(path):
+    shapes_dir = os.path.join(os.getenv("DATA_DIR"), "Shapes")
+    return os.path.join(shapes_dir, path)
+
+def testImport(theType, theFile, theVolume, theArea, theDelta, theErrorExpected = False):
     # Create a part for import
     aSession.startOperation("Create part for import")
     aPartFeature = aSession.moduleDocument().addFeature("Part")
@@ -26,24 +54,44 @@ def testImport(theType, theFile, theVolume, theDelta):
     aFeatureKind = "Import"
     anImportFeature = aPart.addFeature(aFeatureKind)
     assert anImportFeature, "{0}: Can not create a feature {1}".format(theType, aFeatureKind)
+    if theType == "STP" or theType == "STEP":
+        aFieldName = "step_file_path"  
+        file = anImportFeature.string(aFieldName)
+        assert file, "{0}: Can not receive string field {1}".format(theType, aFieldName)
+        file.setValue(theFile)
+        aFieldName = "step_scale_inter_units"
+        units = anImportFeature.boolean(aFieldName)
+        assert units, "{0}: Can not receive string field {1}".format(theType, aFieldName)
+        units.setValue(True)
     aFieldName = "file_path"
     file = anImportFeature.string(aFieldName)
     assert file, "{0}: Can not receive string field {1}".format(theType, aFieldName)
     file.setValue(theFile)
+    aFieldName = "ImportType"
+    type = anImportFeature.string(aFieldName)
+    assert type, "{0}: Can not receive string field {1}".format(theType, aFieldName)
+    type.setValue(theType)
     aSession.finishOperation()
 
-    # Check results
-    assert anImportFeature.error() == '', "{0}: The error after execution: {1}".format(theType, anImportFeature.error())
-    assert len(anImportFeature.results()) == 1, "{0}: Wrong number of results: expected = 1, real = {1}".format(theType, len(anImportFeature.results()))
-    aResultBody = modelAPI_ResultBody(anImportFeature.firstResult())
-    assert aResultBody, "{0}: The result is not a body".format(theType)
-    aShape = aResultBody.shape()
-    assert aShape, "{0}: The body does not have a shape".format(theType)
-
-    # Check shape volume
-    aRefVolume = theVolume
-    aResVolume = GeomAlgoAPI_ShapeTools.volume(aShape)
-    assert (math.fabs(aResVolume - aRefVolume) < theDelta), "{0}: The volume is wrong: expected = {1}, real = {2}".format(theType, aRefVolume, aResVolume)
+    if theErrorExpected:
+        assert anImportFeature.error() != ''
+    else:
+        # Check results
+        assert anImportFeature.error() == '', "{0}: The error after execution: {1}".format(theType, anImportFeature.error())
+        assert len(anImportFeature.results()) == 1, "{0}: Wrong number of results: expected = 1, real = {1}".format(theType, len(anImportFeature.results()))
+        aResultBody = modelAPI_ResultBody(anImportFeature.firstResult())
+        assert aResultBody, "{0}: The result is not a body".format(theType)
+        aShape = aResultBody.shape()
+        assert aShape, "{0}: The body does not have a shape".format(theType)
+
+        # Check shape volume
+        aRefVolume = theVolume
+        aResVolume = GeomAlgoAPI_ShapeTools.volume(aShape)
+        assert (math.fabs(aResVolume - aRefVolume) < theDelta), "{0}: The volume is wrong: expected = {1}, real = {2}".format(theType, aRefVolume, aResVolume)
+        # Check shape area
+        aRefArea = theArea
+        aResArea = GeomAlgoAPI_ShapeTools.area(aShape)
+        assert (math.fabs(aResArea - aRefArea) < theDelta), "{0}: The area is wrong: expected = {1}, real = {2}".format(theType, aRefArea, aResArea)
 
 def testImportXAO():
     # Create a part for import
@@ -54,7 +102,10 @@ def testImportXAO():
 
     aSession.startOperation("Import XAO")
     anImportFeature = aPart.addFeature("Import")
-    anImportFeature.string("file_path").setValue("Data/test.xao")
+    anImportFeature.string("file_path").setValue(getShapePath("Xao/box1.xao"))
+    aFieldName = "ImportType"
+    type = anImportFeature.string(aFieldName)
+    type.setValue("XAO")
     aSession.finishOperation()
 
     # Check results
@@ -80,12 +131,11 @@ def testImportXAO():
     assert aFeature2.getKind() == "Group"
     assert aFeature2.name() == "Group_2"
 
-    aSelectionList = aFeature2.selectionList("group_list") 
+    aSelectionList = aFeature2.selectionList("group_list")
     assert aSelectionList.selectionType() == "face"
     assert aSelectionList.size() == 2
-    assert aSelectionList.value(0).namingName("") == "mygeom_1/Shape1"
-    print aSelectionList.value(1).namingName("")
-    assert aSelectionList.value(1).namingName("") == "mygeom_1/Shape2"
+    assert aSelectionList.value(0).namingName("") == "mygeom_1/Shape_1"
+    assert aSelectionList.value(1).namingName("") == "mygeom_1/Shape_2"
 
     aFeature3 = aCompositeFeature.subFeature(2, False)
     assert aFeature3.getKind() == "Field"
@@ -98,28 +148,48 @@ def testImportXAO():
     assert aFeature3.selectionList("selected").size() == 1
 
 if __name__ == '__main__':
-#=========================================================================
-# Create a shape imported from BREP
-#=========================================================================
-    testImport("BREP", "Data/solid.brep", 259982.297176, 10 ** -5)
-    testImport("BRP", "Data/solid.brp", 259982.297176, 10 ** -5)
-#=========================================================================
-# Create a shape imported from STEP
-#=========================================================================
-    testImport("STP", "Data/screw.stp", 3.78827401738e-06, 10 ** -17)
-    testImport("STEP", "Data/screw.step", 3.78827401738e-06, 10 ** -17)
-#=========================================================================
-# Create a shape imported from IGES
-#=========================================================================
-    testImport("IGES", "Data/bearing.iges", 6.86970803067e-14, 10 ** -25)
-    testImport("IGS", "Data/bearing.igs", 6.86970803067e-14, 10 ** -25)
-#=========================================================================
-# Create a shape imported from XAO
-#=========================================================================
-    testImportXAO()
-#=========================================================================
-# End of test
-#=========================================================================
+    with TemporaryDirectory() as tmp_dir:
+        #=========================================================================
+        # Create a shape imported from BREP
+        #=========================================================================
+        shape_path = getShapePath("Brep/solid.brep")
+        testImport("BREP", shape_path, 259982.297176, 39481.415022205365, 10 ** -5)
+        shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "solid.brp"))
+        testImport("BRP", shape_path, 259982.297176, 39481.415022205365, 10 ** -5)
+        shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "pièce.brep"))
+        testImport("BREP", shape_path, 259982.297176, 39481.415022205365, 10 ** -5)
+        #=========================================================================
+        # Create a shape imported from STEP
+        #=========================================================================
+        shape_path = getShapePath("Step/screw.step")
+        testImport("STEP", shape_path, 3.78827401738e-06, 0.0019293313778547085, 10 ** -17)
+        shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "screw.stp"))
+        testImport("STEP", shape_path, 3.78827401738e-06, 0.0019293313778547085, 10 ** -17)
+        #=========================================================================
+        # Create a shape imported from IGES
+        #=========================================================================
+        shape_path = getShapePath("Iges/bearing.igs")
+        testImport("IGS", shape_path, 0.0, 1.3407098545036494e-08, 10 ** -25)
+        shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "bearing.iges"))
+        testImport("IGES", shape_path, 0.0, 1.3407098545036494e-08, 10 ** -25)
+
+        #=========================================================================
+        # Create a shape imported from XAO
+        #=========================================================================
+        testImportXAO()
+
+        #=========================================================================
+        # End of test
+        #=========================================================================
+
+        from salome.shaper import model
+        assert(model.checkPythonDump())
 
-from salome.shaper import model
-assert(model.checkPythonDump())
+        #=========================================================================
+        # Check import errors
+        #=========================================================================
+        testImport("BREP", "", 0, 0, 10 ** -25, True)
+        shape_path = getShapePath("Brep/solid.dwg")
+        testImport("BREP", shape_path, 0, 0, 10 ** -25, True)
+        shape_path = getShapePath("Xao/wrong_file.xao")
+        testImport("XAO", shape_path, 0, 0, 10 ** -25, True)