Skip to content

Commit

Permalink
split massive test_parse.py into submodules
Browse files Browse the repository at this point in the history
  • Loading branch information
wimglenn committed Nov 25, 2023
1 parent cd0c3c2 commit 643c685
Show file tree
Hide file tree
Showing 8 changed files with 1,254 additions and 1,187 deletions.
15 changes: 8 additions & 7 deletions parse.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
from __future__ import absolute_import

__version__ = "1.20.0"

# yes, I now have two problems
import logging
import re
import sys
from datetime import datetime, time, tzinfo, timedelta
from datetime import datetime
from datetime import time
from datetime import timedelta
from datetime import tzinfo
from decimal import Decimal
from functools import partial
import logging

__all__ = "parse search findall with_pattern".split()

__version__ = "1.20.0"
__all__ = ["parse", "search", "findall", "with_pattern"]

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -272,7 +274,6 @@ def date_convert(


def strf_date_convert(x, _, type):

is_date = any("%" + x in type for x in "aAwdbBmyYjUW")
is_time = any("%" + x in type for x in "HIpMSfz")

Expand Down
103 changes: 103 additions & 0 deletions tests/test_bugs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,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 = dict(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 == dict(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"
26 changes: 26 additions & 0 deletions tests/test_findall.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import parse


def test_findall():
s = "".join(
r.fixed[0] for r in parse.findall(">{}<", "<p>some <b>bold</b> text</p>")
)
assert s == "some bold text"


def test_no_evaluate_result():
s = "".join(
m.evaluate_result().fixed[0]
for m in parse.findall(
">{}<", "<p>some <b>bold</b> text</p>", evaluate_result=False
)
)
assert s == "some bold text"


def test_case_sensitivity():
l = [r.fixed[0] for r in parse.findall("x({})x", "X(hi)X")]
assert l == ["hi"]

l = [r.fixed[0] for r in parse.findall("x({})x", "X(hi)X", case_sensitive=True)]
assert l == []
Loading

0 comments on commit 643c685

Please sign in to comment.