test_dumper.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import unittest
  2. import sys
  3. import odml
  4. try:
  5. from StringIO import StringIO
  6. except ImportError:
  7. from io import StringIO
  8. class TestTypes(unittest.TestCase):
  9. def setUp(self):
  10. # Capture the output printed by the functions to STDOUT, and use it for
  11. # testing purposes.
  12. self.captured_stdout = StringIO()
  13. sys.stdout = self.captured_stdout
  14. self.doc = odml.Document(author='Rave', version='1.0')
  15. s1 = odml.Section(name='Cell')
  16. p1 = odml.Property(name='Type', values='Rechargeable')
  17. s1.append(p1)
  18. s2 = odml.Section(name='Electrolyte')
  19. p2 = odml.Property(name='Composition', values='Ni-Cd')
  20. s2.append(p2)
  21. s1.append(s2)
  22. s3 = odml.Section(name='Electrode')
  23. p3 = odml.Property(name='Material', values='Nickel')
  24. p4 = odml.Property(name='Models', values=['AA', 'AAA'])
  25. s3.append(p3)
  26. s3.append(p4)
  27. s2.append(s3)
  28. self.doc.append(s1)
  29. def test_dump_doc(self):
  30. # This test dumps the whole document and checks it word by word.
  31. # If possible, maybe some better way of testing this ?
  32. odml.tools.dumper.dumpDoc(self.doc)
  33. output = [x.strip() for x in self.captured_stdout.getvalue().split('\n') if x]
  34. expected_output = []
  35. expected_output.append("*Cell ()")
  36. expected_output.append(":Type (values=Rechargeable, dtype='string')")
  37. expected_output.append("*Electrolyte ()")
  38. expected_output.append(":Composition (values=Ni-Cd, dtype='string')")
  39. expected_output.append("*Electrode ()")
  40. expected_output.append(":Material (values=Nickel, dtype='string')")
  41. expected_output.append(":Models (values=[AA,AAA], dtype='string')")
  42. self.assertEqual(len(output), len(expected_output))
  43. for i in range(len(output)):
  44. self.assertEqual(output[i], expected_output[i])
  45. # Discard the document output from stdout stream
  46. self.captured_stdout.seek(0)
  47. self.captured_stdout.truncate(0)