/[escript]/trunk/escript/test/python/run_xml.py
ViewVC logotype

Diff of /trunk/escript/test/python/run_xml.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/esys2/escript/test/python/test_xml.py revision 147 by jgs, Fri Aug 12 01:45:47 2005 UTC trunk/escript/test/python/run_xml.py revision 956 by gross, Tue Feb 13 00:03:40 2007 UTC
# Line 1  Line 1 
1  #!/usr/bin/python  #!/usr/bin/python
2    
3  # $Id$  # $Id$
4    __copyright__="""  Copyright (c) 2006 by ACcESS MNRF
5                        http://www.access.edu.au
6                    Primary Business: Queensland, Australia"""
7    __license__="""Licensed under the Open Software License version 3.0
8                 http://www.opensource.org/licenses/osl-3.0.php"""
9    
10  import unittest  import unittest
11  from escript.modelframe import Model,Link,Simulation,ParameterSet,parse  from esys.escript.modelframe import Model,Link,Simulation,ParameterSet,ESySXMLParser,DataSource
12  import math  import math
13  from cStringIO import StringIO  from cStringIO import StringIO
14  from xml.dom import minidom  from xml.dom import minidom
15    import numarray
16    
17  class XMLDocumentTestCase(unittest.TestCase):  class XMLDocumentTestCase(unittest.TestCase):
18    
# Line 70  class SimulationTestCase(unittest.TestCa Line 76  class SimulationTestCase(unittest.TestCa
76                    
77      def testParseAndInstanceOfSimulation(self):      def testParseAndInstanceOfSimulation(self):
78                    
79          newSim = parse(self.xml)          xml = ESySXMLParser(self.xml)
80            newSim = xml.parse()[0]
81          assert (isinstance (newSim, Simulation))          assert (isinstance (newSim, Simulation))
82          newout = StringIO()          newout = StringIO()
83          newSim.writeXML(newout)          newSim.writeXML(newout)
# Line 136  class ParamaterSetTestCase(unittest.Test Line 143  class ParamaterSetTestCase(unittest.Test
143          assert ("gamma1" in xmlout)          assert ("gamma1" in xmlout)
144          assert ("gamma2" in xmlout)          assert ("gamma2" in xmlout)
145          assert ("gamma3" in xmlout)          assert ("gamma3" in xmlout)
146          parsable = parse(xmlout)          esysxml=ESySXMLParser(xmlout)
147            parsable = esysxml.parse()[0]
148          assert (isinstance (parsable, ParameterSet))          assert (isinstance (parsable, ParameterSet))
149          assert (self._dom().getElementsByTagName("ParameterSet"))          assert (self._dom(self.p).getElementsByTagName("ParameterSet"))
150    
151      def testParameterSetFromXML(self):      def testParameterSetFromXML(self):
152          doc = self._class()          s = StringIO()
153          pset = ParameterSet.fromDom(self._dom().getElementsByTagName("ParameterSet")[0])          self.p.writeXML(s)
154            s.reset()
155            xmlout = s.read()
156            esysxml=ESySXMLParser(xmlout)
157            doc = self._class(self.p)
158            pset = ParameterSet.fromDom(esysxml, self._dom(self.p).getElementsByTagName("ParameterSet")[0])
159          assert (isinstance(pset, ParameterSet))          assert (isinstance(pset, ParameterSet))
160          assert (isinstance(doc, ParameterSet))          assert (isinstance(doc, ParameterSet))
161          self.assertEqual(self.p.gamma1,doc.gamma1)          self.assertEqual(self.p.gamma1,doc.gamma1)
# Line 152  class ParamaterSetTestCase(unittest.Test Line 165  class ParamaterSetTestCase(unittest.Test
165          p2 = ParameterSet()          p2 = ParameterSet()
166          p2.declareParameter(s="abc", f=3.)          p2.declareParameter(s="abc", f=3.)
167          self.p.declareParameter(child=p2)          self.p.declareParameter(child=p2)
168          doc = self._class()          doc = self._class(self.p)
169          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])
170          self.assertEqual(self.p.child.f, doc.child.f)          self.assertEqual(self.p.child.f, doc.child.f)
171    
# Line 163  class ParamaterSetTestCase(unittest.Test Line 176  class ParamaterSetTestCase(unittest.Test
176          self.assertEqual(self.p.child.s, "abc")          self.assertEqual(self.p.child.s, "abc")
177          self.assertEqual(self.p.child.f, 3.)          self.assertEqual(self.p.child.f, 3.)
178    
179      def _dom(self):      def _dom(self, input):
180          s = StringIO()          s = StringIO()
181          self.p.writeXML(s)          input.writeXML(s)
182          s.reset()          s.reset()
183          xmlout = s.read()          xmlout = s.read()
184          doc = minidom.parseString(xmlout)          doc = minidom.parseString(xmlout)
185          return doc          return doc
186    
187      def _class(self):      def _class(self, input):
188          s = StringIO()          s = StringIO()
189          self.p.writeXML(s)          input.writeXML(s)
190          s.reset()          s.reset()
191          xmlout = s.read()          xmlout = s.read()
192          doc = parse(xmlout)          esysxml=ESySXMLParser(xmlout)
193            doc =esysxml.parse()[0]
194          return doc          return doc
195    
196        def testFromDomInt(self):
197            p3 = ParameterSet()
198            p3.declareParameter(inttest=1)
199            doc = self._class(p3)
200            assert type(doc.inttest)==int
201    
202        def testFromDomNumarrayVector(self):
203            p3 = ParameterSet()
204            mynumarray = numarray.array([3., 4., 5.], type=numarray.Float64)
205            p3.declareParameter(numtest=mynumarray)
206            doc = self._class(p3)
207            assert doc.numtest.type() == numarray.Float64
208            assert type(doc.numtest) == numarray.NumArray
209    
210        def testFromDomNumarrayMulti(self):
211            p3 = ParameterSet()
212            mynumarray = numarray.array([[1., 2., 3.], [3., 4., 5.]], type=numarray.Float64)
213            p3.declareParameter(numtest=mynumarray)
214            doc = self._class(p3)
215            assert doc.numtest.type() == numarray.Float64
216            assert type(doc.numtest) == numarray.NumArray
217    
218        def testLists(self):
219            p4 = ParameterSet()
220            mylist = [True, False, False, True]
221            p4.declareParameter(listest=mylist)
222            doc = self._class(p4)
223            assert doc.listest.type() == numarray.Bool
224            assert type(doc.listest) == numarray.NumArray
225            assert numarray.all(numarray.equal(mylist, doc.listest))
226            
227        def testDatasource(self):
228            p5 = ParameterSet()
229            myURI = DataSource("somelocalfile.txt", "text")
230            p5.declareParameter(uritest=myURI)
231            doc = self._class(p5)
232            self.assertEquals(myURI.uri, doc.uritest.uri)
233            self.assertEquals(myURI.fileformat, doc.uritest.fileformat)
234            assert type(doc.uritest) == DataSource
235            
236    
237          
238  class ModeltoDomTestCase(unittest.TestCase):  class ModeltoDomTestCase(unittest.TestCase):
239            
240      def _class(self):      def _class(self):
# Line 187  class ModeltoDomTestCase(unittest.TestCa Line 243  class ModeltoDomTestCase(unittest.TestCa
243          self.o1.writeXML(s)          self.o1.writeXML(s)
244          s.reset()          s.reset()
245          self.xmlout = s.read()          self.xmlout = s.read()
246          doc = parse(self.xmlout)          esysxml=ESySXMLParser(xmlout)
247            doc =esysxml.parse()[0]
248          return doc          return doc
249    
250      def _dom(self):      def _dom(self):
# Line 210  class ModeltoDomTestCase(unittest.TestCa Line 267  class ModeltoDomTestCase(unittest.TestCa
267            
268      def testModelhasID(self):      def testModelhasID(self):
269          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99
270    
271    class ModeltoDomTestCase(unittest.TestCase):
272        def _xml(self, modulename, modelname):
273            # returns a modelframe class, generated from the xml
274            return '''<?xml version="1.0" ?>
275    <ESys> <Simulation type="Simulation"> <Component rank="0">
276    
277        <Model id="127" module="%s" type="%s">
278    
279    <Parameter type="float"> <Name> a </Name> <Value> 0.9 </Value> </Parameter>
280    <Parameter type="Link"> <Name> f </Name> <Value> <Link> <Target> 128 </Target>
281    <Attribute> u </Attribute> </Link> </Value> </Parameter> <Parameter
282    type="float"> <Name> tend </Name> <Value>
283    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
284      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
285      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
286      <Value>
287    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
288      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model>
289      </Component> <Component rank="1"> <Model id="128" type="ODETEST"> <Parameter
290      type="float"> <Name> a </Name> <Value>
291    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
292      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
293      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
294    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
295      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
296      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
297      </Name> <Value>
298    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
299      current error = 1.904837e+01 </Value> </Parameter> </Model> </Component>
300      <Component rank="2"> <Model id="129" type="Messenger"> <Parameter
301      type="Link"> <Name> message </Name> <Value> <Link> <Target> 127 </Target>
302      <Attribute> message </Attribute> </Link> </Value> </Parameter> </Model>
303      </Component> </Simulation> <Model id="150" type="ODETEST"> <Parameter
304      type="float"> <Name> a </Name> <Value>
305    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
306      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
307      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
308    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
309      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
310      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
311      </Name> <Value>
312    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
313      current error = 1.904837e+01 </Value> </Parameter> </Model> <Model id="130"
314      type="ODETEST"> <Parameter type="float"> <Name> a </Name> <Value>
315    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
316      <Link> <Target> 128 </Target> <Attribute> u </Attribute> </Link> </Value>
317      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
318    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
319      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
320      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
321      <Value>
322    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
323      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model> <Model
324      id="170" type="ODETEST"> <Parameter type="float"> <Name> a </Name> <Value>
325    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
326      <Link> <Target> 128 </Target> <Attribute> u </Attribute> </Link> </Value>
327      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
328    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
329      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
330      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
331      <Value>
332    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
333      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model> </ESys>
334    ''' % (modulename, modelname)
335    
336        def testModuleAttribute(self):
337            esysxml=ESySXMLParser(self._xml('run_xml', 'ODETEST'))
338            modeldoc=esysxml.parse()[0]
339    
340        def testModuleAttributeFails(self):
341            try:
342                esysxml=ESySXMLParser(self._xml('a', 'b'))
343                modeldoc=esysxml.parse()[0]
344            except ImportError:
345                return # correct
346    
347            assert False, "This test should have resulted in an ImportError"
348                    
349  class Messenger(Model):  class Messenger(Model):
350      def __init__(self, *args, **kwargs):      def __init__(self, *args, **kwargs):
# Line 283  class ODETEST(Model): Line 418  class ODETEST(Model):
418      def finalize(self):      def finalize(self):
419          return self.__tn>=self.tend          return self.__tn>=self.tend
420    
421    
422            
423  if __name__ == "__main__":  if __name__ == "__main__":
424              unittest.main()      unittest.main()
425    

Legend:
Removed from v.147  
changed lines
  Added in v.956

  ViewVC Help
Powered by ViewVC 1.1.26