Salome HOME
modif pour MT
[tools/eficas.git] / Tests / EficasEngineTest.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # Copyright (C) 2007-2012   EDF R&D
4 #
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
9 #
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #
21 """
22    Ce module sert a lancer EFICAS configure pour Code_Aster
23 """
24 # Modules Python
25 # Modules Eficas
26
27 import sys,os
28 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
29
30 from PyQt4.QtCore import *
31 from InterfaceQT4 import eficas_go
32
33 import prefs
34 import difflib
35
36 from PyQt4.QtGui  import *
37 from myMain import Ui_Eficas
38 from viewManager import MyTabview
39 from getVersion import getEficasVersion
40
41 from Extensions.i18n import tr
42 from Extensions.eficas_exception import EficasException
43
44 from Editeur import session
45
46 import unittest
47 import HTMLTestRunner
48
49 class EficasEngineTestSuite(unittest.TestSuite):
50     def __init__(self, testList):
51         unittest.TestSuite.__init__(self)
52         for test in testList:
53             self.addTest(test)
54
55 class EficasEngineTestCase(unittest.TestCase):
56     def setUp(self):
57         from qtEficas import Appli
58         from Editeur import session
59         from Extensions import localisation
60         
61         options = session.parse(sys.argv)
62         if options.code!= None : code=options.code
63         if options.ssCode!= None : ssCode=options.ssCode
64         
65         self.code=prefs.code
66         self.Eficas=None
67         self.editor=None
68         
69         self.app = QApplication(sys.argv)
70         localisation.localise(self.app,'en')
71         self.Eficas=Appli(code=self.code,ssCode=None,multi=False,langue='en')
72
73     def tearDown(self):
74         del self.Eficas
75         self.Eficas = None
76         del self.app
77         self.app = None
78         self.editor = None
79
80     def close(self):
81         if ( self.editor != None ):
82             vm=self.Eficas.viewmanager
83             index=vm.myQtab.currentIndex()
84             idx=index
85             while idx < len(vm.dict_editors) -1 :
86                 vm.dict_editors[idx]=vm.dict_editors[idx+1]
87                 idx = idx + 1
88             del vm.dict_editors[len (vm.dict_editors) -1]
89             try :
90                 del vm.doubles[vm.dict_editors[index]]
91             except :
92                 pass
93             vm.myQtab.removeTab(index)
94             self.editor = None
95
96     def open_file(self, fileName):
97         if ( self.Eficas == None ):
98             return False
99
100         result=True
101         try:
102             self.Eficas.viewmanager.handleOpen(fileName)
103             index=self.Eficas.viewmanager.myQtab.currentIndex()
104             self.editor=self.Eficas.viewmanager.dict_editors[index]
105         except:
106             result=False
107             pass
108
109         return result
110
111     def save_file(self, file):
112         if ( self.editor == None ):
113             return False
114
115         try:
116             os.remove(file)
117         except:
118             pass
119
120         result=True
121         
122         try:
123             self.editor.saveFileAs(fileName=file)
124         except:
125             result=False
126             pass
127         return result
128
129     def search_object(self, name):
130         obj=None
131         if ( self.editor != None ):
132             obj=self.editor.jdc
133         return self.search_subobject(obj, name)
134     
135     def search_subobject(self, obj, name):
136         if ( obj==None ):
137             return None
138     
139         if ( hasattr( obj, 'get_sdname' ) and obj.get_sdname() == name ):
140             return obj
141
142         list=[]
143         if ( hasattr(obj, 'etapes') ):
144             list=obj.etapes
145         elif ( hasattr(obj, 'mc_liste') ):
146             list=obj.mc_liste
147
148         o=None
149         for i in list:
150             o=self.search_subobject(i, name)
151             if ( o != None ):
152                 break
153             
154         return o
155
156     def search_param(self, obj, name):
157         if ( obj == None ):
158             return None
159
160         if ( hasattr( obj, 'nom' ) and obj.nom == name ):
161             return obj
162          
163         list=[]
164         if ( hasattr(obj, 'etapes') ):
165             list=obj.etapes
166         elif ( hasattr(obj, 'mc_liste') ):
167             list=obj.mc_liste
168
169         o=None
170         for i in list:
171             o=self.search_param(i, name)
172             if ( o != None ):
173                 break
174
175         return o
176
177     def remove_object(self, obj):
178         if ( obj != None and hasattr( obj, 'parent' ) ):
179             p=obj.parent
180             if ( p != None ):
181                 p.suppentite(obj)
182
183     def compare_files(self, orig, test):
184         origlines = open(orig, 'U').readlines()
185         testlines = open(test, 'U').readlines()
186
187         diff = difflib.unified_diff(origlines, testlines, orig, test)
188
189         result = 0;
190         for str in diff:
191             if ( len(str) == 0 ):
192                 continue
193             elif ( str[0] != ' ' ):
194                 result=1
195                 print str
196
197         return result
198
199     def testCaseDataDir(self):
200         return '/dn24/EFICAS/stv'
201             
202     def testCaseInputDataFile(self):
203         return ""
204
205     def testCasePatternDataFile(self):
206         dataFile=self.testCaseInputDataFile()
207         split=os.path.splitext(dataFile)
208         return split[0] + '_ptrn' + split[1]
209
210     def testCaseTestDataFile(self):
211         dataFile=self.testCaseInputDataFile()
212         split=os.path.splitext(dataFile)
213         return split[0] + '_test' + split[1]
214
215     def testCaseInputDataPath(self):
216         return self.testCaseDataDir() + os.sep + self.testCaseInputDataFile()
217
218     def testCasePatternDataPath(self):
219         return self.testCaseDataDir() + os.sep + self.testCasePatternDataFile()
220
221     def testCaseTestDataPath(self):
222         return self.testCaseDataDir() + os.sep + self.testCaseTestDataFile()
223
224     def runTest(self):
225         inputFile=self.testCaseInputDataPath()
226
227         self.assert_(self.open_file(inputFile), 'Can not open file: ' + inputFile)
228
229         self.assert_(self.performTest(), 'Test not performed')
230
231         testFile=self.testCaseTestDataPath()
232
233         self.assert_(self.save_file(testFile), 'Can not save file: ' + testFile)
234
235         patternFile=self.testCasePatternDataPath()
236         cmp=self.compare_files(patternFile, testFile)
237
238         self.assert_(cmp == 0, "Pattern file and test file are differs")
239
240         self.close()
241
242     def performTest(self):
243         return True
244     
245 def run_tests(reportFile, testSuit):
246     print reportFile
247     buf = file(reportFile, 'wb')
248     runner = HTMLTestRunner.HTMLTestRunner(stream=buf, title='Test report', description='Result of tests')
249     runner.run(testSuit)