Salome HOME
Merge remote-tracking branch 'origin/master' into V9_dev
[modules/yacs.git] / src / yacsloader_swig / Test / testSave.py
1 #!/usr/bin/env python
2 # Copyright (C) 2006-2016  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
25 import SALOMERuntime
26 import loader
27 import pilot
28
29 class TestSave(unittest.TestCase):
30
31     def setUp(self):
32         SALOMERuntime.RuntimeSALOME_setRuntime(1)
33         pass
34
35     def test0_saveAndExec(self):
36         """Execute twice the scheme. Each time the final state is dumped
37         and the scheme is written. The second exeuction is done with the
38         saved scheme file. Final state dumps and scheme files produced must
39         be identical for the 2 executions. Nodes are not always written in
40         the same order, so the comparison is done after sort of lines...
41         """
42         schemaList = []
43         schemaList += ["aschema","bschema","cschema","dschema","eschema","fschema"]
44         schemaList += ["bloc1","bloc2","bloc3","bloc4"]
45         schemaList += ["foreach1","foreach2","foreach4","foreach5"]
46         schemaList += ["foreach_LongCorba","foreach_LongPython"]
47         schemaList += ["forloop1","forloop2","forloop3","forloop4","forloop5","forloop6","forloop7"]
48         schemaList += ["forwhile1"]
49         schemaList += ["legendre7"]
50         schemaList += ["switch1","switch2","switch3","switch4","switch5","switch6","switch7","switch8","switch9"]
51         schemaList += ["while1","while2","while3"]
52         r = pilot.getRuntime()
53         l = loader.YACSLoader()
54         e = pilot.ExecutorSwig()
55         for schema in schemaList:
56             fileOrig = "samples/" + schema + ".xml"
57             saveSchema1 = "schema1_" + schema
58             dumpSchema1 = "dump1_" + schema
59             saveSchema2 = "schema2_" + schema
60             dumpSchema2 = "dump2_" + schema
61             try:
62                 p = l.load(fileOrig)
63                 s = pilot.SchemaSave(p)
64                 s.save(saveSchema1)
65                 e.RunW(p,0)
66                 e.saveState(dumpSchema1)
67                 p = l.load(saveSchema1)
68                 s = pilot.SchemaSave(p)
69                 s.save(saveSchema2)
70                 e.RunW(p,0)
71                 e.saveState(dumpSchema2)
72             except ValueError as ex:
73                 print("Value Error: ", ex)
74                 pb = "problem on " + fileOrig + " : ValueError"
75                 self.fail(pb)
76             except pilot.Exception as ex:
77                 print(ex.what())
78                 pb = "problem on " + fileOrig + " : " + ex.what()
79                 self.fail(pb)
80             except:
81                 pb = "unknown problem on " + fileOrig
82                 self.fail(pb)                
83             
84             with open(saveSchema1,'r') as s1:
85                 ls1 = s1.readlines().sort()
86             with open(saveSchema2,'r') as s2:
87                 ls2 = s2.readlines().sort()
88             with open(dumpSchema1,'r') as d1:
89                 ld1 = d1.readlines().sort()
90             with open(dumpSchema2,'r') as d2:
91                 ld2 = d2.readlines().sort()
92             pb1 = "file schemes produced by successive executions are not identical: " + fileOrig 
93             pb2 = "final dump states produced by successive executions are not identical: " + fileOrig 
94             self.assertEqual(ls1,ls2,pb1)
95             self.assertEqual(ld1,ld2,pb2)            
96             pass
97
98 if __name__ == '__main__':
99   import os
100   U = os.getenv('USER')
101   with open("/tmp/" + U + "/UnitTestsResult", 'a') as f:
102       f.write("  --- TEST src/yacsloader: testSave.py\n")
103       suite = unittest.makeSuite(TestSave)
104       result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
105   sys.exit(not result.wasSuccessful())