1# -*- coding: utf-8 -*-
2from __future__ import unicode_literals
3
4from datetime import date, datetime
5
6from parameterized import parameterized, param
7
8import dateparser
9from tests import BaseTestCase
10
11
12class TestParseFunction(BaseTestCase):
13    def setUp(self):
14        super(TestParseFunction, self).setUp()
15        self.result = NotImplemented
16
17    @parameterized.expand([
18        param(date_string="24 de Janeiro de 2014", expected_date=date(2014, 1, 24)),
19        param(date_string="2 de Enero de 2013", expected_date=date(2013, 1, 2)),
20        param(date_string="January 25, 2014", expected_date=date(2014, 1, 25)),
21    ])
22    def test_parse_dates_in_different_languages(self, date_string, expected_date):
23        self.when_date_is_parsed(date_string)
24        self.then_parsed_date_is(expected_date)
25
26    @parameterized.expand([
27        param(date_string="24 de Janeiro de 2014", languages=['pt'], expected_date=date(2014, 1, 24)),
28    ])
29    def test_dates_which_match_languages_are_parsed(self, date_string, languages, expected_date):
30        self.when_date_is_parsed(date_string, languages=languages)
31        self.then_parsed_date_is(expected_date)
32
33    @parameterized.expand([
34        param(date_string="January 24, 2014", languages=['pt']),
35    ])
36    def test_dates_which_do_not_match_languages_are_not_parsed(self, date_string, languages):
37        self.when_date_is_parsed(date_string, languages=languages)
38        self.then_date_was_not_parsed()
39
40    @parameterized.expand([
41        param(date_string="24 de Janeiro de 2014", locales=['pt-TL'], expected_date=date(2014, 1, 24)),
42    ])
43    def test_dates_which_match_locales_are_parsed(self, date_string, locales, expected_date):
44        self.when_date_is_parsed(date_string, locales=locales)
45        self.then_parsed_date_is(expected_date)
46
47    @parameterized.expand([
48        param(date_string="January 24, 2014", locales=['pt-AO']),
49    ])
50    def test_dates_which_do_not_match_locales_are_not_parsed(self, date_string, locales):
51        self.when_date_is_parsed(date_string, locales=locales)
52        self.then_date_was_not_parsed()
53
54    def when_date_is_parsed(self, date_string, languages=None, locales=None):
55        self.result = dateparser.parse(date_string, languages=languages, locales=locales)
56
57    def then_parsed_date_is(self, expected_date):
58        self.assertEquals(self.result, datetime.combine(expected_date, datetime.min.time()))
59
60    def then_date_was_not_parsed(self):
61        self.assertIsNone(self.result)
62