|
1
|
|
|
import re |
|
|
|
|
|
|
2
|
|
|
import unittest |
|
3
|
|
|
|
|
4
|
|
|
from foil.patterns import ( |
|
5
|
|
|
match_subgroup, match_group, add_regex_start_end, tokenize_group_pattern |
|
6
|
|
|
) |
|
7
|
|
|
|
|
8
|
|
|
|
|
9
|
|
|
class TestPatternMatch(unittest.TestCase): |
|
10
|
|
|
def test_match_subgroup(self): |
|
11
|
|
|
element1 = r'(?P<element1>[A-Z])' |
|
12
|
|
|
element2 = r'(?P<element2>[0-9])' |
|
13
|
|
|
pattern = re.compile(element1 + r'_' + element2) |
|
14
|
|
|
sequence = ['A_1', '1_Z', 'B_2', 'C_#'] |
|
15
|
|
|
|
|
16
|
|
|
expected = [ |
|
17
|
|
|
{'element1': 'A', 'element2': '1'}, |
|
18
|
|
|
{'element1': 'B', 'element2': '2'} |
|
19
|
|
|
] |
|
20
|
|
|
|
|
21
|
|
|
result = list(match_subgroup(sequence, pattern)) |
|
22
|
|
|
|
|
23
|
|
|
self.assertEqual(expected, result) |
|
24
|
|
|
|
|
25
|
|
|
|
|
26
|
|
|
class TestReHelpers(unittest.TestCase): |
|
27
|
|
|
|
|
28
|
|
|
def test_match_group(self): |
|
29
|
|
|
result = match_group(['apple', 'orange', 'peach']) |
|
30
|
|
|
expected = 'apple|orange|peach' |
|
31
|
|
|
|
|
32
|
|
|
self.assertEqual(expected, result) |
|
33
|
|
|
|
|
34
|
|
|
def test_add_regex_start_end(self): |
|
35
|
|
|
# NOTE: purposely using one positional and one keyword arg in test. |
|
36
|
|
|
@add_regex_start_end |
|
37
|
|
|
def foo(currency, country='[A-Z]{2}'): |
|
|
|
|
|
|
38
|
|
|
return '{currency}_{country}'.format(currency=currency, |
|
39
|
|
|
country=country) |
|
40
|
|
|
|
|
41
|
|
|
result = foo('USD') |
|
42
|
|
|
expected = '^USD_[A-Z]{2}$' |
|
43
|
|
|
|
|
44
|
|
|
self.assertEqual(expected, result) |
|
45
|
|
|
|
|
46
|
|
|
|
|
47
|
|
|
class TestTokenizePattern(unittest.TestCase): |
|
48
|
|
|
|
|
49
|
|
|
def test_tokenize_group_pattern(self): |
|
50
|
|
|
token_name = 'greeting' |
|
51
|
|
|
choices = ['hello', 'bonjour'] |
|
52
|
|
|
pattern = tokenize_group_pattern(token_name, choices) |
|
53
|
|
|
|
|
54
|
|
|
expected = {'greeting': 'bonjour'} |
|
55
|
|
|
result = re.match(pattern, 'bonjour').groupdict() |
|
56
|
|
|
|
|
57
|
|
|
self.assertEqual(expected, result) |
|
58
|
|
|
|
The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:
If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.