00001
00002 import unittest, sys, tests_good, tests_bad, time
00003 from ZSI import *
00004 try:
00005 import cStringIO as StringIO
00006 except ImportError:
00007 import StringIO
00008
00009
00010 class TestCase(unittest.TestCase):
00011 '''Examples from "Definitive XML Schema, Priscilla Walmsley, p237-246
00012 '''
00013 def check_dateTime_local_offset(self):
00014
00015
00016 typecode = TC.gDateTime()
00017 off_hour = time.altzone/60/60
00018 off_min = time.altzone%60
00019 stamp_offset = '1968-04-02T13:20:00+%02d:%02d' %(off_hour,off_min)
00020 data = typecode.text_to_data(stamp_offset, None, None)
00021 stamp = typecode.get_formatted_content(data)
00022
00023 correct = "1968-04-01T22:20:00Z"
00024 self.failUnless(stamp == correct,
00025 'dateTime with local offset(%s), expecting "%s" got "%s"' %(
00026 stamp_offset, correct, stamp))
00027
00028 def check_valid_dateTime(self):
00029 typecode = TC.gDateTime()
00030 for i in ('1968-04-02T13:20:00', '1968-04-02T13:20:15.5',
00031 '1968-04-02T13:20:00-05:00', '1968-04-02T13:20:00Z'):
00032 data = typecode.text_to_data(i, None, None)
00033 text = typecode.get_formatted_content(data)
00034
00035 def check_parse_microseconds(self):
00036 good = (1968, 4, 2, 13, 20, 15, 511, 0, 0)
00037 typecode = TC.gDateTime()
00038 data = typecode.text_to_data('1968-04-02T13:20:15.511', None, None)
00039 self.failUnless(data == good,
00040 'did not parse something %s, not equal %s' %(data,good))
00041
00042 def check_serialize_microseconds(self):
00043 dateTime = '1968-04-02T13:20:15.511Z'
00044 typecode = TC.gDateTime()
00045 text = typecode.get_formatted_content((1968, 4, 2, 13, 20, 15, 511, 0, 0))
00046 self.failUnless(text == dateTime,
00047 'did not serialze correctly %s, not equal %s' %(text, dateTime))
00048
00049 def check_serialize_microseconds_1000(self):
00050 bad = (1968, 4, 2, 13, 20, 15, 1000, 0)
00051 typecode = TC.gDateTime()
00052 self.failUnlessRaises(ValueError, typecode.get_formatted_content, bad)
00053
00054 def check_serialize_microseconds_lessZero(self):
00055 '''ignore negative microseconds
00056 '''
00057 bad = (1968, 4, 2, 13, 20, 15, -1, 0)
00058 typecode = TC.gDateTime()
00059 text = typecode.get_formatted_content(bad)
00060 typecode.get_formatted_content(bad)
00061
00062 def check_parse_microseconds2(self):
00063 good = (1968, 4, 2, 13, 20, 15, 500, 0, 0)
00064 typecode = TC.gDateTime()
00065 data = typecode.text_to_data('1968-04-02T13:20:15.5Z', None,None)
00066 self.failUnless(data == good,
00067 'did not serialze correctly %s, not equal %s' %(data, good))
00068
00069
00070
00071
00072
00073 def check_invalid_dateTime(self):
00074 typecode = TC.gDateTime()
00075
00076 def check_valid_time(self):
00077 typecode = TC.gTime()
00078 for i in ('13:20:00', '13:20:30.5555', '13:20:00Z'):
00079 data = typecode.text_to_data(i, None, None)
00080 text = typecode.get_formatted_content(data)
00081
00082 def broke_valid_time(self):
00083 typecode = TC.gTime()
00084 data = typecode.text_to_data('13:20:00-05:00', None, None)
00085
00086 def check_invalid_time(self):
00087 typecode = TC.gTime()
00088 for i in ('5:20:00', '13:20.5:00',):
00089 self.failUnlessRaises(Exception, typecode.text_to_data, i, None, None),
00090
00091 def broke_invalid_time_no_seconds(self):
00092 typecode = TC.gTime()
00093 i = '13:20:'
00094 self.failUnlessRaises(Exception, typecode.text_to_data, i, None, None)
00095
00096 def broke_invalid_time_bad_timeofday(self):
00097 typecode = TC.gTime()
00098 i = '13:65:00'
00099 self.failUnlessRaises(Exception, typecode.text_to_data, i, None, None)
00100
00101 def check_valid_date(self):
00102 typecode = TC.gDate()
00103 for i in ('1968-04-02', '-0045-01-01', '11968-04-02', '1968-04-02+05:00', '1968-04-02Z'):
00104 data = typecode.text_to_data(i, None, None)
00105 text = typecode.get_formatted_content(data)
00106
00107 def check_invalid_date(self):
00108 typecode = TC.gDate()
00109 for i in ('68-04-02', '1968-4-2', '1968/04/02', '04-02-1968',):
00110 self.failUnlessRaises(Exception, typecode.text_to_data, i, None, None),
00111
00112 def broke_invalid_date_april31(self):
00113
00114 typecode = TC.gDate()
00115 self.failUnlessRaises(Exception, typecode.text_to_data, '1968-04-31', None, None),
00116
00117
00118
00119
00120 _SEP = '_'
00121 for t in [i[0].split(_SEP) for i in filter(lambda i: callable(i[1]), TestCase.__dict__.items())]:
00122 test = ''
00123 for f in t:
00124 test += f
00125 if globals().has_key(test): test += _SEP; continue
00126 def _closure():
00127 name = test
00128 def _makeTestSuite():
00129 suite = unittest.TestSuite()
00130 suite.addTest(unittest.makeSuite(TestCase, name))
00131 return suite
00132 return _makeTestSuite
00133
00134 globals()[test] = _closure()
00135 test += _SEP
00136
00137
00138 makeTestSuite = check
00139 def main():
00140 unittest.main(defaultTest="makeTestSuite")
00141 if __name__ == "__main__" : main()
00142
00143