Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c528f50

Browse filesBrowse files
committed
Merge pull request PyMySQL#41 from tiwilliam/test-times
Add tests for times module
2 parents 641a2eb + 7397b0e commit c528f50
Copy full SHA for c528f50

File tree

Expand file treeCollapse file tree

4 files changed

+126
-4
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+126
-4
lines changed

‎.gitignore

Copy file name to clipboardExpand all lines: .gitignore
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
build/
1212
dist/
1313
MySQLdb/release.py
14+
.coverage

‎MySQLdb/times.py

Copy file name to clipboardExpand all lines: MySQLdb/times.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def DateTime_or_None(s):
6464
ms = 0
6565
return datetime(*[ int(x) for x in d.split('-')+t.split(':')+[ms] ])
6666
except (SystemExit, KeyboardInterrupt):
67-
raise
67+
raise # pragma: no cover
6868
except:
6969
return Date_or_None(s)
7070

@@ -129,6 +129,6 @@ def mysql_timestamp_converter(s):
129129
try:
130130
return Timestamp(*parts)
131131
except (SystemExit, KeyboardInterrupt):
132-
raise
132+
raise # pragma: no cover
133133
except:
134134
return None

‎tests/test_MySQLdb_times.py

Copy file name to clipboard
+118Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import mock
2+
import unittest
3+
from time import gmtime
4+
from datetime import time, date, datetime, timedelta
5+
6+
from MySQLdb import times
7+
8+
import warnings
9+
warnings.simplefilter("ignore")
10+
11+
12+
class TestX_or_None(unittest.TestCase):
13+
def test_date_or_none(self):
14+
assert times.Date_or_None('1969-01-01') == date(1969, 1, 1)
15+
assert times.Date_or_None('2015-01-01') == date(2015, 1, 1)
16+
assert times.Date_or_None('2015-12-13') == date(2015, 12, 13)
17+
18+
assert times.Date_or_None('') is None
19+
assert times.Date_or_None('fail') is None
20+
assert times.Date_or_None('2015-12') is None
21+
assert times.Date_or_None('2015-12-40') is None
22+
23+
def test_time_or_none(self):
24+
assert times.Time_or_None('00:00:00') == time(0, 0)
25+
assert times.Time_or_None('01:02:03') == time(1, 2, 3)
26+
assert times.Time_or_None('01:02:03.123456') == time(1, 2, 3, 123456)
27+
28+
assert times.Time_or_None('') is None
29+
assert times.Time_or_None('fail') is None
30+
assert times.Time_or_None('24:00:00') is None
31+
assert times.Time_or_None('01:02:03.123456789') is None
32+
33+
def test_datetime_or_none(self):
34+
assert times.DateTime_or_None('1000-01-01') == date(1000, 1, 1)
35+
assert times.DateTime_or_None('2015-12-13') == date(2015, 12, 13)
36+
assert times.DateTime_or_None('2015-12-13 01:02') == datetime(2015, 12, 13, 1, 2)
37+
assert times.DateTime_or_None('2015-12-13T01:02') == datetime(2015, 12, 13, 1, 2)
38+
assert times.DateTime_or_None('2015-12-13 01:02:03') == datetime(2015, 12, 13, 1, 2, 3)
39+
assert times.DateTime_or_None('2015-12-13T01:02:03') == datetime(2015, 12, 13, 1, 2, 3)
40+
assert times.DateTime_or_None('2015-12-13 01:02:03.123') == datetime(2015, 12, 13, 1, 2, 3, 123000)
41+
assert times.DateTime_or_None('2015-12-13 01:02:03.000123') == datetime(2015, 12, 13, 1, 2, 3, 123)
42+
assert times.DateTime_or_None('2015-12-13 01:02:03.123456') == datetime(2015, 12, 13, 1, 2, 3, 123456)
43+
assert times.DateTime_or_None('2015-12-13T01:02:03.123456') == datetime(2015, 12, 13, 1, 2, 3, 123456)
44+
45+
assert times.DateTime_or_None('') is None
46+
assert times.DateTime_or_None('fail') is None
47+
assert times.DateTime_or_None('2015-12-13T01:02:03.123456789') is None
48+
49+
def test_timedelta_or_none(self):
50+
assert times.TimeDelta_or_None('-1:0:0') == timedelta(0, -3600)
51+
assert times.TimeDelta_or_None('1:0:0') == timedelta(0, 3600)
52+
assert times.TimeDelta_or_None('12:55:30') == timedelta(0, 46530)
53+
assert times.TimeDelta_or_None('12:55:30.123456') == timedelta(0, 46530, 123456)
54+
assert times.TimeDelta_or_None('12:55:30.123456789') == timedelta(0, 46653, 456789)
55+
assert times.TimeDelta_or_None('12:55:30.123456789123456') == timedelta(1429, 37719, 123456)
56+
57+
assert times.TimeDelta_or_None('') is None
58+
assert times.TimeDelta_or_None('0') is None
59+
assert times.TimeDelta_or_None('fail') is None
60+
61+
62+
class TestTicks(unittest.TestCase):
63+
@mock.patch('MySQLdb.times.localtime', side_effect=gmtime)
64+
def test_date_from_ticks(self, mock):
65+
assert times.DateFromTicks(0) == date(1970, 1, 1)
66+
assert times.DateFromTicks(1430000000) == date(2015, 4, 25)
67+
68+
@mock.patch('MySQLdb.times.localtime', side_effect=gmtime)
69+
def test_time_from_ticks(self, mock):
70+
assert times.TimeFromTicks(0) == time(0, 0, 0)
71+
assert times.TimeFromTicks(1431100000) == time(15, 46, 40)
72+
assert times.TimeFromTicks(1431100000.123) == time(15, 46, 40)
73+
74+
@mock.patch('MySQLdb.times.localtime', side_effect=gmtime)
75+
def test_timestamp_from_ticks(self, mock):
76+
assert times.TimestampFromTicks(0) == datetime(1970, 1, 1, 0, 0, 0)
77+
assert times.TimestampFromTicks(1430000000) == datetime(2015, 4, 25, 22, 13, 20)
78+
assert times.TimestampFromTicks(1430000000.123) == datetime(2015, 4, 25, 22, 13, 20)
79+
80+
81+
class TestTimestampConverter(unittest.TestCase):
82+
def test_mysql_timestamp_converter(self):
83+
assert times.mysql_timestamp_converter('2015-12-13') == date(2015, 12, 13)
84+
assert times.mysql_timestamp_converter('2038-01-19 03:14:07') == datetime(2038, 1, 19, 3, 14, 7)
85+
86+
assert times.mysql_timestamp_converter('2015121310') == datetime(2015, 12, 13, 10, 0)
87+
assert times.mysql_timestamp_converter('20151213101112') == datetime(2015, 12, 13, 10, 11, 12)
88+
89+
assert times.mysql_timestamp_converter('20151313') is None
90+
assert times.mysql_timestamp_converter('2015-13-13') is None
91+
92+
93+
class TestToLiteral(unittest.TestCase):
94+
def test_datetime_to_literal(self):
95+
assert times.DateTime2literal(datetime(2015, 12, 13), '') == b"'2015-12-13 00:00:00'"
96+
assert times.DateTime2literal(datetime(2015, 12, 13, 11, 12, 13), '') == b"'2015-12-13 11:12:13'"
97+
assert times.DateTime2literal(datetime(2015, 12, 13, 11, 12, 13, 123456), '') == b"'2015-12-13 11:12:13.123456'"
98+
99+
def test_datetimedelta_to_literal(self):
100+
d = datetime(2015, 12, 13, 1, 2, 3) - datetime(2015, 12, 13, 1, 2, 2)
101+
assert times.DateTimeDelta2literal(d, '') == b"'0 0:0:1'"
102+
103+
104+
class TestFormat(unittest.TestCase):
105+
def test_format_timedelta(self):
106+
d = datetime(2015, 1, 1) - datetime(2015, 1, 1)
107+
assert times.format_TIMEDELTA(d) == '0 0:0:0'
108+
109+
d = datetime(2015, 1, 1, 10, 11, 12) - datetime(2015, 1, 1, 8, 9, 10)
110+
assert times.format_TIMEDELTA(d) == '0 2:2:2'
111+
112+
d = datetime(2015, 1, 1, 10, 11, 12) - datetime(2015, 1, 1, 11, 12, 13)
113+
assert times.format_TIMEDELTA(d) == '-1 22:58:59'
114+
115+
def test_format_timestamp(self):
116+
assert times.format_TIMESTAMP(datetime(2015, 2, 3)) == '2015-02-03 00:00:00'
117+
assert times.format_TIMESTAMP(datetime(2015, 2, 3, 17, 18, 19)) == '2015-02-03 17:18:19'
118+
assert times.format_TIMESTAMP(datetime(15, 2, 3, 17, 18, 19)) == '0015-02-03 17:18:19'

‎tox.ini

Copy file name to clipboardExpand all lines: tox.ini
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ envlist = py26, py27, pypy, py33, py34
33

44
[testenv]
55
commands =
6-
nosetests {posargs:-w tests -v}
6+
py.test --cov {envsitepackagesdir}/MySQLdb
77
deps =
8-
nose
8+
mock
9+
coverage==3.7.1
10+
pytest
11+
pytest-cov

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.