2 # -*- coding: utf-8 -*-
4 from translate
.convert
import po2prop
5 from translate
.convert
import test_convert
6 from translate
.misc
import wStringIO
7 from translate
.storage
import po
10 def po2prop(self
, posource
):
11 """helper that converts po source to .properties source without requiring files"""
12 inputfile
= wStringIO
.StringIO(posource
)
13 inputpo
= po
.pofile(inputfile
)
14 convertor
= po2prop
.po2prop()
15 outputprop
= convertor
.convertstore(inputpo
)
18 def merge2prop(self
, propsource
, posource
, personality
="java"):
19 """helper that merges po translations to .properties source without requiring files"""
20 inputfile
= wStringIO
.StringIO(posource
)
21 inputpo
= po
.pofile(inputfile
)
22 templatefile
= wStringIO
.StringIO(propsource
)
23 #templateprop = properties.propfile(templatefile)
24 convertor
= po2prop
.reprop(templatefile
)
25 outputprop
= convertor
.convertstore(inputpo
, personality
=personality
)
29 def test_merging_simple(self
):
30 """check the simplest case of merging a translation"""
31 posource
= '''#: prop\nmsgid "value"\nmsgstr "waarde"\n'''
32 proptemplate
= '''prop=value\n'''
33 propexpected
= '''prop=waarde\n'''
34 propfile
= self
.merge2prop(proptemplate
, posource
)
36 assert propfile
== [propexpected
]
38 def test_hard_newlines_preserved(self
):
39 """check that we preserver hard coded newlines at the start and end of sentence"""
40 posource
= '''#: prop\nmsgid "\\nvalue\\n\\n"\nmsgstr "\\nwaarde\\n\\n"\n'''
41 proptemplate
= '''prop=\\nvalue\\n\\n\n'''
42 propexpected
= '''prop=\\nwaarde\\n\\n\n'''
43 propfile
= self
.merge2prop(proptemplate
, posource
)
45 assert propfile
== [propexpected
]
47 def test_space_preservation(self
):
48 """check that we preserve any spacing in properties files when merging"""
49 posource
= '''#: prop\nmsgid "value"\nmsgstr "waarde"\n'''
50 proptemplate
= '''prop = value\n'''
51 propexpected
= '''prop = waarde\n'''
52 propfile
= self
.merge2prop(proptemplate
, posource
)
54 assert propfile
== [propexpected
]
56 def test_merging_blank_entries(self
):
57 """check that we can correctly merge entries that are blank in the template"""
58 posource
= '''#: accesskey-accept
60 "_: accesskey-accept\n"
63 proptemplate
= 'accesskey-accept=\n'
64 propexpected
= 'accesskey-accept=\n'
65 propfile
= self
.merge2prop(proptemplate
, posource
)
67 assert propfile
== [propexpected
]
69 def test_merging_fuzzy(self
):
70 """check merging a fuzzy translation"""
71 posource
= '''#: prop\n#, fuzzy\nmsgid "value"\nmsgstr "waarde"\n'''
72 proptemplate
= '''prop=value\n'''
73 propexpected
= '''prop=value\n'''
74 propfile
= self
.merge2prop(proptemplate
, posource
)
76 assert propfile
== [propexpected
]
78 def test_merging_propertyless_template(self
):
79 """check that when merging with a template with no property values that we copy the template"""
81 proptemplate
= "# A comment\n"
82 propexpected
= proptemplate
83 propfile
= self
.merge2prop(proptemplate
, posource
)
85 assert propfile
== [propexpected
]
87 def test_personalities(self
):
88 """test that we output correctly for Java and Mozilla style property files. Mozilla uses Unicode, while Java uses escaped Unicode"""
89 posource
= '''#: prop\nmsgid "value"\nmsgstr "ṽḁḽṻḝ"\n'''
90 proptemplate
= '''prop = value\n'''
91 propexpectedjava
= '''prop = \\u1E7D\\u1E01\\u1E3D\\u1E7B\\u1E1D\n'''
92 propfile
= self
.merge2prop(proptemplate
, posource
)
94 assert propfile
== [propexpectedjava
]
95 propexpectedmozilla
= '''prop = ṽḁḽṻḝ\n'''
96 propfile
= self
.merge2prop(proptemplate
, posource
, personality
="mozilla")
98 assert propfile
== [propexpectedmozilla
]
100 class TestPO2PropCommand(test_convert
.TestConvertCommand
, TestPO2Prop
):
101 """Tests running actual po2prop commands on files"""
102 convertmodule
= po2prop
103 defaultoptions
= {"progress": "none"}
106 """tests getting help"""
107 options
= test_convert
.TestConvertCommand
.test_help(self
)
108 options
= self
.help_check(options
, "-t TEMPLATE, --template=TEMPLATE")
109 options
= self
.help_check(options
, "--fuzzy")
110 options
= self
.help_check(options
, "--personality=TYPE")
111 options
= self
.help_check(options
, "--nofuzzy", last
=True)