Skip to content

Commit 143950d

Browse files
committed
dates: Add more tests for interval formatting
1 parent 569ad84 commit 143950d

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

babel/dates.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,10 @@ def format_skeleton(skeleton, datetime=None, tzinfo=None, fuzzy=True, locale=LC_
756756
u'Sun, Apr 1'
757757
>>> format_skeleton('yMMd', t, locale='fi') # yMMd is not in the Finnish locale; yMd gets used
758758
u'1.4.2007'
759-
759+
>>> format_skeleton('yMMd', t, fuzzy=False, locale='fi') # yMMd is not in the Finnish locale, an error is thrown
760+
Traceback (most recent call last):
761+
...
762+
KeyError: yMMd
760763
761764
After the skeleton is resolved to a pattern `format_datetime` is called so
762765
all timezone processing etc is the same as for that.
@@ -928,6 +931,11 @@ def format_interval(start, end, skeleton=None, tzinfo=None, fuzzy=True, locale=L
928931
>>> format_interval(time(16, 18), time(16, 24), "Hm", locale="it")
929932
'16:18\u201316:24'
930933
934+
If the start instant equals the end instant, the interval is formatted like the instant.
935+
936+
>>> format_interval(time(16, 18), time(16, 18), "Hm", locale="it")
937+
'16:18'
938+
931939
Unknown skeletons fall back to "default" formatting.
932940
933941
>>> format_interval(time(16, 18), time(16, 24), "xxx", locale="ja")
@@ -1483,6 +1491,14 @@ def split_interval_pattern(pattern):
14831491
[u'E d.M. \u2013 ', 'E d.M.']
14841492
>>> split_interval_pattern("Y 'text' Y 'more text'")
14851493
["Y 'text '", "Y 'more text'"]
1494+
>>> split_interval_pattern(u"E, MMM d \u2013 E")
1495+
[u'E, MMM d \u2013 ', u'E']
1496+
>>> split_interval_pattern("MMM d")
1497+
['MMM d']
1498+
>>> split_interval_pattern("y G")
1499+
['y G']
1500+
>>> split_interval_pattern(u"MMM d \u2013 d")
1501+
[u'MMM d \u2013 ', u'd']
14861502
14871503
:param pattern: Interval pattern string
14881504
:return: list of "subpatterns"
@@ -1516,6 +1532,9 @@ def match_skeleton(skeleton, options, allow_different_fields=False):
15161532
15171533
>>> match_skeleton('yMMd', ('qyMMd',), allow_different_fields=False)
15181534
1535+
>>> match_skeleton('hmz', ('hmv',))
1536+
'hmv'
1537+
15191538
:param skeleton: The skeleton to match
15201539
:type skeleton: str
15211540
:param options: An iterable of other skeletons to match against

tests/test_date_intervals.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
import datetime
5+
6+
from babel import dates
7+
from babel.dates import get_timezone
8+
from babel.util import UTC
9+
10+
TEST_DT = datetime.datetime(2016, 1, 8, 11, 46, 15)
11+
TEST_TIME = TEST_DT.time()
12+
TEST_DATE = TEST_DT.date()
13+
14+
15+
def test_format_interval_same_instant_1():
16+
assert dates.format_interval(TEST_DT, TEST_DT, "yMMMd", fuzzy=False, locale="fi") == "8. tammikuuta 2016"
17+
18+
19+
def test_format_interval_same_instant_2():
20+
assert dates.format_interval(TEST_DT, TEST_DT, "xxx", fuzzy=False, locale="fi") == "8.1.2016 klo 11.46.15"
21+
22+
23+
def test_format_interval_same_instant_3():
24+
assert dates.format_interval(TEST_TIME, TEST_TIME, "xxx", fuzzy=False, locale="fi") == "11.46.15"
25+
26+
27+
def test_format_interval_same_instant_4():
28+
assert dates.format_interval(TEST_DATE, TEST_DATE, "xxx", fuzzy=False, locale="fi") == "8.1.2016"
29+
30+
31+
def test_format_interval_invalid_skeleton():
32+
t1 = TEST_DATE
33+
t2 = TEST_DATE + datetime.timedelta(days=1)
34+
assert dates.format_interval(t1, t2, "mumumu", fuzzy=False, locale="fi") == u"8.1.2016\u20139.1.2016"
35+
assert dates.format_interval(t1, t2, fuzzy=False, locale="fi") == u"8.1.2016\u20139.1.2016"
36+
37+
38+
def test_format_interval_no_difference():
39+
t1 = TEST_DT
40+
t2 = t1 + datetime.timedelta(minutes=8)
41+
assert dates.format_interval(t1, t2, "yMd", fuzzy=False, locale="fi") == "8.1.2016"
42+
43+
44+
def test_format_interval_in_tz():
45+
t1 = TEST_DT.replace(tzinfo=UTC)
46+
t2 = t1 + datetime.timedelta(minutes=18)
47+
hki_tz = get_timezone("Europe/Helsinki")
48+
assert dates.format_interval(t1, t2, "Hmv", tzinfo=hki_tz, locale="fi") == "13.46\u201314.04 aikavyöhyke: Suomi"
49+
50+
51+
def test_format_interval_12_hour():
52+
t2 = TEST_DT
53+
t1 = t2 - datetime.timedelta(hours=1)
54+
assert dates.format_interval(t1, t2, "hm", locale="en") == "10:46 \u2013 11:46 AM"

0 commit comments

Comments
 (0)