File: test_parse.py

package info (click to toggle)
javaproperties 0.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 388 kB
  • sloc: python: 4,162; sh: 8; makefile: 4
file content (207 lines) | stat: -rw-r--r-- 6,618 bytes parent folder | download | duplicates (2)
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
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")]),
        ("\xF0=\u2603\n", [KeyValue("\xF0", "\u2603", "\xF0=\u2603\n")]),
        ("\\u00F0=\\u2603\n", [KeyValue("\xF0", "\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"
    assert repr(kv) == "javaproperties.reading.KeyValue(key='a', value='b', source='c')"
    k, v, s = kv
    assert k == kv.key
    assert v == kv.value
    assert s == kv.source


def test_comment_attributes():
    c = Comment("a")
    assert c.source == "a"
    assert repr(c) == "javaproperties.reading.Comment(source='a')"
    (s,) = c
    assert s == c.source


def test_whitespace_attributes():
    ws = Whitespace("a")
    assert ws.source == "a"
    assert repr(ws) == "javaproperties.reading.Whitespace(source='a')"
    (s,) = ws
    assert s == ws.source


@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),
        ("#Mo  Mär 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