-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathtest_string.py
More file actions
executable file
·102 lines (90 loc) · 4.02 KB
/
Copy pathtest_string.py
File metadata and controls
executable file
·102 lines (90 loc) · 4.02 KB
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
import re
import pytest
from ding.utils.loader import enum, rematch, regrep, to_type
@pytest.mark.unittest
class TestConfigLoaderString:
def test_enum_plain(self):
_loader = enum('red', 'green', 'blue', 'yellow')
assert _loader('red') == 'red'
assert _loader('green') == 'green'
assert _loader('blue') == 'blue'
assert _loader('yellow') == 'yellow'
with pytest.raises(ValueError):
_loader(int)
with pytest.raises(ValueError):
_loader('Red')
with pytest.raises(ValueError):
_loader('YELLOW')
with pytest.raises(ValueError):
_loader(1)
with pytest.raises(ValueError):
_loader(None)
def test_enum_case_insensitive(self):
_loader = enum('red', 'green', 'blue', 'yellow', case_sensitive=False)
assert _loader('red') == 'red'
assert _loader('green') == 'green'
assert _loader('blue') == 'blue'
assert _loader('yellow') == 'yellow'
with pytest.raises(ValueError):
_loader(int)
assert _loader('Red') == 'red'
assert _loader('YELLOW') == 'yellow'
with pytest.raises(ValueError):
_loader(1)
with pytest.raises(ValueError):
_loader(None)
def test_enum_complex_case_1(self):
_loader = (lambda x: str(x).strip()) >> enum('red', 'green', 'blue', 'yellow', case_sensitive=False)
assert _loader('red') == 'red'
assert _loader('green') == 'green'
assert _loader('blue') == 'blue'
assert _loader('yellow') == 'yellow'
assert _loader(' yellow ') == 'yellow'
with pytest.raises(ValueError):
_loader(int)
assert _loader('Red') == 'red'
assert _loader('YELLOW') == 'yellow'
assert _loader(' YelloW ') == 'yellow'
with pytest.raises(ValueError):
_loader(1)
with pytest.raises(ValueError):
_loader(None)
# noinspection DuplicatedCode
def test_rematch_str(self):
_loader = to_type(str) >> str.strip >> str.lower >> rematch('[0-9a-z_]+@([0-9a-z]+.)+[0-9a-z]+')
assert _loader('hansbug@buaa.edu.cn') == 'hansbug@buaa.edu.cn'
assert _loader(' hansbug@BUAA.EDU.CN\t') == 'hansbug@buaa.edu.cn'
with pytest.raises(ValueError):
_loader(' hansbug.buaa.edu.cn')
with pytest.raises(ValueError):
_loader(' hansbug@cn')
with pytest.raises(ValueError):
_loader(' hansbug@buaa.edu..cn')
# noinspection DuplicatedCode
def test_rematch_pattern(self):
_loader = to_type(str) >> str.strip >> str.lower >> rematch(re.compile('[0-9a-z_]+@([0-9a-z]+.)+[0-9a-z]+'))
assert _loader('hansbug@buaa.edu.cn') == 'hansbug@buaa.edu.cn'
assert _loader(' hansbug@BUAA.EDU.CN\t') == 'hansbug@buaa.edu.cn'
with pytest.raises(ValueError):
_loader(' hansbug.buaa.edu.cn')
with pytest.raises(ValueError):
_loader(' hansbug@cn')
with pytest.raises(ValueError):
_loader(' hansbug@buaa.edu..cn')
def test_rematch_invalid(self):
with pytest.raises(TypeError):
_loader = rematch(1)
def test_regrep(self):
_loader = to_type(str) >> str.lower >> regrep('[0-9a-z_]+@([0-9a-z]+.)+[0-9a-z]+')
assert _loader('hansbug@buaa.edu.cn') == 'hansbug@buaa.edu.cn'
assert _loader(' hansbug@BUAA.EDU.CN\t') == 'hansbug@buaa.edu.cn'
assert _loader('This is my email hansbug@buaa.edu.cn, thanks~~') == 'hansbug@buaa.edu.cn'
with pytest.raises(ValueError):
_loader('this is hansbug.buaa.edu.cn')
def test_regrep_group(self):
_loader = to_type(str) >> str.lower >> regrep('[0-9a-z_]+@(([0-9a-z]+.)+[0-9a-z]+)', group=1)
assert _loader('hansbug@buaa.edu.cn') == 'buaa.edu.cn'
assert _loader(' hansbug@BUAA.EDU.CN\t') == 'buaa.edu.cn'
assert _loader('This is my email hansbug@buaa.edu.cn, thanks~~') == 'buaa.edu.cn'
with pytest.raises(ValueError):
_loader(' @buaa.edu.cn')