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

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