2 # Copyright (C) 2006-2024 CEA, EDF
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
31 class TestSave(unittest.TestCase):
34 SALOMERuntime.RuntimeSALOME_setRuntime(1)
35 self.workdir = tempfile.mkdtemp(suffix=".yacstest")
38 def test0_saveAndExec(self):
39 """Execute twice the scheme. Each time the final state is dumped
40 and the scheme is written. The second exeuction is done with the
41 saved scheme file. Final state dumps and scheme files produced must
42 be identical for the 2 executions. Nodes are not always written in
43 the same order, so the comparison is done after sort of lines...
46 schemaList += ["aschema","bschema","cschema","dschema","eschema","fschema"]
47 schemaList += ["bloc1","bloc2","bloc3","bloc4"]
48 schemaList += ["foreach1","foreach2","foreach4","foreach5"]
49 schemaList += ["foreach_LongCorba","foreach_LongPython"]
50 schemaList += ["forloop1","forloop2","forloop3","forloop4","forloop5","forloop6","forloop7"]
51 schemaList += ["forwhile1"]
52 schemaList += ["legendre7"]
53 schemaList += ["switch1","switch2","switch3","switch4","switch5","switch6","switch7","switch8","switch9"]
54 schemaList += ["while1","while2","while3"]
55 r = pilot.getRuntime()
56 l = loader.YACSLoader()
57 e = pilot.ExecutorSwig()
58 for schema in schemaList:
60 fileOrig = "samples/" + schema + ".xml"
61 saveSchema1 = os.path.join(self.workdir, "schema1_" + schema)
62 dumpSchema1 = os.path.join(self.workdir, "dump1_" + schema)
63 saveSchema2 = os.path.join(self.workdir, "schema2_" + schema)
64 dumpSchema2 = os.path.join(self.workdir, "dump2_" + schema)
67 s = pilot.SchemaSave(p)
70 e.saveState(dumpSchema1)
71 p = l.load(saveSchema1)
72 s = pilot.SchemaSave(p)
75 e.saveState(dumpSchema2)
76 except ValueError as ex:
77 print("Value Error: ", ex)
78 pb = "problem on " + fileOrig + " : ValueError"
80 except pilot.Exception as ex:
82 pb = "problem on " + fileOrig + " : " + ex.what()
85 pb = "unknown problem on " + fileOrig
88 with open(saveSchema1,'r') as s1:
89 ls1 = s1.readlines().sort()
90 with open(saveSchema2,'r') as s2:
91 ls2 = s2.readlines().sort()
92 with open(dumpSchema1,'r') as d1:
93 ld1 = d1.readlines().sort()
94 with open(dumpSchema2,'r') as d2:
95 ld2 = d2.readlines().sort()
96 pb1 = "file schemes produced by successive executions are not identical: " + fileOrig
97 pb2 = "final dump states produced by successive executions are not identical: " + fileOrig
98 self.assertEqual(ls1,ls2,pb1)
99 self.assertEqual(ld1,ld2,pb2)
102 if __name__ == '__main__':
108 ior = NamingService.NamingService.IOROfNS()
109 p = subprocess.Popen(["../yacsloader/echoSrv",ior])
112 with tempfile.TemporaryDirectory(suffix=".yacstest") as dir_test:
113 file_test = os.path.join(dir_test,"UnitTestsResult")
114 with open(file_test, 'a') as f:
115 f.write(" --- TEST src/yacsloader: testSave.py\n")
116 suite = unittest.makeSuite(TestSave)
117 result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
119 sys.exit(not result.wasSuccessful())