forked from r1chardj0n3s/parse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_bugs.py
103 lines (75 loc) · 3 KB
/
test_bugs.py
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
import pickle
from datetime import datetime
import parse
def test_tz_compare_to_None():
utc = parse.FixedTzOffset(0, "UTC")
assert utc is not None
assert utc != "spam"
def test_named_date_issue7():
r = parse.parse("on {date:ti}", "on 2012-09-17")
assert r["date"] == datetime(2012, 9, 17, 0, 0, 0)
# fix introduced regressions
r = parse.parse("a {:ti} b", "a 1997-07-16T19:20 b")
assert r[0] == datetime(1997, 7, 16, 19, 20, 0)
r = parse.parse("a {:ti} b", "a 1997-07-16T19:20Z b")
utc = parse.FixedTzOffset(0, "UTC")
assert r[0] == datetime(1997, 7, 16, 19, 20, tzinfo=utc)
r = parse.parse("a {date:ti} b", "a 1997-07-16T19:20Z b")
assert r["date"] == datetime(1997, 7, 16, 19, 20, tzinfo=utc)
def test_dotted_type_conversion_pull_8():
# test pull request 8 which fixes type conversion related to dotted
# names being applied correctly
r = parse.parse("{a.b:d}", "1")
assert r["a.b"] == 1
r = parse.parse("{a_b:w} {a.b:d}", "1 2")
assert r["a_b"] == "1"
assert r["a.b"] == 2
def test_pm_overflow_issue16():
r = parse.parse("Meet at {:tg}", "Meet at 1/2/2011 12:45 PM")
assert r[0] == datetime(2011, 2, 1, 12, 45)
def test_pm_handling_issue57():
r = parse.parse("Meet at {:tg}", "Meet at 1/2/2011 12:15 PM")
assert r[0] == datetime(2011, 2, 1, 12, 15)
r = parse.parse("Meet at {:tg}", "Meet at 1/2/2011 12:15 AM")
assert r[0] == datetime(2011, 2, 1, 0, 15)
def test_user_type_with_group_count_issue60():
@parse.with_pattern(r"((\w+))", regex_group_count=2)
def parse_word_and_covert_to_uppercase(text):
return text.strip().upper()
@parse.with_pattern(r"\d+")
def parse_number(text):
return int(text)
# -- CASE: Use named (OK)
type_map = {"Name": parse_word_and_covert_to_uppercase, "Number": parse_number}
r = parse.parse(
"Hello {name:Name} {number:Number}", "Hello Alice 42", extra_types=type_map
)
assert r.named == {"name": "ALICE", "number": 42}
# -- CASE: Use unnamed/fixed (problematic)
r = parse.parse("Hello {:Name} {:Number}", "Hello Alice 42", extra_types=type_map)
assert r[0] == "ALICE"
assert r[1] == 42
def test_unmatched_brace_doesnt_match():
r = parse.parse("{who.txt", "hello")
assert r is None
def test_pickling_bug_110():
p = parse.compile("{a:d}")
# prior to the fix, this would raise an AttributeError
pickle.dumps(p)
def test_unused_centered_alignment_bug():
r = parse.parse("{:^2S}", "foo")
assert r[0] == "foo"
r = parse.search("{:^2S}", "foo")
assert r[0] == "foo"
# specifically test for the case in issue #118 as well
r = parse.parse("Column {:d}:{:^}", "Column 1: Timestep")
assert r[0] == 1
assert r[1] == "Timestep"
def test_unused_left_alignment_bug():
r = parse.parse("{:<2S}", "foo")
assert r[0] == "foo"
r = parse.search("{:<2S}", "foo")
assert r[0] == "foo"
def test_match_trailing_newline():
r = parse.parse("{}", "test\n")
assert r[0] == "test\n"