1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
"""Tests for ClientCookie._HTTPDate."""
from __future__ import print_function
import re
import time
from unittest import TestCase
class DateTimeTests(TestCase):
def test_time2isoz(self):
from mechanize._util import time2isoz
base = 1019227000
day = 24 * 3600
assert time2isoz(base) == "2002-04-19 14:36:40Z"
assert time2isoz(base + day) == "2002-04-20 14:36:40Z"
assert time2isoz(base + 2 * day) == "2002-04-21 14:36:40Z"
assert time2isoz(base + 3 * day) == "2002-04-22 14:36:40Z"
az = time2isoz()
bz = time2isoz(500000)
for text in (az, bz):
assert re.search(r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", text), \
"bad time2isoz format: %s %s" % (az, bz)
def test_parse_date(self):
from mechanize._util import http2time
def parse_date(text, http2time=http2time):
return time.gmtime(http2time(text))[:6]
assert parse_date("01 Jan 2001") == (2001, 1, 1, 0, 0, 0.0)
# this test will break around year 2070
assert parse_date("03-Feb-20") == (2020, 2, 3, 0, 0, 0.0)
# this test will break around year 2048
assert parse_date("03-Feb-98") == (1998, 2, 3, 0, 0, 0.0)
def test_http2time_formats(self):
from mechanize._util import http2time, time2isoz
# test http2time for supported dates. Test cases with 2 digit year
# will probably break in year 2044.
tests = [
'Thu, 03 Feb 1994 00:00:00 GMT', # proposed new HTTP format
'Thursday, 03-Feb-94 00:00:00 GMT', # old rfc850 HTTP format
'Thursday, 03-Feb-1994 00:00:00 GMT', # broken rfc850 HTTP format
'03 Feb 1994 00:00:00 GMT', # HTTP format (no weekday)
'03-Feb-94 00:00:00 GMT', # old rfc850 (no weekday)
'03-Feb-1994 00:00:00 GMT', # broken rfc850 (no weekday)
'03-Feb-1994 00:00 GMT', # broken rfc850 (no weekday, no seconds)
# broken rfc850 (no weekday, no seconds, no tz)
'03-Feb-1994 00:00',
'03-Feb-94', # old rfc850 HTTP format (no weekday, no time)
'03-Feb-1994', # broken rfc850 HTTP format (no weekday, no time)
'03 Feb 1994', # proposed new HTTP format (no weekday, no time)
# A few tests with extra space at various places
' 03 Feb 1994 0:00 ',
' 03-Feb-1994 ',
]
test_t = 760233600 # assume broken POSIX counting of seconds
result = time2isoz(test_t)
expected = "1994-02-03 00:00:00Z"
assert result == expected, \
"%s => '%s' (%s)" % (test_t, result, expected)
for s in tests:
t = http2time(s)
t2 = http2time(s.lower())
t3 = http2time(s.upper())
assert t == t2 == t3 == test_t, \
"'%s' => %s, %s, %s (%s)" % (s, t, t2, t3, test_t)
def test_http2time_garbage(self):
from mechanize._util import http2time
for test in [
'', 'Garbage',
'Mandag 16. September 1996',
'01-00-1980',
'01-13-1980',
'00-01-1980',
'32-01-1980',
'01-01-1980 25:00:00',
'01-01-1980 00:61:00',
'01-01-1980 00:00:62']:
bad = False
if http2time(test) is not None:
print("http2time(%s) is not None" % (test,))
print("http2time(test)", http2time(test))
bad = True
assert not bad
if __name__ == "__main__":
import unittest
unittest.main()
|