-
Notifications
You must be signed in to change notification settings - Fork 10
/
test_parse.py
167 lines (158 loc) · 5.48 KB
/
test_parse.py
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import pytest
from javaproperties import Comment, KeyValue, Whitespace, parse
@pytest.mark.parametrize('s,objects', [
('', []),
('\n', [Whitespace('\n')]),
(' \n\t\n', [Whitespace(' \n'), Whitespace('\t\n')]),
('key=value\n', [KeyValue('key', 'value', 'key=value\n')]),
(u'\xF0=\u2603\n', [KeyValue(u'\xF0', u'\u2603', u'\xF0=\u2603\n')]),
('\\u00F0=\\u2603\n', [KeyValue(u'\xF0', u'\u2603', '\\u00F0=\\u2603\n')]),
(' key :\t value \n', [KeyValue('key', 'value ', ' key :\t value \n')]),
(
'#This is a comment.\n'
'# So is this.\n'
'comment: no\n'
' ! Also a comment\n',
[
Comment('#This is a comment.\n'),
Comment('# So is this.\n'),
KeyValue('comment', 'no', 'comment: no\n'),
Comment(' ! Also a comment\n'),
],
),
(
'#Before blank\n'
'\n'
'#After blank\n'
'\n'
'before=blank\n'
'\n'
'after=blank\n',
[
Comment('#Before blank\n'),
Whitespace('\n',),
Comment('#After blank\n'),
Whitespace('\n'),
KeyValue('before', 'blank', 'before=blank\n'),
Whitespace('\n'),
KeyValue('after', 'blank', 'after=blank\n'),
],
),
('key va\\\n lue\n', [KeyValue('key', 'value', 'key va\\\n lue\n')]),
('key va\\\n', [KeyValue('key', 'va', 'key va\\\n')]),
('key va\\', [KeyValue('key', 'va', 'key va\\')]),
(' \\\n\t\\\r\n\f\\\r \n', [Whitespace(' \\\n\t\\\r\n\f\\\r \n')]),
(
'key = v\\\n\ta\\\r\n\fl\\\r u\\\ne\n',
[KeyValue('key', 'value', 'key = v\\\n\ta\\\r\n\fl\\\r u\\\ne\n')],
),
])
def test_parse(s, objects):
assert list(parse(s)) == objects
def test_keyvalue_attributes():
kv = KeyValue('a', 'b', 'c')
assert kv.key == 'a'
assert kv.value == 'b'
assert kv.source == 'c'
def test_comment_attributes():
c = Comment('a')
assert c.source == 'a'
def test_whitespace_attributes():
ws = Whitespace('a')
assert ws.source == 'a'
@pytest.mark.parametrize('c,is_t', [
('#\n', False),
('#Mon Sep 26 14:57:44 EDT 2016', True),
('#Mon Sep 26 14:57:44 EDT 2016\n', True),
(' # Mon Sep 26 14:57:44 EDT 2016\n', True),
('#Wed Dec 31 19:00:00 EST 1969\n', True),
('#Fri Jan 01 00:00:00 EST 2016\n', True),
('#Tue Feb 02 02:02:02 EST 2016\n', True),
('#Thu Mar 03 03:03:03 EST 2016\n', True),
('#Mon Apr 04 04:04:04 EDT 2016\n', True),
('#Thu May 05 05:05:05 EDT 2016\n', True),
('#Mon Jun 06 06:06:06 EDT 2016\n', True),
('#Thu Jul 07 07:07:07 EDT 2016\n', True),
('#Mon Aug 08 08:08:08 EDT 2016\n', True),
('#Fri Sep 09 09:09:09 EDT 2016\n', True),
('#Mon Oct 10 10:10:10 EDT 2016\n', True),
('#Fri Nov 11 11:11:11 EST 2016\n', True),
('#Mon Dec 12 12:12:12 EST 2016\n', True),
('#Sun Jan 03 06:00:00 EST 2016\n', True),
('#Mon Jan 04 00:00:00 EST 2016\n', True),
('#Tue Jan 05 01:00:00 EST 2016\n', True),
('#Wed Jan 06 02:00:00 EST 2016\n', True),
('#Thu Jan 07 03:00:00 EST 2016\n', True),
('#Fri Jan 08 04:00:00 EST 2016\n', True),
('#Sat Jan 09 05:00:00 EST 2016\n', True),
('#Mon Feb 29 03:14:15 EST 2016\n', True),
('#Fri May 13 13:13:13 EDT 2016\n', True),
('#Mon Sep 26 14:57:44 2016\n', True),
('#Sat Jan 09 05:00:60 EST 2016\n', True),
('#Sat Jan 09 05:00:61 EST 2016\n', True),
('#Mon Feb 32 03:14:15 EST 2016\n', False),
('#Sun Jan 3 06:00:00 EST 2016\n', False),
('#Sun Jan 03 6:00:00 EST 2016\n', False),
('#Sat Jan 09 05:00:62 EST 2016\n', False),
('#Sat Jan 09 24:00:00 EST 2016\n', False),
('#Sat Jan 09 05:60:00 EST 2016\n', False),
(u'#Mo M\xE4r 02 13:59:03 EST 2020\n', False),
])
def test_comment_is_timestamp(c, is_t):
assert Comment(c).is_timestamp() == is_t
@pytest.mark.parametrize('s,ss', [
('key=value', 'key=value'),
('key=value\n', 'key=value'),
('key=value\r\n', 'key=value'),
('key=value\r', 'key=value'),
('key va\\\n', 'key va'),
('key va\\\\\n', 'key va\\\\'),
('key va\\\\\\\n', 'key va\\\\'),
('key va\\', 'key va'),
('key va\\\n \\', 'key va\\\n '),
('key va\\\n \\\n', 'key va\\\n '),
('key va\\\n\\', 'key va\\\n'),
('key va\\\n\\\n', 'key va\\\n'),
])
def test_keyvalue_source_stripped(s, ss):
assert KeyValue(None, None, s).source_stripped == ss
@pytest.mark.parametrize('s,ss', [
('#comment', '#comment'),
('#comment\n', '#comment'),
('#comment\r\n', '#comment'),
('#comment\r', '#comment'),
('#comment\\\n', '#comment\\'),
])
def test_comment_source_stripped(s, ss):
assert Comment(s).source_stripped == ss
@pytest.mark.parametrize('s,ss', [
(' ', ' '),
('\n', ''),
('\r\n', ''),
('\r', ''),
('\\', ''),
('\\\n', ''),
('\\\\\n', '\\\\'),
('\\\\\\\n', '\\\\'),
('\\\n \\', '\\\n '),
('\\\n \\\n', '\\\n '),
('\\\n\\', '\\\n'),
('\\\n\\\n', '\\\n'),
])
def test_whitespace_source_stripped(s, ss):
assert Whitespace(s).source_stripped == ss
@pytest.mark.parametrize('s,v', [
('#comment', 'comment'),
('#comment\n', 'comment'),
('!comment\n', 'comment'),
(' #comment\n', 'comment'),
('# comment\n', ' comment'),
(' # comment\n', ' comment'),
('\t#comment\n', 'comment'),
('#\tcomment\n', '\tcomment'),
('\t#\tcomment\n', '\tcomment'),
('#comment value \n', 'comment value '),
(' weird edge # case', 'weird edge # case'),
])
def test_comment_value(s,v):
assert Comment(s).value == v