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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from translate.storage import properties
from translate.storage import test_monolingual
from translate.misc import wStringIO
def test_find_delimeter_pos_simple():
assert properties.find_delimeter("key=value") == ('=', 3)
assert properties.find_delimeter("key:value") == (':', 3)
assert properties.find_delimeter("key value") == (' ', 3)
assert properties.find_delimeter("= value") == ('=', 0)
def test_find_delimeter_pos_whitespace():
assert properties.find_delimeter("key = value") == ('=', 4)
assert properties.find_delimeter("key : value") == (':', 4)
assert properties.find_delimeter("key value") == (' ', 3)
assert properties.find_delimeter("key key = value") == (' ', 3)
assert properties.find_delimeter("key value value") == (' ', 3)
assert properties.find_delimeter(" key = value") == ('=', 5)
def test_find_delimeter_pos_escapes():
assert properties.find_delimeter("key\:=value") == ('=', 5)
assert properties.find_delimeter("key\=: value") == (':', 5)
assert properties.find_delimeter("key\ value") == (' ', 5)
assert properties.find_delimeter("key\ key\ key\: = value") == ('=', 16)
def test_is_line_continuation():
assert properties.is_line_continuation("") == False
assert properties.is_line_continuation("some text") == False
assert properties.is_line_continuation("""some text\\""") == True
assert properties.is_line_continuation("""some text\\\\""") == False # Escaped \
assert properties.is_line_continuation("""some text\\\\\\""") == True # Odd num. \ is line continuation
assert properties.is_line_continuation("""\\\\\\""") == True
def test_key_strip():
assert properties.key_strip("key") == "key"
assert properties.key_strip(" key") == "key"
assert properties.key_strip("\ key") == "\ key"
assert properties.key_strip("key ") == "key"
assert properties.key_strip("key\ ") == "key\ "
class TestPropUnit(test_monolingual.TestMonolingualUnit):
UnitClass = properties.propunit
def test_difficult_escapes(self):
"""It doesn't seem that properties files can store double backslashes.
We are disabling the double-backslash tests for now.
If we are mistaken in the above assumption, we need to fix getsource()
and setsource() and delete this test override.
"""
pass
def test_rich_get(self):
pass
def test_rich_set(self):
pass
class TestProp(test_monolingual.TestMonolingualStore):
StoreClass = properties.propfile
def propparse(self, propsource, personality="java"):
"""helper that parses properties source without requiring files"""
dummyfile = wStringIO.StringIO(propsource)
propfile = properties.propfile(dummyfile, personality)
return propfile
def propregen(self, propsource):
"""helper that converts properties source to propfile object and back"""
return str(self.propparse(propsource))
def test_simpledefinition(self):
"""checks that a simple properties definition is parsed correctly"""
propsource = 'test_me=I can code!'
propfile = self.propparse(propsource)
assert len(propfile.units) == 1
propunit = propfile.units[0]
assert propunit.name == "test_me"
assert propunit.source == "I can code!"
def test_simpledefinition_source(self):
"""checks that a simple properties definition can be regenerated as source"""
propsource = 'test_me=I can code!'
propregen = self.propregen(propsource)
assert propsource + '\n' == propregen
def test_unicode_escaping(self):
"""check that escapes unicode is converted properly"""
propsource = "unicode=\u0411\u0416\u0419\u0428"
messagevalue = u'\u0411\u0416\u0419\u0428'.encode("UTF-8")
propfile = self.propparse(propsource, personality="mozilla")
assert len(propfile.units) == 1
propunit = propfile.units[0]
assert propunit.name == "unicode"
assert propunit.source.encode("UTF-8") == "БЖЙШ"
regensource = str(propfile)
assert messagevalue in regensource
assert "\\u" not in regensource
def test_newlines_startend(self):
"""check that we preserve \n that appear at start and end of properties"""
propsource = "newlines=\\ntext\\n"
propregen = self.propregen(propsource)
assert propsource + '\n' == propregen
def test_whitespace_handling(self):
"""check that we remove extra whitespace around property"""
whitespaces = (('key = value', 'key', 'value'), # Standard for baseline
(' key = value', 'key', 'value'), # Extra \s before key and value
('\ key\ = value', '\ key\ ', 'value'), # extra space at start and end of key
('key = \ value ', 'key', ' value '), # extra space at start end end of value
)
for propsource, key, value in whitespaces:
propfile = self.propparse(propsource)
propunit = propfile.units[0]
print repr(propsource), repr(propunit.name), repr(propunit.source)
assert propunit.name == key
assert propunit.source == value
def test_key_value_delimeters_simple(self):
"""test that we can handle colon, equals and space delimeter
between key and value. We don't test any space removal or escaping"""
delimeters = [":", "=", " "]
for delimeter in delimeters:
propsource = "key%svalue" % delimeter
print "source: '%s'\ndelimeter: '%s'" % (propsource, delimeter)
propfile = self.propparse(propsource)
assert len(propfile.units) == 1
propunit = propfile.units[0]
assert propunit.name == "key"
assert propunit.source == "value"
def test_comments(self):
"""checks that we handle # and ! comments"""
markers = ['#', '!']
for comment_marker in markers:
propsource = '''%s A comment
key=value
''' % comment_marker
propfile = self.propparse(propsource)
print repr(propsource)
print "Comment marker: '%s'" % comment_marker
assert len(propfile.units) == 1
propunit = propfile.units[0]
assert propunit.comments == ['%s A comment' % comment_marker]
def test_latin1(self):
"""checks that we handle non-escaped latin1 text"""
prop_source = u"key=valú".encode('latin1')
prop_store = self.propparse(prop_source)
assert len(prop_store.units) == 1
unit = prop_store.units[0]
assert unit.source == u"valú"
|