Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Side by Side Diff: grit/grd_reader_unittest.py

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « grit/grd_reader.py ('k') | grit/grit-todo.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 '''Unit tests for grd_reader package'''
7
8 import os
9 import sys
10 if __name__ == '__main__':
11 sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
12
13 import unittest
14 import StringIO
15
16 from grit import exception
17 from grit import grd_reader
18 from grit import util
19 from grit.node import base
20 from grit.node import empty
21
22
23 class GrdReaderUnittest(unittest.TestCase):
24 def testParsingAndXmlOutput(self):
25 input = u'''<?xml version="1.0" encoding="UTF-8"?>
26 <grit base_dir="." current_release="3" latest_public_release="2" source_lang_id= "en-US">
27 <release seq="3">
28 <includes>
29 <include file="images/logo.gif" name="ID_LOGO" type="gif" />
30 </includes>
31 <messages>
32 <if expr="True">
33 <message desc="Printed to greet the currently logged in user" name="IDS_ GREETING">
34 Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing today ?
35 </message>
36 </if>
37 </messages>
38 <structures>
39 <structure file="rc_files/dialogs.rc" name="IDD_NARROW_DIALOG" type="dialo g">
40 <skeleton expr="lang == 'fr-FR'" file="bla.rc" variant_of_revision="3" / >
41 </structure>
42 <structure file="rc_files/version.rc" name="VS_VERSION_INFO" type="version " />
43 </structures>
44 </release>
45 <translations>
46 <file lang="nl" path="nl_translations.xtb" />
47 </translations>
48 <outputs>
49 <output filename="resource.h" type="rc_header" />
50 <output filename="resource.rc" lang="en-US" type="rc_all" />
51 </outputs>
52 </grit>'''
53 pseudo_file = StringIO.StringIO(input)
54 tree = grd_reader.Parse(pseudo_file, '.')
55 output = unicode(tree)
56 expected_output = input.replace(u' base_dir="."', u'')
57 self.assertEqual(expected_output, output)
58 self.failUnless(tree.GetNodeById('IDS_GREETING'))
59
60
61 def testStopAfter(self):
62 input = u'''<?xml version="1.0" encoding="UTF-8"?>
63 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
64 <outputs>
65 <output filename="resource.h" type="rc_header" />
66 <output filename="resource.rc" lang="en-US" type="rc_all" />
67 </outputs>
68 <release seq="3">
69 <includes>
70 <include type="gif" name="ID_LOGO" file="images/logo.gif"/>
71 </includes>
72 </release>
73 </grit>'''
74 pseudo_file = StringIO.StringIO(input)
75 tree = grd_reader.Parse(pseudo_file, '.', stop_after='outputs')
76 # only an <outputs> child
77 self.failUnless(len(tree.children) == 1)
78 self.failUnless(tree.children[0].name == 'outputs')
79
80 def testLongLinesWithComments(self):
81 input = u'''<?xml version="1.0" encoding="UTF-8"?>
82 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
83 <release seq="3">
84 <messages>
85 <message name="IDS_GREETING" desc="Printed to greet the currently logged i n user">
86 This is a very long line with no linebreaks yes yes it stretches on <!--
87 -->and on <!--
88 -->and on!
89 </message>
90 </messages>
91 </release>
92 </grit>'''
93 pseudo_file = StringIO.StringIO(input)
94 tree = grd_reader.Parse(pseudo_file, '.')
95
96 greeting = tree.GetNodeById('IDS_GREETING')
97 self.failUnless(greeting.GetCliques()[0].GetMessage().GetRealContent() ==
98 'This is a very long line with no linebreaks yes yes it '
99 'stretches on and on and on!')
100
101 def doTestAssignFirstIds(self, first_ids_path):
102 input = u'''<?xml version="1.0" encoding="UTF-8"?>
103 <grit latest_public_release="2" source_lang_id="en-US" current_release="3"
104 base_dir="." first_ids_file="%s">
105 <release seq="3">
106 <messages>
107 <message name="IDS_TEST" desc="test">
108 test
109 </message>
110 </messages>
111 </release>
112 </grit>''' % first_ids_path
113 pseudo_file = StringIO.StringIO(input)
114 grit_root_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)),
115 '..')
116 fake_input_path = os.path.join(
117 grit_root_dir, "grit/testdata/chrome/app/generated_resources.grd")
118 root = grd_reader.Parse(pseudo_file, os.path.split(fake_input_path)[0])
119 root.AssignFirstIds(fake_input_path, {})
120 messages_node = root.children[0].children[0]
121 self.failUnless(isinstance(messages_node, empty.MessagesNode))
122 self.failUnless(messages_node.attrs["first_id"] !=
123 empty.MessagesNode().DefaultAttributes()["first_id"])
124
125 def testAssignFirstIds(self):
126 self.doTestAssignFirstIds("../../tools/grit/resource_ids")
127
128 def testAssignFirstIdsUseGritDir(self):
129 self.doTestAssignFirstIds("GRIT_DIR/grit/testdata/tools/grit/resource_ids")
130
131 def testAssignFirstIdsMultipleMessages(self):
132 """If there are multiple messages sections, the resource_ids file
133 needs to list multiple first_id values."""
134 input = u'''<?xml version="1.0" encoding="UTF-8"?>
135 <grit latest_public_release="2" source_lang_id="en-US" current_release="3"
136 base_dir="." first_ids_file="resource_ids">
137 <release seq="3">
138 <messages>
139 <message name="IDS_TEST" desc="test">
140 test
141 </message>
142 </messages>
143 <messages>
144 <message name="IDS_TEST2" desc="test">
145 test2
146 </message>
147 </messages>
148 </release>
149 </grit>'''
150 pseudo_file = StringIO.StringIO(input)
151 grit_root_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)),
152 '..')
153 fake_input_path = os.path.join(grit_root_dir, "grit/testdata/test.grd")
154
155 root = grd_reader.Parse(pseudo_file, os.path.split(fake_input_path)[0])
156 root.AssignFirstIds(fake_input_path, {})
157 messages_node = root.children[0].children[0]
158 self.assertTrue(isinstance(messages_node, empty.MessagesNode))
159 self.assertEqual('100', messages_node.attrs["first_id"])
160 messages_node = root.children[0].children[1]
161 self.assertTrue(isinstance(messages_node, empty.MessagesNode))
162 self.assertEqual('10000', messages_node.attrs["first_id"])
163
164 def testUseNameForIdAndPpIfdef(self):
165 input = u'''<?xml version="1.0" encoding="UTF-8"?>
166 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
167 <release seq="3">
168 <messages>
169 <if expr="pp_ifdef('hello')">
170 <message name="IDS_HELLO" use_name_for_id="true">
171 Hello!
172 </message>
173 </if>
174 </messages>
175 </release>
176 </grit>'''
177 pseudo_file = StringIO.StringIO(input)
178 root = grd_reader.Parse(pseudo_file, '.', defines={'hello': '1'})
179
180 # Check if the ID is set to the name. In the past, there was a bug
181 # that caused the ID to be a generated number.
182 hello = root.GetNodeById('IDS_HELLO')
183 self.failUnless(hello.GetCliques()[0].GetId() == 'IDS_HELLO')
184
185 def testUseNameForIdWithIfElse(self):
186 input = u'''<?xml version="1.0" encoding="UTF-8"?>
187 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
188 <release seq="3">
189 <messages>
190 <if expr="pp_ifdef('hello')">
191 <then>
192 <message name="IDS_HELLO" use_name_for_id="true">
193 Hello!
194 </message>
195 </then>
196 <else>
197 <message name="IDS_HELLO" use_name_for_id="true">
198 Yellow!
199 </message>
200 </else>
201 </if>
202 </messages>
203 </release>
204 </grit>'''
205 pseudo_file = StringIO.StringIO(input)
206 root = grd_reader.Parse(pseudo_file, '.', defines={'hello': '1'})
207
208 # Check if the ID is set to the name. In the past, there was a bug
209 # that caused the ID to be a generated number.
210 hello = root.GetNodeById('IDS_HELLO')
211 self.failUnless(hello.GetCliques()[0].GetId() == 'IDS_HELLO')
212
213 def testPartInclusion(self):
214 top_grd = u'''\
215 <grit latest_public_release="2" current_release="3">
216 <release seq="3">
217 <messages>
218 <message name="IDS_TEST" desc="test">
219 test
220 </message>
221 <part file="sub.grp" />
222 </messages>
223 </release>
224 </grit>'''
225 sub_grd = u'''\
226 <grit-part>
227 <message name="IDS_TEST2" desc="test2">test2</message>
228 <part file="subsub.grp" />
229 <message name="IDS_TEST3" desc="test3">test3</message>
230 </grit-part>'''
231 subsub_grd = u'''\
232 <grit-part>
233 <message name="IDS_TEST4" desc="test4">test4</message>
234 </grit-part>'''
235 expected_output = u'''\
236 <grit current_release="3" latest_public_release="2">
237 <release seq="3">
238 <messages>
239 <message desc="test" name="IDS_TEST">
240 test
241 </message>
242 <part file="sub.grp">
243 <message desc="test2" name="IDS_TEST2">
244 test2
245 </message>
246 <part file="subsub.grp">
247 <message desc="test4" name="IDS_TEST4">
248 test4
249 </message>
250 </part>
251 <message desc="test3" name="IDS_TEST3">
252 test3
253 </message>
254 </part>
255 </messages>
256 </release>
257 </grit>'''
258 with util.TempDir({'sub.grp': sub_grd,
259 'subsub.grp': subsub_grd}) as temp_dir:
260 output = grd_reader.Parse(StringIO.StringIO(top_grd), temp_dir.GetPath())
261 self.assertEqual(expected_output.split(), output.FormatXml().split())
262
263 def testPartInclusionFailure(self):
264 template = u'''
265 <grit latest_public_release="2" current_release="3">
266 <outputs>
267 %s
268 </outputs>
269 </grit>'''
270
271 part_failures = [
272 (exception.UnexpectedContent, u'<part file="x">fnord</part>'),
273 (exception.UnexpectedChild,
274 u'<part file="x"><output filename="x" type="y" /></part>'),
275 ]
276 for raises, data in part_failures:
277 data = StringIO.StringIO(template % data)
278 self.assertRaises(raises, grd_reader.Parse, data, '.')
279
280 gritpart_failures = [
281 (exception.UnexpectedAttribute, u'<grit-part file="xyz"></grit-part>'),
282 (exception.MissingElement, u'<output filename="x" type="y" />'),
283 ]
284 for raises, data in gritpart_failures:
285 top_grd = StringIO.StringIO(template % u'<part file="bad.grp" />')
286 with util.TempDir({'bad.grp': data}) as temp_dir:
287 self.assertRaises(raises, grd_reader.Parse, top_grd, temp_dir.GetPath())
288
289 def testEarlyEnoughPlatformSpecification(self):
290 # This is a regression test for issue
291 # https://code.google.com/p/grit-i18n/issues/detail?id=23
292 grd_text = u'''<?xml version="1.0" encoding="UTF-8"?>
293 <grit latest_public_release="1" current_release="1">
294 <release seq="1">
295 <messages>
296 <if expr="not pp_ifdef('use_titlecase')">
297 <message name="IDS_XYZ">foo</message>
298 </if>
299 <!-- The assumption is that use_titlecase is never true for
300 this platform. When the platform isn't set to 'android'
301 early enough, we get a duplicate message name. -->
302 <if expr="os == '%s'">
303 <message name="IDS_XYZ">boo</message>
304 </if>
305 </messages>
306 </release>
307 </grit>''' % sys.platform
308 with util.TempDir({}) as temp_dir:
309 grd_reader.Parse(StringIO.StringIO(grd_text), temp_dir.GetPath(),
310 target_platform='android')
311
312
313 if __name__ == '__main__':
314 unittest.main()
OLDNEW
« no previous file with comments | « grit/grd_reader.py ('k') | grit/grit-todo.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698