| Index: grit/gather/rc_unittest.py
|
| ===================================================================
|
| --- grit/gather/rc_unittest.py (revision 202)
|
| +++ grit/gather/rc_unittest.py (working copy)
|
| @@ -1,370 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -'''Unit tests for grit.gather.rc'''
|
| -
|
| -
|
| -import os
|
| -import sys
|
| -if __name__ == '__main__':
|
| - sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
|
| -
|
| -import unittest
|
| -import StringIO
|
| -
|
| -from grit.gather import rc
|
| -from grit import util
|
| -
|
| -
|
| -class RcUnittest(unittest.TestCase):
|
| -
|
| - part_we_want = '''IDC_KLONKACC ACCELERATORS
|
| -BEGIN
|
| - "?", IDM_ABOUT, ASCII, ALT
|
| - "/", IDM_ABOUT, ASCII, ALT
|
| -END'''
|
| -
|
| - def testSectionFromFile(self):
|
| - buf = '''IDC_SOMETHINGELSE BINGO
|
| -BEGIN
|
| - BLA BLA
|
| - BLA BLA
|
| -END
|
| -%s
|
| -
|
| -IDC_KLONK BINGOBONGO
|
| -BEGIN
|
| - HONGO KONGO
|
| -END
|
| -''' % self.part_we_want
|
| -
|
| - f = StringIO.StringIO(buf)
|
| -
|
| - out = rc.Section(f, 'IDC_KLONKACC')
|
| - out.ReadSection()
|
| - self.failUnless(out.GetText() == self.part_we_want)
|
| -
|
| - out = rc.Section(util.PathFromRoot(r'grit/testdata/klonk.rc'),
|
| - 'IDC_KLONKACC',
|
| - encoding='utf-16')
|
| - out.ReadSection()
|
| - out_text = out.GetText().replace('\t', '')
|
| - out_text = out_text.replace(' ', '')
|
| - self.part_we_want = self.part_we_want.replace(' ', '')
|
| - self.failUnless(out_text.strip() == self.part_we_want.strip())
|
| -
|
| -
|
| - def testDialog(self):
|
| - dlg = rc.Dialog(StringIO.StringIO('''IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
|
| -STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
| -CAPTION "About"
|
| -FONT 8, "System", 0, 0, 0x0
|
| -BEGIN
|
| - ICON IDI_KLONK,IDC_MYICON,14,9,20,20
|
| - LTEXT "klonk Version ""yibbee"" 1.0",IDC_STATIC,49,10,119,8,
|
| - SS_NOPREFIX
|
| - LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
|
| - DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
|
| - CONTROL "Jack ""Black"" Daniels",IDC_RADIO1,"Button",
|
| - BS_AUTORADIOBUTTON,46,51,84,10
|
| - // try a line where the ID is on the continuation line
|
| - LTEXT "blablablabla blablabla blablablablablablablabla blablabla",
|
| - ID_SMURF, whatever...
|
| -END
|
| -'''), 'IDD_ABOUTBOX')
|
| - dlg.Parse()
|
| - self.failUnless(len(dlg.GetTextualIds()) == 7)
|
| - self.failUnless(len(dlg.GetCliques()) == 6)
|
| - self.failUnless(dlg.GetCliques()[1].GetMessage().GetRealContent() ==
|
| - 'klonk Version "yibbee" 1.0')
|
| -
|
| - transl = dlg.Translate('en')
|
| - self.failUnless(transl.strip() == dlg.GetText().strip())
|
| -
|
| - def testAlternateSkeleton(self):
|
| - dlg = rc.Dialog(StringIO.StringIO('''IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
|
| -STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
| -CAPTION "About"
|
| -FONT 8, "System", 0, 0, 0x0
|
| -BEGIN
|
| - LTEXT "Yipee skippy",IDC_STATIC,49,10,119,8,
|
| - SS_NOPREFIX
|
| -END
|
| -'''), 'IDD_ABOUTBOX')
|
| - dlg.Parse()
|
| -
|
| - alt_dlg = rc.Dialog(StringIO.StringIO('''IDD_ABOUTBOX DIALOGEX 040704, 17, 230, 75
|
| -STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
| -CAPTION "XXXXXXXXX"
|
| -FONT 8, "System", 0, 0, 0x0
|
| -BEGIN
|
| - LTEXT "XXXXXXXXXXXXXXXXX",IDC_STATIC,110978,10,119,8,
|
| - SS_NOPREFIX
|
| -END
|
| -'''), 'IDD_ABOUTBOX')
|
| - alt_dlg.Parse()
|
| -
|
| - transl = dlg.Translate('en', skeleton_gatherer=alt_dlg)
|
| - self.failUnless(transl.count('040704') and
|
| - transl.count('110978'))
|
| - self.failUnless(transl.count('Yipee skippy'))
|
| -
|
| - def testMenu(self):
|
| - menu = rc.Menu(StringIO.StringIO('''IDC_KLONK MENU
|
| -BEGIN
|
| - POPUP "&File """
|
| - BEGIN
|
| - MENUITEM "E&xit", IDM_EXIT
|
| - MENUITEM "This be ""Klonk"" me like", ID_FILE_THISBE
|
| - POPUP "gonk"
|
| - BEGIN
|
| - MENUITEM "Klonk && is ""good""", ID_GONK_KLONKIS
|
| - END
|
| - 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 blablabla blablabla blablabla...",
|
| - ID_FILE_THISISAVERYLONGMENUCAPTIONTOTRYTOSEEIFWECANMAKETHEIDGOTOACONTINUATIONLINE
|
| - END
|
| - POPUP "&Help"
|
| - BEGIN
|
| - MENUITEM "&About ...", IDM_ABOUT
|
| - END
|
| -END'''), 'IDC_KLONK')
|
| -
|
| - menu.Parse()
|
| - self.failUnless(len(menu.GetTextualIds()) == 6)
|
| - self.failUnless(len(menu.GetCliques()) == 1)
|
| - self.failUnless(len(menu.GetCliques()[0].GetMessage().GetPlaceholders()) ==
|
| - 9)
|
| -
|
| - transl = menu.Translate('en')
|
| - self.failUnless(transl.strip() == menu.GetText().strip())
|
| -
|
| - def testVersion(self):
|
| - version = rc.Version(StringIO.StringIO('''
|
| -VS_VERSION_INFO VERSIONINFO
|
| - FILEVERSION 1,0,0,1
|
| - PRODUCTVERSION 1,0,0,1
|
| - FILEFLAGSMASK 0x3fL
|
| -#ifdef _DEBUG
|
| - FILEFLAGS 0x1L
|
| -#else
|
| - FILEFLAGS 0x0L
|
| -#endif
|
| - FILEOS 0x4L
|
| - FILETYPE 0x2L
|
| - FILESUBTYPE 0x0L
|
| -BEGIN
|
| - BLOCK "StringFileInfo"
|
| - BEGIN
|
| - BLOCK "040904e4"
|
| - BEGIN
|
| - VALUE "CompanyName", "TODO: <Company name>"
|
| - VALUE "FileDescription", "TODO: <File description>"
|
| - VALUE "FileVersion", "1.0.0.1"
|
| - VALUE "LegalCopyright", "TODO: (c) <Company name>. All rights reserved."
|
| - VALUE "InternalName", "res_format_test.dll"
|
| - VALUE "OriginalFilename", "res_format_test.dll"
|
| - VALUE "ProductName", "TODO: <Product name>"
|
| - VALUE "ProductVersion", "1.0.0.1"
|
| - END
|
| - END
|
| - BLOCK "VarFileInfo"
|
| - BEGIN
|
| - VALUE "Translation", 0x409, 1252
|
| - END
|
| -END
|
| -'''.strip()), 'VS_VERSION_INFO')
|
| - version.Parse()
|
| - self.failUnless(len(version.GetTextualIds()) == 1)
|
| - self.failUnless(len(version.GetCliques()) == 4)
|
| -
|
| - transl = version.Translate('en')
|
| - self.failUnless(transl.strip() == version.GetText().strip())
|
| -
|
| -
|
| - def testRegressionDialogBox(self):
|
| - dialog = rc.Dialog(StringIO.StringIO('''
|
| -IDD_SIDEBAR_WEATHER_PANEL_PROPPAGE DIALOGEX 0, 0, 205, 157
|
| -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
|
| -FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
| -BEGIN
|
| - EDITTEXT IDC_SIDEBAR_WEATHER_NEW_CITY,3,27,112,14,ES_AUTOHSCROLL
|
| - DEFPUSHBUTTON "Add Location",IDC_SIDEBAR_WEATHER_ADD,119,27,50,14
|
| - LISTBOX IDC_SIDEBAR_WEATHER_CURR_CITIES,3,48,127,89,
|
| - LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
| - PUSHBUTTON "Move Up",IDC_SIDEBAR_WEATHER_MOVE_UP,134,104,50,14
|
| - PUSHBUTTON "Move Down",IDC_SIDEBAR_WEATHER_MOVE_DOWN,134,121,50,14
|
| - PUSHBUTTON "Remove",IDC_SIDEBAR_WEATHER_DELETE,134,48,50,14
|
| - 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).",
|
| - IDC_STATIC,3,0,199,25
|
| - CONTROL "Fahrenheit",IDC_SIDEBAR_WEATHER_FAHRENHEIT,"Button",
|
| - BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,3,144,51,10
|
| - CONTROL "Celsius",IDC_SIDEBAR_WEATHER_CELSIUS,"Button",
|
| - BS_AUTORADIOBUTTON,57,144,38,10
|
| -END'''.strip()), 'IDD_SIDEBAR_WEATHER_PANEL_PROPPAGE')
|
| - dialog.Parse()
|
| - self.failUnless(len(dialog.GetTextualIds()) == 10)
|
| -
|
| -
|
| - def testRegressionDialogBox2(self):
|
| - dialog = rc.Dialog(StringIO.StringIO('''
|
| -IDD_SIDEBAR_EMAIL_PANEL_PROPPAGE DIALOG DISCARDABLE 0, 0, 264, 220
|
| -STYLE WS_CHILD
|
| -FONT 8, "MS Shell Dlg"
|
| -BEGIN
|
| - GROUPBOX "Email Filters",IDC_STATIC,7,3,250,190
|
| - LTEXT "Click Add Filter to create the email filter.",IDC_STATIC,16,41,130,9
|
| - PUSHBUTTON "Add Filter...",IDC_SIDEBAR_EMAIL_ADD_FILTER,196,38,50,14
|
| - PUSHBUTTON "Remove",IDC_SIDEBAR_EMAIL_REMOVE,196,174,50,14
|
| - PUSHBUTTON "", IDC_SIDEBAR_EMAIL_HIDDEN, 200, 178, 5, 5, NOT WS_VISIBLE
|
| - LISTBOX IDC_SIDEBAR_EMAIL_LIST,16,60,230,108,
|
| - LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
| - LTEXT "You can prevent certain emails from showing up in the sidebar with a filter.",
|
| - IDC_STATIC,16,18,234,18
|
| -END'''.strip()), 'IDD_SIDEBAR_EMAIL_PANEL_PROPPAGE')
|
| - dialog.Parse()
|
| - self.failUnless('IDC_SIDEBAR_EMAIL_HIDDEN' in dialog.GetTextualIds())
|
| -
|
| -
|
| - def testRegressionMenuId(self):
|
| - menu = rc.Menu(StringIO.StringIO('''
|
| -IDR_HYPERMENU_FOLDER MENU
|
| -BEGIN
|
| - POPUP "HyperFolder"
|
| - BEGIN
|
| - MENUITEM "Open Containing Folder", IDM_OPENFOLDER
|
| - END
|
| -END'''.strip()), 'IDR_HYPERMENU_FOLDER')
|
| - menu.Parse()
|
| - self.failUnless(len(menu.GetTextualIds()) == 2)
|
| -
|
| - def testRegressionNewlines(self):
|
| - menu = rc.Menu(StringIO.StringIO('''
|
| -IDR_HYPERMENU_FOLDER MENU
|
| -BEGIN
|
| - POPUP "Hyper\\nFolder"
|
| - BEGIN
|
| - MENUITEM "Open Containing Folder", IDM_OPENFOLDER
|
| - END
|
| -END'''.strip()), 'IDR_HYPERMENU_FOLDER')
|
| - menu.Parse()
|
| - transl = menu.Translate('en')
|
| - # Shouldn't find \\n (the \n shouldn't be changed to \\n)
|
| - self.failUnless(transl.find('\\\\n') == -1)
|
| -
|
| - def testRegressionTabs(self):
|
| - menu = rc.Menu(StringIO.StringIO('''
|
| -IDR_HYPERMENU_FOLDER MENU
|
| -BEGIN
|
| - POPUP "Hyper\\tFolder"
|
| - BEGIN
|
| - MENUITEM "Open Containing Folder", IDM_OPENFOLDER
|
| - END
|
| -END'''.strip()), 'IDR_HYPERMENU_FOLDER')
|
| - menu.Parse()
|
| - transl = menu.Translate('en')
|
| - # Shouldn't find \\t (the \t shouldn't be changed to \\t)
|
| - self.failUnless(transl.find('\\\\t') == -1)
|
| -
|
| - def testEscapeUnescape(self):
|
| - original = 'Hello "bingo"\n How\\are\\you\\n?'
|
| - escaped = rc.Section.Escape(original)
|
| - self.failUnless(escaped == 'Hello ""bingo""\\n How\\\\are\\\\you\\\\n?')
|
| - unescaped = rc.Section.UnEscape(escaped)
|
| - self.failUnless(unescaped == original)
|
| -
|
| - def testRegressionPathsWithSlashN(self):
|
| - original = '..\\\\..\\\\trs\\\\res\\\\nav_first.gif'
|
| - unescaped = rc.Section.UnEscape(original)
|
| - self.failUnless(unescaped == '..\\..\\trs\\res\\nav_first.gif')
|
| -
|
| - def testRegressionDialogItemsTextOnly(self):
|
| - dialog = rc.Dialog(StringIO.StringIO('''IDD_OPTIONS_SEARCH DIALOGEX 0, 0, 280, 292
|
| -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
|
| - WS_DISABLED | WS_CAPTION | WS_SYSMENU
|
| -CAPTION "Search"
|
| -FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
| -BEGIN
|
| - GROUPBOX "Select search buttons and options",-1,7,5,266,262
|
| - CONTROL "",IDC_OPTIONS,"SysTreeView32",TVS_DISABLEDRAGDROP |
|
| - WS_BORDER | WS_TABSTOP | 0x800,16,19,248,218
|
| - LTEXT "Use Google site:",-1,26,248,52,8
|
| - COMBOBOX IDC_GOOGLE_HOME,87,245,177,256,CBS_DROPDOWNLIST |
|
| - WS_VSCROLL | WS_TABSTOP
|
| - PUSHBUTTON "Restore Defaults...",IDC_RESET,187,272,86,14
|
| -END'''), 'IDD_OPTIONS_SEARCH')
|
| - dialog.Parse()
|
| - translateables = [c.GetMessage().GetRealContent()
|
| - for c in dialog.GetCliques()]
|
| - self.failUnless('Select search buttons and options' in translateables)
|
| - self.failUnless('Use Google site:' in translateables)
|
| -
|
| - def testAccelerators(self):
|
| - acc = rc.Accelerators(StringIO.StringIO('''\
|
| -IDR_ACCELERATOR1 ACCELERATORS
|
| -BEGIN
|
| - "^C", ID_ACCELERATOR32770, ASCII, NOINVERT
|
| - "^V", ID_ACCELERATOR32771, ASCII, NOINVERT
|
| - VK_INSERT, ID_ACCELERATOR32772, VIRTKEY, CONTROL, NOINVERT
|
| -END
|
| -'''), 'IDR_ACCELERATOR1')
|
| - acc.Parse()
|
| - self.failUnless(len(acc.GetTextualIds()) == 4)
|
| - self.failUnless(len(acc.GetCliques()) == 0)
|
| -
|
| - transl = acc.Translate('en')
|
| - self.failUnless(transl.strip() == acc.GetText().strip())
|
| -
|
| -
|
| - def testRegressionEmptyString(self):
|
| - dlg = rc.Dialog(StringIO.StringIO('''\
|
| -IDD_CONFIRM_QUIT_GD_DLG DIALOGEX 0, 0, 267, 108
|
| -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
|
| - WS_CAPTION
|
| -EXSTYLE WS_EX_TOPMOST
|
| -CAPTION "Google Desktop"
|
| -FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
| -BEGIN
|
| - DEFPUSHBUTTON "&Yes",IDYES,82,87,50,14
|
| - PUSHBUTTON "&No",IDNO,136,87,50,14
|
| - ICON 32514,IDC_STATIC,7,9,21,20
|
| - EDITTEXT IDC_TEXTBOX,34,7,231,60,ES_MULTILINE | ES_READONLY | NOT WS_BORDER
|
| - CONTROL "",
|
| - IDC_ENABLE_GD_AUTOSTART,"Button",BS_AUTOCHECKBOX |
|
| - WS_TABSTOP,33,70,231,10
|
| -END'''), 'IDD_CONFIRM_QUIT_GD_DLG')
|
| - dlg.Parse()
|
| -
|
| - def Check():
|
| - self.failUnless(transl.count('IDC_ENABLE_GD_AUTOSTART'))
|
| - self.failUnless(transl.count('END'))
|
| -
|
| - transl = dlg.Translate('de', pseudo_if_not_available=True,
|
| - fallback_to_english=True)
|
| - Check()
|
| - transl = dlg.Translate('de', pseudo_if_not_available=True,
|
| - fallback_to_english=False)
|
| - Check()
|
| - transl = dlg.Translate('de', pseudo_if_not_available=False,
|
| - fallback_to_english=True)
|
| - Check()
|
| - transl = dlg.Translate('de', pseudo_if_not_available=False,
|
| - fallback_to_english=False)
|
| - Check()
|
| - transl = dlg.Translate('en', pseudo_if_not_available=True,
|
| - fallback_to_english=True)
|
| - Check()
|
| - transl = dlg.Translate('en', pseudo_if_not_available=True,
|
| - fallback_to_english=False)
|
| - Check()
|
| - transl = dlg.Translate('en', pseudo_if_not_available=False,
|
| - fallback_to_english=True)
|
| - Check()
|
| - transl = dlg.Translate('en', pseudo_if_not_available=False,
|
| - fallback_to_english=False)
|
| - Check()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - unittest.main()
|
|
|