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

Side by Side Diff: grit/gather/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/gather/rc.py ('k') | grit/gather/regexp.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/python2.4
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.gather.rc'''
7
8
9 import os
10 import sys
11 if __name__ == '__main__':
12 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
13
14 import unittest
15 import StringIO
16
17 from grit.gather import rc
18 from grit import util
19
20
21 class RcUnittest(unittest.TestCase):
22
23 part_we_want = '''IDC_KLONKACC ACCELERATORS
24 BEGIN
25 "?", IDM_ABOUT, ASCII, ALT
26 "/", IDM_ABOUT, ASCII, ALT
27 END'''
28
29 def testSectionFromFile(self):
30 buf = '''IDC_SOMETHINGELSE BINGO
31 BEGIN
32 BLA BLA
33 BLA BLA
34 END
35 %s
36
37 IDC_KLONK BINGOBONGO
38 BEGIN
39 HONGO KONGO
40 END
41 ''' % self.part_we_want
42
43 f = StringIO.StringIO(buf)
44
45 out = rc.Section.FromFile(f, 'IDC_KLONKACC')
46 self.failUnless(out.GetText() == self.part_we_want)
47
48 out = rc.Section.FromFile(util.PathFromRoot(r'grit/testdata/klonk.rc'),
49 'IDC_KLONKACC',
50 encoding='utf-16')
51 out_text = out.GetText().replace('\t', '')
52 out_text = out_text.replace(' ', '')
53 self.part_we_want = self.part_we_want.replace(' ', '')
54 self.failUnless(out_text.strip() == self.part_we_want.strip())
55
56
57 def testDialog(self):
58 dlg = rc.Dialog('''IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
59 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
60 CAPTION "About"
61 FONT 8, "System", 0, 0, 0x0
62 BEGIN
63 ICON IDI_KLONK,IDC_MYICON,14,9,20,20
64 LTEXT "klonk Version ""yibbee"" 1.0",IDC_STATIC,49,10,119,8,
65 SS_NOPREFIX
66 LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
67 DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
68 CONTROL "Jack ""Black"" Daniels",IDC_RADIO1,"Button",
69 BS_AUTORADIOBUTTON,46,51,84,10
70 // try a line where the ID is on the continuation line
71 LTEXT "blablablabla blablabla blablablablablablablabla blablabla",
72 ID_SMURF, whatever...
73 END
74 ''')
75 dlg.Parse()
76 self.failUnless(len(dlg.GetTextualIds()) == 7)
77 self.failUnless(len(dlg.GetCliques()) == 6)
78 self.failUnless(dlg.GetCliques()[1].GetMessage().GetRealContent() ==
79 'klonk Version "yibbee" 1.0')
80
81 transl = dlg.Translate('en')
82 self.failUnless(transl.strip() == dlg.GetText().strip())
83
84 def testAlternateSkeleton(self):
85 dlg = rc.Dialog('''IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
86 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
87 CAPTION "About"
88 FONT 8, "System", 0, 0, 0x0
89 BEGIN
90 LTEXT "Yipee skippy",IDC_STATIC,49,10,119,8,
91 SS_NOPREFIX
92 END
93 ''')
94 dlg.Parse()
95
96 alt_dlg = rc.Dialog('''IDD_ABOUTBOX DIALOGEX 040704, 17, 230, 75
97 STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
98 CAPTION "XXXXXXXXX"
99 FONT 8, "System", 0, 0, 0x0
100 BEGIN
101 LTEXT "XXXXXXXXXXXXXXXXX",IDC_STATIC,110978,10,119,8,
102 SS_NOPREFIX
103 END
104 ''')
105 alt_dlg.Parse()
106
107 transl = dlg.Translate('en', skeleton_gatherer=alt_dlg)
108 self.failUnless(transl.count('040704') and
109 transl.count('110978'))
110 self.failUnless(transl.count('Yipee skippy'))
111
112 def testMenu(self):
113 menu = rc.Menu('''IDC_KLONK MENU
114 BEGIN
115 POPUP "&File """
116 BEGIN
117 MENUITEM "E&xit", IDM_EXIT
118 MENUITEM "This be ""Klonk"" me like", ID_FILE_THISBE
119 POPUP "gonk"
120 BEGIN
121 MENUITEM "Klonk && is ""good""", ID_GONK_KLONKIS
122 END
123 MENUITEM "This is a very long menu caption to try to see if we can make the ID go to a continuation line, blablabla blablabla bla blabla blablabla blabl abla blablabla blablabla...",
124 ID_FILE_THISISAVERYLONGMENUCAPTIONTOTRYT OSEEIFWECANMAKETHEIDGOTOACONTINUATIONLINE
125 END
126 POPUP "&Help"
127 BEGIN
128 MENUITEM "&About ...", IDM_ABOUT
129 END
130 END''')
131
132 menu.Parse()
133 self.failUnless(len(menu.GetTextualIds()) == 6)
134 self.failUnless(len(menu.GetCliques()) == 1)
135 self.failUnless(len(menu.GetCliques()[0].GetMessage().GetPlaceholders()) ==
136 9)
137
138 transl = menu.Translate('en')
139 self.failUnless(transl.strip() == menu.GetText().strip())
140
141 def testVersion(self):
142 version = rc.Version('''
143 VS_VERSION_INFO VERSIONINFO
144 FILEVERSION 1,0,0,1
145 PRODUCTVERSION 1,0,0,1
146 FILEFLAGSMASK 0x3fL
147 #ifdef _DEBUG
148 FILEFLAGS 0x1L
149 #else
150 FILEFLAGS 0x0L
151 #endif
152 FILEOS 0x4L
153 FILETYPE 0x2L
154 FILESUBTYPE 0x0L
155 BEGIN
156 BLOCK "StringFileInfo"
157 BEGIN
158 BLOCK "040904e4"
159 BEGIN
160 VALUE "CompanyName", "TODO: <Company name>"
161 VALUE "FileDescription", "TODO: <File description>"
162 VALUE "FileVersion", "1.0.0.1"
163 VALUE "LegalCopyright", "TODO: (c) <Company name>. All rights reser ved."
164 VALUE "InternalName", "res_format_test.dll"
165 VALUE "OriginalFilename", "res_format_test.dll"
166 VALUE "ProductName", "TODO: <Product name>"
167 VALUE "ProductVersion", "1.0.0.1"
168 END
169 END
170 BLOCK "VarFileInfo"
171 BEGIN
172 VALUE "Translation", 0x409, 1252
173 END
174 END
175 '''.strip())
176 version.Parse()
177 self.failUnless(len(version.GetTextualIds()) == 1)
178 self.failUnless(len(version.GetCliques()) == 4)
179
180 transl = version.Translate('en')
181 self.failUnless(transl.strip() == version.GetText().strip())
182
183
184 def testRegressionDialogBox(self):
185 dialog = rc.Dialog('''
186 IDD_SIDEBAR_WEATHER_PANEL_PROPPAGE DIALOGEX 0, 0, 205, 157
187 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
188 FONT 8, "MS Shell Dlg", 400, 0, 0x1
189 BEGIN
190 EDITTEXT IDC_SIDEBAR_WEATHER_NEW_CITY,3,27,112,14,ES_AUTOHSCROLL
191 DEFPUSHBUTTON "Add Location",IDC_SIDEBAR_WEATHER_ADD,119,27,50,14
192 LISTBOX IDC_SIDEBAR_WEATHER_CURR_CITIES,3,48,127,89,
193 LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
194 PUSHBUTTON "Move Up",IDC_SIDEBAR_WEATHER_MOVE_UP,134,104,50,14
195 PUSHBUTTON "Move Down",IDC_SIDEBAR_WEATHER_MOVE_DOWN,134,121,50,14
196 PUSHBUTTON "Remove",IDC_SIDEBAR_WEATHER_DELETE,134,48,50,14
197 LTEXT "To see current weather conditions and forecasts in the USA, enter the zip code (example: 94043) or city and state (example: Mountain View, CA).",
198 IDC_STATIC,3,0,199,25
199 CONTROL "Fahrenheit",IDC_SIDEBAR_WEATHER_FAHRENHEIT,"Button",
200 BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,3,144,51,10
201 CONTROL "Celsius",IDC_SIDEBAR_WEATHER_CELSIUS,"Button",
202 BS_AUTORADIOBUTTON,57,144,38,10
203 END'''.strip())
204 dialog.Parse()
205 self.failUnless(len(dialog.GetTextualIds()) == 10)
206
207
208 def testRegressionDialogBox2(self):
209 dialog = rc.Dialog('''
210 IDD_SIDEBAR_EMAIL_PANEL_PROPPAGE DIALOG DISCARDABLE 0, 0, 264, 220
211 STYLE WS_CHILD
212 FONT 8, "MS Shell Dlg"
213 BEGIN
214 GROUPBOX "Email Filters",IDC_STATIC,7,3,250,190
215 LTEXT "Click Add Filter to create the email filter.",IDC_STATIC,16 ,41,130,9
216 PUSHBUTTON "Add Filter...",IDC_SIDEBAR_EMAIL_ADD_FILTER,196,38,50,14
217 PUSHBUTTON "Remove",IDC_SIDEBAR_EMAIL_REMOVE,196,174,50,14
218 PUSHBUTTON "", IDC_SIDEBAR_EMAIL_HIDDEN, 200, 178, 5, 5, NOT WS_VISIBLE
219 LISTBOX IDC_SIDEBAR_EMAIL_LIST,16,60,230,108,
220 LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
221 LTEXT "You can prevent certain emails from showing up in the sideb ar with a filter.",
222 IDC_STATIC,16,18,234,18
223 END'''.strip())
224 dialog.Parse()
225 self.failUnless('IDC_SIDEBAR_EMAIL_HIDDEN' in dialog.GetTextualIds())
226
227
228 def testRegressionMenuId(self):
229 menu = rc.Menu('''
230 IDR_HYPERMENU_FOLDER MENU
231 BEGIN
232 POPUP "HyperFolder"
233 BEGIN
234 MENUITEM "Open Containing Folder", IDM_OPENFOLDER
235 END
236 END'''.strip())
237 menu.Parse()
238 self.failUnless(len(menu.GetTextualIds()) == 2)
239
240 def testRegressionNewlines(self):
241 menu = rc.Menu('''
242 IDR_HYPERMENU_FOLDER MENU
243 BEGIN
244 POPUP "Hyper\\nFolder"
245 BEGIN
246 MENUITEM "Open Containing Folder", IDM_OPENFOLDER
247 END
248 END'''.strip())
249 menu.Parse()
250 transl = menu.Translate('en')
251 # Shouldn't find \\n (the \n shouldn't be changed to \\n)
252 self.failUnless(transl.find('\\\\n') == -1)
253
254 def testRegressionTabs(self):
255 menu = rc.Menu('''
256 IDR_HYPERMENU_FOLDER MENU
257 BEGIN
258 POPUP "Hyper\\tFolder"
259 BEGIN
260 MENUITEM "Open Containing Folder", IDM_OPENFOLDER
261 END
262 END'''.strip())
263 menu.Parse()
264 transl = menu.Translate('en')
265 # Shouldn't find \\t (the \t shouldn't be changed to \\t)
266 self.failUnless(transl.find('\\\\t') == -1)
267
268 def testEscapeUnescape(self):
269 original = 'Hello "bingo"\n How\\are\\you\\n?'
270 escaped = rc.Section.Escape(original)
271 self.failUnless(escaped == 'Hello ""bingo""\\n How\\\\are\\\\you\\\\n?')
272 unescaped = rc.Section.UnEscape(escaped)
273 self.failUnless(unescaped == original)
274
275 def testRegressionPathsWithSlashN(self):
276 original = '..\\\\..\\\\trs\\\\res\\\\nav_first.gif'
277 unescaped = rc.Section.UnEscape(original)
278 self.failUnless(unescaped == '..\\..\\trs\\res\\nav_first.gif')
279
280 def testRegressionDialogItemsTextOnly(self):
281 dialog = rc.Dialog('''IDD_OPTIONS_SEARCH DIALOGEX 0, 0, 280, 292
282 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
283 WS_DISABLED | WS_CAPTION | WS_SYSMENU
284 CAPTION "Search"
285 FONT 8, "MS Shell Dlg", 400, 0, 0x1
286 BEGIN
287 GROUPBOX "Select search buttons and options",-1,7,5,266,262
288 CONTROL "",IDC_OPTIONS,"SysTreeView32",TVS_DISABLEDRAGDROP |
289 WS_BORDER | WS_TABSTOP | 0x800,16,19,248,218
290 LTEXT "Use Google site:",-1,26,248,52,8
291 COMBOBOX IDC_GOOGLE_HOME,87,245,177,256,CBS_DROPDOWNLIST |
292 WS_VSCROLL | WS_TABSTOP
293 PUSHBUTTON "Restore Defaults...",IDC_RESET,187,272,86,14
294 END''')
295 dialog.Parse()
296 translateables = [c.GetMessage().GetRealContent()
297 for c in dialog.GetCliques()]
298 self.failUnless('Select search buttons and options' in translateables)
299 self.failUnless('Use Google site:' in translateables)
300
301 def testAccelerators(self):
302 acc = rc.Accelerators('''\
303 IDR_ACCELERATOR1 ACCELERATORS
304 BEGIN
305 "^C", ID_ACCELERATOR32770, ASCII, NOINVERT
306 "^V", ID_ACCELERATOR32771, ASCII, NOINVERT
307 VK_INSERT, ID_ACCELERATOR32772, VIRTKEY, CONTROL, NOINVERT
308 END
309 ''')
310 acc.Parse()
311 self.failUnless(len(acc.GetTextualIds()) == 4)
312 self.failUnless(len(acc.GetCliques()) == 0)
313
314 transl = acc.Translate('en')
315 self.failUnless(transl.strip() == acc.GetText().strip())
316
317
318 def testRegressionEmptyString(self):
319 dlg = rc.Dialog('''\
320 IDD_CONFIRM_QUIT_GD_DLG DIALOGEX 0, 0, 267, 108
321 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
322 WS_CAPTION
323 EXSTYLE WS_EX_TOPMOST
324 CAPTION "Google Desktop"
325 FONT 8, "MS Shell Dlg", 400, 0, 0x1
326 BEGIN
327 DEFPUSHBUTTON "&Yes",IDYES,82,87,50,14
328 PUSHBUTTON "&No",IDNO,136,87,50,14
329 ICON 32514,IDC_STATIC,7,9,21,20
330 EDITTEXT IDC_TEXTBOX,34,7,231,60,ES_MULTILINE | ES_READONLY | NOT WS_ BORDER
331 CONTROL "",
332 IDC_ENABLE_GD_AUTOSTART,"Button",BS_AUTOCHECKBOX |
333 WS_TABSTOP,33,70,231,10
334 END''')
335 dlg.Parse()
336
337 def Check():
338 self.failUnless(transl.count('IDC_ENABLE_GD_AUTOSTART'))
339 self.failUnless(transl.count('END'))
340
341 transl = dlg.Translate('de', pseudo_if_not_available=True,
342 fallback_to_english=True)
343 Check()
344 transl = dlg.Translate('de', pseudo_if_not_available=True,
345 fallback_to_english=False)
346 Check()
347 transl = dlg.Translate('de', pseudo_if_not_available=False,
348 fallback_to_english=True)
349 Check()
350 transl = dlg.Translate('de', pseudo_if_not_available=False,
351 fallback_to_english=False)
352 Check()
353 transl = dlg.Translate('en', pseudo_if_not_available=True,
354 fallback_to_english=True)
355 Check()
356 transl = dlg.Translate('en', pseudo_if_not_available=True,
357 fallback_to_english=False)
358 Check()
359 transl = dlg.Translate('en', pseudo_if_not_available=False,
360 fallback_to_english=True)
361 Check()
362 transl = dlg.Translate('en', pseudo_if_not_available=False,
363 fallback_to_english=False)
364 Check()
365
366
367 if __name__ == '__main__':
368 unittest.main()
OLDNEW
« no previous file with comments | « grit/gather/rc.py ('k') | grit/gather/regexp.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698