/[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 918 by gross, Wed Jan 3 06:30:00 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
# Line 70  class SimulationTestCase(unittest.TestCa Line 75  class SimulationTestCase(unittest.TestCa
75                    
76      def testParseAndInstanceOfSimulation(self):      def testParseAndInstanceOfSimulation(self):
77                    
78          newSim = parse(self.xml)          xml = ESySXMLParser(self.xml)
79            newSim = xml.parse()[0]
80          assert (isinstance (newSim, Simulation))          assert (isinstance (newSim, Simulation))
81          newout = StringIO()          newout = StringIO()
82          newSim.writeXML(newout)          newSim.writeXML(newout)
# Line 136  class ParamaterSetTestCase(unittest.Test Line 142  class ParamaterSetTestCase(unittest.Test
142          assert ("gamma1" in xmlout)          assert ("gamma1" in xmlout)
143          assert ("gamma2" in xmlout)          assert ("gamma2" in xmlout)
144          assert ("gamma3" in xmlout)          assert ("gamma3" in xmlout)
145          parsable = parse(xmlout)          esysxml=ESySXMLParser(xmlout)
146            parsable = esysxml.parse()[0]
147          assert (isinstance (parsable, ParameterSet))          assert (isinstance (parsable, ParameterSet))
148          assert (self._dom().getElementsByTagName("ParameterSet"))          assert (self._dom(self.p).getElementsByTagName("ParameterSet"))
149    
150      def testParameterSetFromXML(self):      def testParameterSetFromXML(self):
151          doc = self._class()          s = StringIO()
152          pset = ParameterSet.fromDom(self._dom().getElementsByTagName("ParameterSet")[0])          self.p.writeXML(s)
153            s.reset()
154            xmlout = s.read()
155            esysxml=ESySXMLParser(xmlout)
156            doc = self._class(self.p)
157            pset = ParameterSet.fromDom(esysxml, self._dom(self.p).getElementsByTagName("ParameterSet")[0])
158          assert (isinstance(pset, ParameterSet))          assert (isinstance(pset, ParameterSet))
159          assert (isinstance(doc, ParameterSet))          assert (isinstance(doc, ParameterSet))
160          self.assertEqual(self.p.gamma1,doc.gamma1)          self.assertEqual(self.p.gamma1,doc.gamma1)
# Line 152  class ParamaterSetTestCase(unittest.Test Line 164  class ParamaterSetTestCase(unittest.Test
164          p2 = ParameterSet()          p2 = ParameterSet()
165          p2.declareParameter(s="abc", f=3.)          p2.declareParameter(s="abc", f=3.)
166          self.p.declareParameter(child=p2)          self.p.declareParameter(child=p2)
167          doc = self._class()          doc = self._class(self.p)
168          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])
169          self.assertEqual(self.p.child.f, doc.child.f)          self.assertEqual(self.p.child.f, doc.child.f)
170    
# Line 163  class ParamaterSetTestCase(unittest.Test Line 175  class ParamaterSetTestCase(unittest.Test
175          self.assertEqual(self.p.child.s, "abc")          self.assertEqual(self.p.child.s, "abc")
176          self.assertEqual(self.p.child.f, 3.)          self.assertEqual(self.p.child.f, 3.)
177    
178      def _dom(self):      def _dom(self, input):
179          s = StringIO()          s = StringIO()
180          self.p.writeXML(s)          input.writeXML(s)
181          s.reset()          s.reset()
182          xmlout = s.read()          xmlout = s.read()
183          doc = minidom.parseString(xmlout)          doc = minidom.parseString(xmlout)
184          return doc          return doc
185    
186      def _class(self):      def _class(self, input):
187          s = StringIO()          s = StringIO()
188          self.p.writeXML(s)          input.writeXML(s)
189          s.reset()          s.reset()
190          xmlout = s.read()          xmlout = s.read()
191          doc = parse(xmlout)          esysxml=ESySXMLParser(xmlout)
192            doc =esysxml.parse()[0]
193          return doc          return doc
194    
195        def testFromDomInt(self):
196            p3 = ParameterSet()
197            p3.declareParameter(inttest=1)
198            doc = self._class(p3)
199            assert type(doc.inttest)==int
200    
201        def testFromDomNumarrayVector(self):
202            import numarray
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            import numarray
212            p3 = ParameterSet()
213            mynumarray = numarray.array([[1., 2., 3.], [3., 4., 5.]], type=numarray.Float64)
214            p3.declareParameter(numtest=mynumarray)
215            doc = self._class(p3)
216            assert doc.numtest.type() == numarray.Float64
217            assert type(doc.numtest) == numarray.NumArray
218    
219        def testLists(self):
220            import numarray
221            p4 = ParameterSet()
222            mylist = [True, False, False, True]
223            p4.declareParameter(listest=mylist)
224            doc = self._class(p4)
225            assert doc.listest.type() == numarray.Bool
226            assert type(doc.listest) == numarray.NumArray
227            assert numarray.all(numarray.equal(mylist, doc.listest))
228            
229        def testDatasource(self):
230            p5 = ParameterSet()
231            myURI = DataSource("somelocalfile.txt", "text")
232            p5.declareParameter(uritest=myURI)
233            doc = self._class(p5)
234            self.assertEquals(myURI.uri, doc.uritest.uri)
235            self.assertEquals(myURI.fileformat, doc.uritest.fileformat)
236            assert type(doc.uritest) == DataSource
237            
238    
239          
240  class ModeltoDomTestCase(unittest.TestCase):  class ModeltoDomTestCase(unittest.TestCase):
241            
242      def _class(self):      def _class(self):
# Line 187  class ModeltoDomTestCase(unittest.TestCa Line 245  class ModeltoDomTestCase(unittest.TestCa
245          self.o1.writeXML(s)          self.o1.writeXML(s)
246          s.reset()          s.reset()
247          self.xmlout = s.read()          self.xmlout = s.read()
248          doc = parse(self.xmlout)          esysxml=ESySXMLParser(xmlout)
249            doc =esysxml.parse()[0]
250          return doc          return doc
251    
252      def _dom(self):      def _dom(self):
# Line 210  class ModeltoDomTestCase(unittest.TestCa Line 269  class ModeltoDomTestCase(unittest.TestCa
269            
270      def testModelhasID(self):      def testModelhasID(self):
271          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99
272    
273    class ModeltoDomTestCase(unittest.TestCase):
274        def _xml(self, modulename, modelname):
275            # returns a modelframe class, generated from the xml
276            return '''<?xml version="1.0" ?>
277    <ESys> <Simulation type="Simulation"> <Component rank="0">
278    
279        <Model id="127" module="%s" type="%s">
280    
281    <Parameter type="float"> <Name> a </Name> <Value> 0.9 </Value> </Parameter>
282    <Parameter type="Link"> <Name> f </Name> <Value> <Link> <Target> 128 </Target>
283    <Attribute> u </Attribute> </Link> </Value> </Parameter> <Parameter
284    type="float"> <Name> tend </Name> <Value>
285    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
286      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
287      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
288      <Value>
289    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
290      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model>
291      </Component> <Component rank="1"> <Model id="128" type="ODETEST"> <Parameter
292      type="float"> <Name> a </Name> <Value>
293    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
294      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
295      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
296    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
297      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
298      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
299      </Name> <Value>
300    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
301      current error = 1.904837e+01 </Value> </Parameter> </Model> </Component>
302      <Component rank="2"> <Model id="129" type="Messenger"> <Parameter
303      type="Link"> <Name> message </Name> <Value> <Link> <Target> 127 </Target>
304      <Attribute> message </Attribute> </Link> </Value> </Parameter> </Model>
305      </Component> </Simulation> <Model id="150" type="ODETEST"> <Parameter
306      type="float"> <Name> a </Name> <Value>
307    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
308      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
309      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
310    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
311      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
312      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
313      </Name> <Value>
314    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
315      current error = 1.904837e+01 </Value> </Parameter> </Model> <Model id="130"
316      type="ODETEST"> <Parameter type="float"> <Name> a </Name> <Value>
317    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
318      <Link> <Target> 128 </Target> <Attribute> u </Attribute> </Link> </Value>
319      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
320    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
321      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
322      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
323      <Value>
324    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
325      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model> <Model
326      id="170" type="ODETEST"> <Parameter type="float"> <Name> a </Name> <Value>
327    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
328      <Link> <Target> 128 </Target> <Attribute> u </Attribute> </Link> </Value>
329      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
330    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
331      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
332      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
333      <Value>
334    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
335      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model> </ESys>
336    ''' % (modulename, modelname)
337    
338        def testModuleAttribute(self):
339            esysxml=ESySXMLParser(self._xml('run_xml', 'ODETEST'))
340            modeldoc=esysxml.parse()[0]
341    
342        def testModuleAttributeFails(self):
343            try:
344                esysxml=ESySXMLParser(self._xml('a', 'b'))
345                modeldoc=esysxml.parse()[0]
346            except ImportError:
347                return # correct
348    
349            assert False, "This test should have resulted in an ImportError"
350                    
351  class Messenger(Model):  class Messenger(Model):
352      def __init__(self, *args, **kwargs):      def __init__(self, *args, **kwargs):
# Line 283  class ODETEST(Model): Line 420  class ODETEST(Model):
420      def finalize(self):      def finalize(self):
421          return self.__tn>=self.tend          return self.__tn>=self.tend
422    
423    
424            
425  if __name__ == "__main__":  if __name__ == "__main__":
426              unittest.main()      unittest.main()
427    

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

  ViewVC Help
Powered by ViewVC 1.1.26