Salome HOME
Copyright update 2020
[modules/yacs.git] / src / yacsloader_swig / Test / testSave.py
1 #!/usr/bin/env python3
2 # Copyright (C) 2006-2020  CEA/DEN, EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import time
22 import unittest
23 import threading
24 import tempfile
25 import os
26
27 import SALOMERuntime
28 import loader
29 import pilot
30
31 class TestSave(unittest.TestCase):
32
33     def setUp(self):
34         SALOMERuntime.RuntimeSALOME_setRuntime(1)
35         self.workdir = tempfile.mkdtemp(suffix=".yacstest")
36         pass
37
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...
44         """
45         schemaList = []
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:
59             fileOrig = "samples/" + schema + ".xml"
60             saveSchema1 = os.path.join(self.workdir, "schema1_" + schema)
61             dumpSchema1 = os.path.join(self.workdir, "dump1_" + schema)
62             saveSchema2 = os.path.join(self.workdir, "schema2_" + schema)
63             dumpSchema2 = os.path.join(self.workdir, "dump2_" + schema)
64             try:
65                 p = l.load(fileOrig)
66                 s = pilot.SchemaSave(p)
67                 s.save(saveSchema1)
68                 e.RunW(p,0)
69                 e.saveState(dumpSchema1)
70                 p = l.load(saveSchema1)
71                 s = pilot.SchemaSave(p)
72                 s.save(saveSchema2)
73                 e.RunW(p,0)
74                 e.saveState(dumpSchema2)
75             except ValueError as ex:
76                 print("Value Error: ", ex)
77                 pb = "problem on " + fileOrig + " : ValueError"
78                 self.fail(pb)
79             except pilot.Exception as ex:
80                 print(ex.what())
81                 pb = "problem on " + fileOrig + " : " + ex.what()
82                 self.fail(pb)
83             except:
84                 pb = "unknown problem on " + fileOrig
85                 self.fail(pb)                
86             
87             with open(saveSchema1,'r') as s1:
88                 ls1 = s1.readlines().sort()
89             with open(saveSchema2,'r') as s2:
90                 ls2 = s2.readlines().sort()
91             with open(dumpSchema1,'r') as d1:
92                 ld1 = d1.readlines().sort()
93             with open(dumpSchema2,'r') as d2:
94                 ld2 = d2.readlines().sort()
95             pb1 = "file schemes produced by successive executions are not identical: " + fileOrig 
96             pb2 = "final dump states produced by successive executions are not identical: " + fileOrig 
97             self.assertEqual(ls1,ls2,pb1)
98             self.assertEqual(ld1,ld2,pb2)            
99             pass
100
101 if __name__ == '__main__':
102   import os
103   U = os.getenv('USER')
104   with open("/tmp/" + U + "/UnitTestsResult", 'a') as f:
105       f.write("  --- TEST src/yacsloader: testSave.py\n")
106       suite = unittest.makeSuite(TestSave)
107       result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
108   sys.exit(not result.wasSuccessful())