| #!/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 xmb' tool.''' |
| |
| import os |
| import sys |
| if __name__ == '__main__': |
| sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) |
| |
| import unittest |
| import StringIO |
| |
| from grit import grd_reader |
| from grit import util |
| from grit.tool import xmb |
| |
| |
| class XmbUnittest(unittest.TestCase): |
| def setUp(self): |
| self.res_tree = grd_reader.Parse( |
| StringIO.StringIO(u'''<?xml version="1.0" encoding="UTF-8"?> |
| <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> |
| <release seq="3"> |
| <includes> |
| <include type="gif" name="ID_LOGO" file="images/logo.gif" /> |
| </includes> |
| <messages> |
| <message name="GOOD" desc="sub" sub_variable="true"> |
| excellent |
| </message> |
| <message name="IDS_GREETING" desc="Printed to greet the currently logged in user"> |
| Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, are you doing [GOOD] today? |
| </message> |
| <message name="IDS_BONGOBINGO"> |
| Yibbee |
| </message> |
| <message name="IDS_UNICODE"> |
| Ol\xe1, \u4eca\u65e5\u306f! \U0001F60A |
| </message> |
| </messages> |
| <structures> |
| <structure type="dialog" name="IDD_SPACYBOX" encoding="utf-16" file="grit/testdata/klonk.rc" /> |
| </structures> |
| </release> |
| </grit>'''.encode('utf-8')), '.') |
| self.xmb_file = StringIO.StringIO() |
| |
| def testNormalOutput(self): |
| xmb.OutputXmb().Process(self.res_tree, self.xmb_file) |
| output = self.xmb_file.getvalue().decode('utf-8') |
| self.failUnless(output.count('Joi')) |
| self.failUnless(output.count('Yibbee')) |
| self.failUnless(output.count(u'Ol\xe1, \u4eca\u65e5\u306f! \U0001F60A')) |
| |
| def testLimitList(self): |
| limit_file = StringIO.StringIO( |
| 'IDS_BONGOBINGO\nIDS_DOES_NOT_EXIST\nIDS_ALSO_DOES_NOT_EXIST') |
| xmb.OutputXmb().Process(self.res_tree, self.xmb_file, limit_file, False) |
| output = self.xmb_file.getvalue() |
| self.failUnless(output.count('Yibbee')) |
| self.failUnless(not output.count('Joi')) |
| |
| def testLimitGrd(self): |
| limit_file = StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?> |
| <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> |
| <release seq="3"> |
| <messages> |
| <message name="IDS_GREETING" desc="Printed to greet the currently logged in user"> |
| Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing today? |
| </message> |
| </messages> |
| </release> |
| </grit>''') |
| tool = xmb.OutputXmb() |
| class DummyOpts(object): |
| extra_verbose = False |
| tool.o = DummyOpts() |
| tool.Process(self.res_tree, self.xmb_file, limit_file, True, dir='.') |
| output = self.xmb_file.getvalue() |
| self.failUnless(output.count('Joi')) |
| self.failUnless(not output.count('Yibbee')) |
| |
| def testSubstitution(self): |
| self.res_tree.SetOutputLanguage('en') |
| os.chdir(util.PathFromRoot('.')) # so it can find klonk.rc |
| self.res_tree.RunGatherers() |
| xmb.OutputXmb().Process(self.res_tree, self.xmb_file) |
| output = self.xmb_file.getvalue() |
| self.failUnless(output.count( |
| '<ph name="GOOD_1"><ex>excellent</ex>[GOOD]</ph>')) |
| |
| def testLeadingTrailingWhitespace(self): |
| # Regression test for problems outputting messages with leading or |
| # trailing whitespace (these come in via structures only, as |
| # message nodes already strip and store whitespace). |
| self.res_tree.SetOutputLanguage('en') |
| os.chdir(util.PathFromRoot('.')) # so it can find klonk.rc |
| self.res_tree.RunGatherers() |
| xmb.OutputXmb().Process(self.res_tree, self.xmb_file) |
| output = self.xmb_file.getvalue() |
| self.failUnless(output.count('OK ? </msg>')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |