infer_type.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import unittest
  2. import sys
  3. from datetime import datetime as dt, date, time
  4. from odml import Value, Property, Section, Document
  5. from odml.tools.xmlparser import XMLReader, XMLWriter
  6. class TestInferType(unittest.TestCase):
  7. def test_string(self):
  8. v = Value("somestring")
  9. assert(v.dtype == "string")
  10. assert(type(v.data) == str)
  11. def test_text(self):
  12. v = Value("some\nstring")
  13. assert(v.dtype == "text")
  14. assert(type(v.data) == str)
  15. def test_int(self):
  16. v = Value(111)
  17. assert(v.dtype == "int")
  18. assert(type(v.data) == int)
  19. def test_float(self):
  20. v = Value(3.14)
  21. assert(v.dtype == "float")
  22. assert(type(v.data) == float)
  23. def test_datetime(self):
  24. v = Value(dt.now())
  25. assert(v.dtype == "datetime")
  26. assert(type(v.data) == dt)
  27. def test_date(self):
  28. v = Value(dt.now().date())
  29. assert(v.dtype == "date")
  30. assert(type(v.data) == date)
  31. def test_time(self):
  32. v = Value(dt.now().time())
  33. assert(v.dtype == "time")
  34. assert(type(v.data) == time)
  35. def test_boolean(self):
  36. v = Value(True)
  37. assert(v.dtype == "boolean")
  38. assert(type(v.data) == bool)
  39. v = Value(False)
  40. assert(v.dtype == "boolean")
  41. assert(type(v.data) == bool)
  42. def test_read_write(self):
  43. doc = Document("author")
  44. sec = Section("name", "type")
  45. doc.append(sec)
  46. sec.append(Property("strprop", "somestring"))
  47. sec.append(Property("txtprop", "some\ntext"))
  48. sec.append(Property("intprop", 200))
  49. sec.append(Property("floatprop", 2.00))
  50. sec.append(Property("datetimeprop", dt.now()))
  51. sec.append(Property("dateprop", dt.now().date()))
  52. sec.append(Property("timeprop", dt.now().time()))
  53. sec.append(Property("boolprop", True))
  54. if sys.version_info < (3,0):
  55. str_doc = unicode(XMLWriter(doc))
  56. else:
  57. str_doc = str(XMLWriter(doc))
  58. new_doc = XMLReader().fromString(str_doc)
  59. new_sec = new_doc.sections[0]
  60. v = new_sec.properties["strprop"].value
  61. assert(v.dtype == "string")
  62. if sys.version_info < (3, 0):
  63. assert(type(v.data) == unicode)
  64. else:
  65. assert (type(v.data) == str)
  66. v = new_sec.properties["txtprop"].value
  67. assert(v.dtype == "text")
  68. if sys.version_info < (3,0):
  69. assert(type(v.data) == unicode)
  70. else:
  71. assert (type(v.data) == str)
  72. v = new_sec.properties["intprop"].value
  73. assert(v.dtype == "int")
  74. assert(type(v.data) == int)
  75. v = new_sec.properties["floatprop"].value
  76. assert(v.dtype == "float")
  77. assert(type(v.data) == float)
  78. v = new_sec.properties["datetimeprop"].value
  79. assert(v.dtype == "datetime")
  80. assert(type(v.data) == dt)
  81. v = new_sec.properties["dateprop"].value
  82. assert(v.dtype == "date")
  83. assert(type(v.data) == date)
  84. v = new_sec.properties["timeprop"].value
  85. assert(v.dtype == "time")
  86. assert(type(v.data) == time)
  87. v = new_sec.properties["boolprop"].value
  88. assert(v.dtype == "boolean")
  89. assert(type(v.data) == bool)
  90. if __name__ == '__main__':
  91. unittest.main()