Salome HOME
To fix salome test test.hdfs. Prevent a crash in case aDoc does not exist
[modules/shaper.git] / test.hdfs / test_hdf.py
index 9dbc1578c1e771fc390ff85edb1096aa019ff787..8911735b3efc61040c90c8799e33acecd664515f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019  CEA/DEN, EDF R&D
+# 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
@@ -32,13 +32,8 @@ class TestHDF(unittest.TestCase):
   reffile = ""
 
   def setUp(self):
-    salome.salome_close()
-
-    # leave file name only (trim path and extension)
-    fileName = os.path.basename(self.testfile)
-    self.reffile = self.reffile + "/" + os.path.splitext(fileName)[0] + ".py"
-
-    salome.salome_init(self.testfile, embedded=1)
+    salome.standalone()
+    salome.salome_init(self.testfile, embedded=1, forced=True)
     myStudyName = salome.myStudy._get_Name()
     self.session = salome.naming_service.Resolve('/Kernel/Session')
     self.session.emitMessage("connect_to_study")
@@ -55,7 +50,7 @@ class TestHDF(unittest.TestCase):
 
   def test_hdf_file(self):
     self.assertTrue(self.partSet.size("Parts") > 0)
-    aPartsList = []
+    aPartsList = dict()
     for aPartIndex in range(self.partSet.size("Parts")):
       self.session.startOperation()
       aPart = ModelAPI.modelAPI_ResultPart(ModelAPI.objectToResult(self.partSet.object("Parts", aPartIndex)))
@@ -63,31 +58,37 @@ class TestHDF(unittest.TestCase):
       self.session.finishOperation()
 
       aPartFeature = PartSetAPI.PartSetAPI_Part(self.partSet.currentFeature(True))
-      # check reference data
-      exec(open(self.reffile, "rb").read())
+      aPartsList["Part_{}".format(aPartIndex+1)] = aPartFeature
+
+      self.session.startOperation()
+      self.session.setActiveDocument(self.partSet)
+      self.session.finishOperation()
+
+      # Check that the features are not in error
+      Part_1_doc = aPart.partDoc()
+
+      model.checkFeaturesValidity(Part_1_doc)
+    # check reference data
+    exec(open(self.reffile, "rb").read(), globals(), aPartsList)
 
 
 if __name__ == "__main__":
   if len(sys.argv) > 1:
     TestHDF.testfile = sys.argv[1]
   if len(sys.argv) > 2:
-    salomePortFile = sys.argv[2]
+    TestHDF.reffile = sys.argv[2]
   if len(sys.argv) > 3:
     errFile = open(sys.argv[3], 'w')
-  if len(sys.argv) > 4:
-    salomeKernelDir = sys.argv[4]
-  if len(sys.argv) > 5:
-    TestHDF.reffile = sys.argv[5]
+  else:
+    # to ease debugging, display the log in embedded python console if no log file is provided
+    # when calling salome in command line for instance
+    # runSalome.py --splash 0 test_hdf.py args:BearingSeparator.hdf,BearingSeparator.py
+    errFile = None
 
   aTest = unittest.TestLoader().loadTestsFromTestCase(TestHDF)
   unittest.TextTestRunner(stream=errFile).run(aTest)
-  errFile.close()
-
-  # close Salome GUI
-  port = salome_utils.getPortNumber()
-  proc = subprocess.Popen([salomeKernelDir + "/bin/salome/killSalomeWithPort.py", "{}".format(port)])
+  if errFile:
+    errFile.close()
 
-  try:
-    os.remove(salomePortFile)
-  except:
-    print("Cannot remove file", file=f)
+  # Quit SALOME the clean way
+  sys.exit()