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

Side by Side Diff: grit/format/rc_unittest.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 months 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/format/rc_header_unittest.py ('k') | grit/format/repack.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2011 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 grit.format.rc'''
7
8 import os
9 import re
10 import sys
11 if __name__ == '__main__':
12 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
13
14 import tempfile
15 import unittest
16 import StringIO
17
18 from grit.format import rc
19 from grit import grd_reader
20 from grit import util
21 from grit.tool import build
22
23 class DummyOutput(object):
24 def __init__(self, type, language, file = 'hello.gif'):
25 self.type = type
26 self.language = language
27 self.file = file
28 def GetType(self):
29 return self.type
30 def GetLanguage(self):
31 return self.language
32 def GetOutputFilename(self):
33 return self.file
34
35 class FormatRcUnittest(unittest.TestCase):
36 def testMessages(self):
37 root = grd_reader.Parse(StringIO.StringIO('''
38 <messages>
39 <message name="IDS_BTN_GO" desc="Button text" meaning="verb">Go!</mess age>
40 <message name="IDS_GREETING" desc="Printed to greet the currently logg ed in user">
41 Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing tod ay?
42 </message>
43 <message name="BONGO" desc="Flippo nippo">
44 Howdie "Mr. Elephant", how are you doing? \'\'\'
45 </message>
46 <message name="IDS_WITH_LINEBREAKS">
47 Good day sir,
48 I am a bee
49 Sting sting
50 </message>
51 </messages>
52 '''), flexible_root = True)
53 util.FixRootForUnittest(root)
54
55 buf = StringIO.StringIO()
56 build.RcBuilder.ProcessNode(root, DummyOutput('rc_all', 'en'), buf)
57 output = buf.getvalue()
58 self.failUnless(output.strip() == u'''
59 STRINGTABLE
60 BEGIN
61 IDS_BTN_GO "Go!"
62 IDS_GREETING "Hello %s, how are you doing today?"
63 BONGO "Howdie ""Mr. Elephant"", how are you doing? "
64 IDS_WITH_LINEBREAKS "Good day sir,\\nI am a bee\\nSting sting"
65 END'''.strip())
66
67
68 def testRcSection(self):
69 root = grd_reader.Parse(StringIO.StringIO('''
70 <structures>
71 <structure type="menu" name="IDC_KLONKMENU" file="grit\\testdata\klonk .rc" encoding="utf-16" />
72 <structure type="dialog" name="IDD_ABOUTBOX" file="grit\\testdata\klon k.rc" encoding="utf-16" />
73 <structure type="version" name="VS_VERSION_INFO" file="grit\\testdata\ klonk.rc" encoding="utf-16" />
74 </structures>'''), flexible_root = True)
75 util.FixRootForUnittest(root)
76 root.RunGatherers(recursive = True)
77
78 buf = StringIO.StringIO()
79 build.RcBuilder.ProcessNode(root, DummyOutput('rc_all', 'en'), buf)
80 output = buf.getvalue().strip()
81 expected = u'''
82 IDC_KLONKMENU MENU
83 BEGIN
84 POPUP "&File"
85 BEGIN
86 MENUITEM "E&xit", IDM_EXIT
87 MENUITEM "This be ""Klonk"" me like", ID_FILE_THISBE
88 POPUP "gonk"
89 BEGIN
90 MENUITEM "Klonk && is ""good""", ID_GONK_KLONKIS
91 END
92 END
93 POPUP "&Help"
94 BEGIN
95 MENUITEM "&About ...", IDM_ABOUT
96 END
97 END
98
99 IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
100 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
101 CAPTION "About"
102 FONT 8, "System", 0, 0, 0x0
103 BEGIN
104 ICON IDI_KLONK,IDC_MYICON,14,9,20,20
105 LTEXT "klonk Version ""yibbee"" 1.0",IDC_STATIC,49,10,119,8,
106 SS_NOPREFIX
107 LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
108 DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
109 CONTROL "Jack ""Black"" Daniels",IDC_RADIO1,"Button",
110 BS_AUTORADIOBUTTON,46,51,84,10
111 END
112
113 VS_VERSION_INFO VERSIONINFO
114 FILEVERSION 1,0,0,1
115 PRODUCTVERSION 1,0,0,1
116 FILEFLAGSMASK 0x17L
117 #ifdef _DEBUG
118 FILEFLAGS 0x1L
119 #else
120 FILEFLAGS 0x0L
121 #endif
122 FILEOS 0x4L
123 FILETYPE 0x1L
124 FILESUBTYPE 0x0L
125 BEGIN
126 BLOCK "StringFileInfo"
127 BEGIN
128 BLOCK "040904b0"
129 BEGIN
130 VALUE "FileDescription", "klonk Application"
131 VALUE "FileVersion", "1, 0, 0, 1"
132 VALUE "InternalName", "klonk"
133 VALUE "LegalCopyright", "Copyright (C) 2005"
134 VALUE "OriginalFilename", "klonk.exe"
135 VALUE "ProductName", " klonk Application"
136 VALUE "ProductVersion", "1, 0, 0, 1"
137 END
138 END
139 BLOCK "VarFileInfo"
140 BEGIN
141 VALUE "Translation", 0x409, 1200
142 END
143 END'''.strip()
144 for expected_line, output_line in zip(expected.split(), output.split()):
145 self.assertEqual(expected_line, output_line)
146
147 def testRcIncludeStructure(self):
148 root = grd_reader.Parse(StringIO.StringIO('''
149 <structures>
150 <structure type="tr_html" name="IDR_HTML" file="bingo.html"/>
151 <structure type="tr_html" name="IDR_HTML2" file="bingo2.html"/>
152 </structures>'''), flexible_root = True)
153 util.FixRootForUnittest(root, '/temp')
154 # We do not run gatherers as it is not needed and wouldn't find the file
155
156 buf = StringIO.StringIO()
157 build.RcBuilder.ProcessNode(root, DummyOutput('rc_all', 'en'), buf)
158 output = buf.getvalue()
159 expected = (u'IDR_HTML HTML "%s"\n'
160 u'IDR_HTML2 HTML "%s"'
161 % (util.normpath('/temp/bingo.html').replace('\\', '\\\\'),
162 util.normpath('/temp/bingo2.html').replace('\\', '\\\\')))
163 # hackety hack to work on win32&lin
164 output = re.sub('"[c-zC-Z]:', '"', output)
165 self.failUnless(output.strip() == expected)
166
167 def testRcIncludeFile(self):
168 root = grd_reader.Parse(StringIO.StringIO('''
169 <includes>
170 <include type="TXT" name="TEXT_ONE" file="bingo.txt"/>
171 <include type="TXT" name="TEXT_TWO" file="bingo2.txt" filenameonly="tru e" />
172 </includes>'''), flexible_root = True)
173 util.FixRootForUnittest(root, '/temp')
174
175 buf = StringIO.StringIO()
176 build.RcBuilder.ProcessNode(root, DummyOutput('rc_all', 'en'), buf)
177 output = buf.getvalue()
178 expected = (u'TEXT_ONE TXT "%s"\n'
179 u'TEXT_TWO TXT "%s"'
180 % (util.normpath('/temp/bingo.txt').replace('\\', '\\\\'),
181 'bingo2.txt'))
182 # hackety hack to work on win32&lin
183 output = re.sub('"[c-zC-Z]:', '"', output)
184 self.failUnless(output.strip() == expected)
185
186 def testRcIncludeFlattenedHtmlFile(self):
187 input_file = util.PathFromRoot('grit/testdata/include_test.html')
188 output_file = '%s/HTML_FILE1_include_test.html' % tempfile.gettempdir()
189 root = grd_reader.Parse(StringIO.StringIO('''
190 <includes>
191 <include name="HTML_FILE1" flattenhtml="true" file="%s" type="BINDATA" / >
192 </includes>''' % input_file), flexible_root = True)
193 util.FixRootForUnittest(root, '.')
194
195 buf = StringIO.StringIO()
196 build.RcBuilder.ProcessNode(root, DummyOutput('rc_all', 'en', output_file),
197 buf)
198 output = buf.getvalue()
199
200 expected = u'HTML_FILE1 BINDATA "HTML_FILE1_include_test. html"'
201 # hackety hack to work on win32&lin
202 output = re.sub('"[c-zC-Z]:', '"', output)
203 self.failUnless(output.strip() == expected)
204
205 fo = file(output_file)
206 file_contents = fo.read()
207 fo.close()
208
209 # Check for the content added by the <include> tag.
210 self.failUnless(file_contents.find('Hello Include!') != -1)
211 # Check for the content that was removed by if tag.
212 self.failUnless(file_contents.find('should be removed') == -1)
213 # Check for the content that was kept in place by if.
214 self.failUnless(file_contents.find('should be kept') != -1)
215 self.failUnless(file_contents.find('in the middle...') != -1)
216 self.failUnless(file_contents.find('at the end...') != -1)
217 # Check for nested content that was kept
218 self.failUnless(file_contents.find('nested true should be kept') != -1)
219 self.failUnless(file_contents.find('silbing true should be kept') != -1)
220 # Check for removed "<if>" and "</if>" tags.
221 self.failUnless(file_contents.find('<if expr=') == -1)
222 self.failUnless(file_contents.find('</if>') == -1)
223
224
225 def testStructureNodeOutputfile(self):
226 input_file = util.PathFromRoot('grit/testdata/simple.html')
227 root = grd_reader.Parse(StringIO.StringIO(
228 '<structure type="tr_html" name="IDR_HTML" file="%s" />' %input_file),
229 flexible_root = True)
230 util.FixRootForUnittest(root, '.')
231 # We must run the gatherers since we'll be wanting the translation of the
232 # file. The file exists in the location pointed to.
233 root.RunGatherers(recursive=True)
234
235 output_dir = tempfile.gettempdir()
236 en_file = root.FileForLanguage('en', output_dir)
237 self.failUnless(en_file == input_file)
238 fr_file = root.FileForLanguage('fr', output_dir)
239 self.failUnless(fr_file == os.path.join(output_dir, 'fr_simple.html'))
240
241 fo = file(fr_file)
242 contents = fo.read()
243 fo.close()
244
245 self.failUnless(contents.find('<p>') != -1) # should contain the markup
246 self.failUnless(contents.find('Hello!') == -1) # should be translated
247
248
249 def testFallbackToEnglish(self):
250 root = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="U TF-8"?>
251 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
252 <release seq="1" allow_pseudo="False">
253 <structures fallback_to_english="True">
254 <structure type="dialog" name="IDD_ABOUTBOX" file="grit\\testdata\kl onk.rc" encoding="utf-16" />
255 </structures>
256 </release>
257 </grit>'''), util.PathFromRoot('.'))
258 util.FixRootForUnittest(root)
259 root.RunGatherers(recursive = True)
260
261 node = root.GetNodeById("IDD_ABOUTBOX")
262 formatter = node.ItemFormatter('rc_all')
263 output = formatter.Format(node, 'bingobongo')
264 self.failUnless(output.strip() == '''IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
265 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
266 CAPTION "About"
267 FONT 8, "System", 0, 0, 0x0
268 BEGIN
269 ICON IDI_KLONK,IDC_MYICON,14,9,20,20
270 LTEXT "klonk Version ""yibbee"" 1.0",IDC_STATIC,49,10,119,8,
271 SS_NOPREFIX
272 LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
273 DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
274 CONTROL "Jack ""Black"" Daniels",IDC_RADIO1,"Button",
275 BS_AUTORADIOBUTTON,46,51,84,10
276 END''')
277
278
279 def testRelativePath(self):
280 ''' Verify that _MakeRelativePath works in some tricky cases.'''
281 def TestRelativePathCombinations(base_path, other_path, expected_result):
282 ''' Verify that the relative path function works for
283 the given paths regardless of whether or not they end with
284 a trailing slash.'''
285 for path1 in [base_path, base_path + os.path.sep]:
286 for path2 in [other_path, other_path + os.path.sep]:
287 result = rc._MakeRelativePath(path1, path2)
288 self.failUnless(result == expected_result)
289
290 # set-up variables
291 root_dir = 'c:%sa' % os.path.sep
292 result1 = '..%sabc' % os.path.sep
293 path1 = root_dir + 'bc'
294 result2 = 'bc'
295 path2 = '%s%s%s' % (root_dir, os.path.sep, result2)
296 # run the tests
297 TestRelativePathCombinations(root_dir, path1, result1)
298 TestRelativePathCombinations(root_dir, path2, result2)
299
300
301 if __name__ == '__main__':
302 unittest.main()
OLDNEW
« no previous file with comments | « grit/format/rc_header_unittest.py ('k') | grit/format/repack.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698