/[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 875 by elspeth, Tue Oct 17 12:42:47 2006 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,parse,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 138  class ParamaterSetTestCase(unittest.Test Line 143  class ParamaterSetTestCase(unittest.Test
143          assert ("gamma3" in xmlout)          assert ("gamma3" in xmlout)
144          parsable = parse(xmlout)          parsable = parse(xmlout)
145          assert (isinstance (parsable, ParameterSet))          assert (isinstance (parsable, ParameterSet))
146          assert (self._dom().getElementsByTagName("ParameterSet"))          assert (self._dom(self.p).getElementsByTagName("ParameterSet"))
147    
148      def testParameterSetFromXML(self):      def testParameterSetFromXML(self):
149          doc = self._class()          doc = self._class(self.p)
150          pset = ParameterSet.fromDom(self._dom().getElementsByTagName("ParameterSet")[0])          pset = ParameterSet.fromDom(self._dom(self.p).getElementsByTagName("ParameterSet")[0])
151          assert (isinstance(pset, ParameterSet))          assert (isinstance(pset, ParameterSet))
152          assert (isinstance(doc, ParameterSet))          assert (isinstance(doc, ParameterSet))
153          self.assertEqual(self.p.gamma1,doc.gamma1)          self.assertEqual(self.p.gamma1,doc.gamma1)
# Line 152  class ParamaterSetTestCase(unittest.Test Line 157  class ParamaterSetTestCase(unittest.Test
157          p2 = ParameterSet()          p2 = ParameterSet()
158          p2.declareParameter(s="abc", f=3.)          p2.declareParameter(s="abc", f=3.)
159          self.p.declareParameter(child=p2)          self.p.declareParameter(child=p2)
160          doc = self._class()          doc = self._class(self.p)
161          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])          #pset = ParameterSet.fromDom(doc.getElementsByTagName("ParameterSet")[0])
162          self.assertEqual(self.p.child.f, doc.child.f)          self.assertEqual(self.p.child.f, doc.child.f)
163    
# Line 163  class ParamaterSetTestCase(unittest.Test Line 168  class ParamaterSetTestCase(unittest.Test
168          self.assertEqual(self.p.child.s, "abc")          self.assertEqual(self.p.child.s, "abc")
169          self.assertEqual(self.p.child.f, 3.)          self.assertEqual(self.p.child.f, 3.)
170    
171      def _dom(self):      def _dom(self, input):
172          s = StringIO()          s = StringIO()
173          self.p.writeXML(s)          input.writeXML(s)
174          s.reset()          s.reset()
175          xmlout = s.read()          xmlout = s.read()
176          doc = minidom.parseString(xmlout)          doc = minidom.parseString(xmlout)
177          return doc          return doc
178    
179      def _class(self):      def _class(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 = parse(xmlout)          doc = parse(xmlout)
185          return doc          return doc
186    
187        def testFromDomInt(self):
188            p3 = ParameterSet()
189            p3.declareParameter(inttest=1)
190            doc = self._class(p3)
191            assert type(doc.inttest)==int
192    
193        def testFromDomNumarrayVector(self):
194            import numarray
195            p3 = ParameterSet()
196            mynumarray = numarray.array([3., 4., 5.], type=numarray.Float64)
197            p3.declareParameter(numtest=mynumarray)
198            doc = self._class(p3)
199            assert doc.numtest.type() == numarray.Float64
200            assert type(doc.numtest) == numarray.NumArray
201    
202        def testFromDomNumarrayMulti(self):
203            import numarray
204            p3 = ParameterSet()
205            mynumarray = numarray.array([[1., 2., 3.], [3., 4., 5.]], type=numarray.Float64)
206            p3.declareParameter(numtest=mynumarray)
207            doc = self._class(p3)
208            assert doc.numtest.type() == numarray.Float64
209            assert type(doc.numtest) == numarray.NumArray
210    
211        def testLists(self):
212            p4 = ParameterSet()
213            mylist = [True, False, False, True]
214            p4.declareParameter(listest=mylist)
215            doc = self._class(p4)
216            assert type(doc.listest) == list
217            self.assertEquals(mylist, doc.listest)
218            assert type(doc.listest[0]) == bool
219            
220        def testDatasource(self):
221            p5 = ParameterSet()
222            myURI = DataSource("somelocalfile.txt", "text")
223            p5.declareParameter(uritest=myURI)
224            doc = self._class(p5)
225            self.assertEquals(myURI.uri, doc.uritest.uri)
226            self.assertEquals(myURI.fileformat, doc.uritest.fileformat)
227            assert type(doc.uritest) == DataSource
228            
229    
230          
231  class ModeltoDomTestCase(unittest.TestCase):  class ModeltoDomTestCase(unittest.TestCase):
232            
233      def _class(self):      def _class(self):
# Line 210  class ModeltoDomTestCase(unittest.TestCa Line 259  class ModeltoDomTestCase(unittest.TestCa
259            
260      def testModelhasID(self):      def testModelhasID(self):
261          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99          assert int(self._dom().getElementsByTagName("Model")[0].getAttribute("id"))>99
262    
263    class ModeltoDomTestCase(unittest.TestCase):
264        def _xml(self, modulename, modelname):
265            # returns a modelframe class, generated from the xml
266            return '''<?xml version="1.0" ?>
267    <ESys> <Simulation type="Simulation"> <Component rank="0">
268    
269        <Model id="127" module="%s" type="%s">
270    
271    <Parameter type="float"> <Name> a </Name> <Value> 0.9 </Value> </Parameter>
272    <Parameter type="Link"> <Name> f </Name> <Value> <Link> <Target> 128 </Target>
273    <Attribute> u </Attribute> </Link> </Value> </Parameter> <Parameter
274    type="float"> <Name> tend </Name> <Value>
275    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
276      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
277      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
278      <Value>
279    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
280      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model>
281      </Component> <Component rank="1"> <Model id="128" type="ODETEST"> <Parameter
282      type="float"> <Name> a </Name> <Value>
283    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
284      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
285      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
286    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
287      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
288      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
289      </Name> <Value>
290    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
291      current error = 1.904837e+01 </Value> </Parameter> </Model> </Component>
292      <Component rank="2"> <Model id="129" type="Messenger"> <Parameter
293      type="Link"> <Name> message </Name> <Value> <Link> <Target> 127 </Target>
294      <Attribute> message </Attribute> </Link> </Value> </Parameter> </Model>
295      </Component> </Simulation> <Model id="128" type="ODETEST"> <Parameter
296      type="float"> <Name> a </Name> <Value>
297    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
298      <Link> <Target> 127 </Target> <Attribute> u </Attribute> </Link> </Value>
299      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
300    1.0 </Value> </Parameter> <Parameter type="float"> <Name> u </Name> <Value>
301      -10.0 </Value> </Parameter> <Parameter type="float"> <Name> tol </Name>
302      <Value> 1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt
303      </Name> <Value>
304    0.1 </Value> </Parameter> <Parameter type="str"> <Name> message </Name> <Value>
305      current error = 1.904837e+01 </Value> </Parameter> </Model> <Model id="127"
306      type="ODETEST"> <Parameter type="float"> <Name> a </Name> <Value>
307    0.9 </Value> </Parameter> <Parameter type="Link"> <Name> f </Name> <Value>
308      <Link> <Target> 128 </Target> <Attribute> u </Attribute> </Link> </Value>
309      </Parameter> <Parameter type="float"> <Name> tend </Name> <Value>
310    1.0 </Value> </Parameter> <Parameter type="int"> <Name> u </Name> <Value> 10
311      </Value> </Parameter> <Parameter type="float"> <Name> tol </Name> <Value>
312      1e-08 </Value> </Parameter> <Parameter type="float"> <Name> dt </Name>
313      <Value>
314    0.01 </Value> </Parameter> <Parameter type="str"> <Name> message </Name>
315      <Value> current error = 9.516258e-01 </Value> </Parameter> </Model> <Model
316      id="127" 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> </ESys>
326    ''' % (modulename, modelname)
327    
328        def testModuleAttribute(self):
329            modeldoc = parse(self._xml('run_xml', 'ODETEST'))
330    
331        def testModuleAttributeFails(self):
332            try:
333                modeldoc = parse(self._xml('a', 'b'))
334            except ImportError:
335                return # correct
336    
337            assert False, "This test should have resulted in an ImportError"
338                    
339  class Messenger(Model):  class Messenger(Model):
340      def __init__(self, *args, **kwargs):      def __init__(self, *args, **kwargs):
# Line 283  class ODETEST(Model): Line 408  class ODETEST(Model):
408      def finalize(self):      def finalize(self):
409          return self.__tn>=self.tend          return self.__tn>=self.tend
410    
411    
412            
413  if __name__ == "__main__":  if __name__ == "__main__":
414              unittest.main()      unittest.main()
415    

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

  ViewVC Help
Powered by ViewVC 1.1.26