import unittest, string from simpleparse.parser import Parser from simpleparse.common import iso_date, iso_date_loose from mx import DateTime import time fulltrans = string.maketrans("","") tzOffset = DateTime.DateTimeDelta( 0,0,0, time.timezone ) class CommonTests(unittest.TestCase): def testISODateLoose( self ): """Test the parsing of ISO date and time formats""" values = [ ("2002-02-03", DateTime.DateTime( 2002, 2,3)), ("2002-02",DateTime.DateTime( 2002, 2)), ("2002",DateTime.DateTime( 2002)), ("2002-02-03 04:15", DateTime.DateTime( 2002, 2,3, 4,15)), ("2002-02-03 04:15:16", DateTime.DateTime( 2002, 2,3, 4,15, 16)), ("2002-02-03 04:15:16 +00:00", DateTime.DateTime( 2002, 2,3, 4,15, 16)-tzOffset), ("2002-02-03 4:5", DateTime.DateTime( 2002, 2,3, 4,5)), ("2002-02-03 4:5:16", DateTime.DateTime( 2002, 2,3, 4,5, 16)), ("2002-02-03 4:5:16 +00:00", DateTime.DateTime( 2002, 2,3, 4, 5,16)-tzOffset), ] p = Parser ("d:= ISO_date_time_loose", "d") proc = iso_date_loose.MxInterpreter() for string, date in values: success, children, next = p.parse( string, processor = proc) assert success, """Unable to parse any of the string %s with the ISO date-time parser"""% (string) assert next == len(string),"""Did not finish parsing string %s with the ISO date-time parser, remainder was %s, found was %s"""%( string, string [next:],children) assert children [0] == date,"""Returned different date for string %s than expected, got %s, expected %s"""% (string,children [0], date) def testISODate( self ): """Test the parsing of ISO date and time formats""" values = [ ("2002-02-03", DateTime.DateTime( 2002, 2,3)), ("2002-02",DateTime.DateTime( 2002, 2)), ("2002",DateTime.DateTime( 2002)), ("2002-02-03T04:15", DateTime.DateTime( 2002, 2,3, 4,15)), ("2002-02-03T04:15:16", DateTime.DateTime( 2002, 2,3, 4,15, 16)), ("2002-02-03T04:15:16+00:00", DateTime.DateTime( 2002, 2,3, 4,15, 16)-tzOffset), ] p = Parser ("d:= ISO_date_time", "d") proc = iso_date.MxInterpreter() for string, date in values: success, children, next = p.parse( string, processor=proc) assert success, """Unable to parse any of the string %s with the ISO date-time parser"""% (string) assert next == len(string),"""Did not finish parsing string %s with the ISO date-time parser, remainder was %s, found was %s"""%( string, string [next:],children) assert children [0] == date,"""Returned different date for string %s than expected, got %s, expected %s"""% (string,children [0], date) def testProductionsStrict( self ): for string, production in [ ("2002", "year"), ("02", "month"), ("02", "day"), ("24:00:00", "ISO_time"), ("02", "ISO_time"), (":", "time_separator"), ("02:02", "ISO_time"), ("02:02:02", "ISO_time"), ("2002-02-30", "ISO_date"), ("2002-02-30", "ISO_date_time"), ("02", "hour"), ("02", "minute"), ("02", "second"), ("20", "second"), ("+0500", "offset"), ("+00:00", "offset"), ("-", "offset_sign"), ("-00:00", "offset"), ("-04:00", "offset"), ("-0500", "offset"), ("02:13", "ISO_time"), ("02:13:16", "ISO_time"), ("2002-02-01T02:13-0500", "ISO_date_time"), ]: success, children, next = iso_date._p.parse( string,production) assert next == len(string), "couldn't parse %s as a %s"%( string, production) def testProductions2( self ): for string, production in [ ("2002", "year"), ("02", "month"), ("02", "day"), ("24:00:00", "ISO_time_loose"), ("02", "ISO_time_loose"), (":", "time_separator"), ("02:02", "ISO_time_loose"), ("02:02:02", "ISO_time_loose"), ("2002-02-30", "ISO_date_loose"), ("2002-02-30", "ISO_date_time_loose"), ("2002-2-1", "ISO_date_time_loose"), ("02", "hour"), ("02", "minute"), ("2", "second"), ("02", "second"), ("20", "second"), ("20.", "second"), ("20.3", "second"), ("+0500", "offset"), ("+00:00", "offset"), ("-", "offset_sign"), ("-00:00", "offset"), ("-04:00", "offset"), ("-0500", "offset"), ("02:13", "ISO_time_loose"), ("02:13:16", "ISO_time_loose"), ("2002-2-1 2:13", "ISO_date_time_loose"), ("2002-2-1 2:13 -0500", "ISO_date_time_loose"), ("2002-2-1 2:13 -05:30", "ISO_date_time_loose"), ("2002-2-1 2:13 +05:30", "ISO_date_time_loose"), ("2002-2-1 2:13 +00:00", "ISO_date_time_loose"), ]: success, children, next = iso_date_loose._p.parse( string,production ) assert next == len(string), "couldn't parse %s as a %s"%( string, production) def getSuite(): return unittest.makeSuite(CommonTests, 'test') if __name__ == "__main__": unittest.main(defaultTest="getSuite")