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

Unified Diff: tools/grit/grit/tool/android2grd_unittest.py

Issue 1410853008: Move grit from DEPS into src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webview licenses 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/grit/grit/tool/android2grd.py ('k') | tools/grit/grit/tool/build.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/grit/grit/tool/android2grd_unittest.py
diff --git a/tools/grit/grit/tool/android2grd_unittest.py b/tools/grit/grit/tool/android2grd_unittest.py
new file mode 100755
index 0000000000000000000000000000000000000000..511861633891c35634a501da4b35ea0dbe68bb66
--- /dev/null
+++ b/tools/grit/grit/tool/android2grd_unittest.py
@@ -0,0 +1,180 @@
+#!/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.tool.android2grd'''
+
+import os
+import sys
+if __name__ == '__main__':
+ sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
+
+import unittest
+import xml.dom.minidom
+
+from grit import grd_reader
+from grit import util
+from grit.node import empty
+from grit.node import io
+from grit.node import message
+from grit.node import misc
+from grit.tool import android2grd
+
+
+class Android2GrdUnittest(unittest.TestCase):
+
+ def __Parse(self, xml_string):
+ return xml.dom.minidom.parseString(xml_string).childNodes[0]
+
+ def testCreateTclibMessage(self):
+ tool = android2grd.Android2Grd()
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="simple">A simple string</string>'''))
+ self.assertEqual(msg.GetRealContent(), 'A simple string')
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="outer_whitespace">
+ Strip leading/trailing whitespace
+ </string>'''))
+ self.assertEqual(msg.GetRealContent(), 'Strip leading/trailing whitespace')
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="inner_whitespace">Fold multiple spaces</string>'''))
+ self.assertEqual(msg.GetRealContent(), 'Fold multiple spaces')
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="escaped_spaces">Retain \n escaped\t spaces</string>'''))
+ self.assertEqual(msg.GetRealContent(), 'Retain \n escaped\t spaces')
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="quotes"> " Quotes preserve
+ whitespace" but only for "enclosed elements "
+ </string>'''))
+ self.assertEqual(msg.GetRealContent(), ''' Quotes preserve
+ whitespace but only for enclosed elements ''')
+ msg = tool.CreateTclibMessage(self.__Parse(
+ r'''<string name="escaped_characters">Escaped characters: \"\'\\\t\n'''
+ '</string>'))
+ self.assertEqual(msg.GetRealContent(), '''Escaped characters: "'\\\t\n''')
+ msg = tool.CreateTclibMessage(self.__Parse(
+ '<string xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" '
+ 'name="placeholders">'
+ 'Open <xliff:g id="FILENAME" example="internet.html">%s</xliff:g>?'
+ '</string>'))
+ self.assertEqual(msg.GetRealContent(), 'Open %s?')
+ self.assertEqual(len(msg.GetPlaceholders()), 1)
+ self.assertEqual(msg.GetPlaceholders()[0].presentation, 'FILENAME')
+ self.assertEqual(msg.GetPlaceholders()[0].original, '%s')
+ self.assertEqual(msg.GetPlaceholders()[0].example, 'internet.html')
+ msg = tool.CreateTclibMessage(self.__Parse(r'''
+ <string name="comment">Contains a <!-- ignore this --> comment
+ </string>'''))
+ self.assertEqual(msg.GetRealContent(), 'Contains a comment')
+
+ def testIsTranslatable(self):
+ tool = android2grd.Android2Grd()
+ string_el = self.__Parse('<string>Hi</string>')
+ self.assertTrue(tool.IsTranslatable(string_el))
+ string_el = self.__Parse(
+ '<string translatable="true">Hi</string>')
+ self.assertTrue(tool.IsTranslatable(string_el))
+ string_el = self.__Parse(
+ '<string translatable="false">Hi</string>')
+ self.assertFalse(tool.IsTranslatable(string_el))
+
+ def __ParseAndroidXml(self, options = []):
+ tool = android2grd.Android2Grd()
+
+ tool.ParseOptions(options)
+
+ android_path = util.PathFromRoot('grit/testdata/android.xml')
+ with open(android_path) as android_file:
+ android_dom = xml.dom.minidom.parse(android_file)
+
+ grd = tool.AndroidDomToGrdDom(android_dom)
+ self.assertTrue(isinstance(grd, misc.GritNode))
+
+ return grd
+
+ def testAndroidDomToGrdDom(self):
+ grd = self.__ParseAndroidXml(['--languages', 'en-US,en-GB,ru'])
+
+ # Check that the structure of the GritNode is as expected.
+ messages = grd.GetChildrenOfType(message.MessageNode)
+ translations = grd.GetChildrenOfType(empty.TranslationsNode)
+ files = grd.GetChildrenOfType(io.FileNode)
+
+ self.assertEqual(len(translations), 1)
+ self.assertEqual(len(files), 3)
+ self.assertEqual(len(messages), 5)
+
+ # Check that a message node is constructed correctly.
+ msg = filter(lambda x: x.GetTextualIds()[0] == "IDS_PLACEHOLDERS", messages)
+ self.assertTrue(msg)
+ msg = msg[0]
+
+ self.assertTrue(msg.IsTranslateable())
+ self.assertEqual(msg.attrs["desc"], "A string with placeholder.")
+
+ def testTranslatableAttribute(self):
+ grd = self.__ParseAndroidXml([])
+ messages = grd.GetChildrenOfType(message.MessageNode)
+ msgs = filter(lambda x: x.GetTextualIds()[0] == "IDS_CONSTANT", messages)
+ self.assertTrue(msgs)
+ self.assertFalse(msgs[0].IsTranslateable())
+
+ def testTranslations(self):
+ grd = self.__ParseAndroidXml(['--languages', 'en-US,en-GB,ru,id'])
+
+ files = grd.GetChildrenOfType(io.FileNode)
+ us_file = filter(lambda x: x.attrs['lang'] == 'en-US', files)
+ self.assertTrue(us_file)
+ self.assertEqual(us_file[0].GetInputPath(),
+ 'chrome_android_strings_en-US.xtb')
+
+ id_file = filter(lambda x: x.attrs['lang'] == 'id', files)
+ self.assertTrue(id_file)
+ self.assertEqual(id_file[0].GetInputPath(),
+ 'chrome_android_strings_id.xtb')
+
+ def testOutputs(self):
+ grd = self.__ParseAndroidXml(['--languages', 'en-US,ru,id',
+ '--rc-dir', 'rc/dir',
+ '--header-dir', 'header/dir',
+ '--xtb-dir', 'xtb/dir',
+ '--xml-dir', 'xml/dir'])
+
+ outputs = grd.GetChildrenOfType(io.OutputNode)
+ self.assertEqual(len(outputs), 7)
+
+ header_outputs = filter(lambda x: x.GetType() == 'rc_header', outputs)
+ rc_outputs = filter(lambda x: x.GetType() == 'rc_all', outputs)
+ xml_outputs = filter(lambda x: x.GetType() == 'android', outputs)
+
+ self.assertEqual(len(header_outputs), 1)
+ self.assertEqual(len(rc_outputs), 3)
+ self.assertEqual(len(xml_outputs), 3)
+
+ # The header node should have an "<emit>" child and the proper filename.
+ self.assertTrue(header_outputs[0].GetChildrenOfType(io.EmitNode))
+ self.assertEqual(util.normpath(header_outputs[0].GetFilename()),
+ util.normpath('header/dir/chrome_android_strings.h'))
+
+ id_rc = filter(lambda x: x.GetLanguage() == 'id', rc_outputs)
+ id_xml = filter(lambda x: x.GetLanguage() == 'id', xml_outputs)
+ self.assertTrue(id_rc)
+ self.assertTrue(id_xml)
+ self.assertEqual(util.normpath(id_rc[0].GetFilename()),
+ util.normpath('rc/dir/chrome_android_strings_id.rc'))
+ self.assertEqual(util.normpath(id_xml[0].GetFilename()),
+ util.normpath('xml/dir/values-in/strings.xml'))
+
+ us_rc = filter(lambda x: x.GetLanguage() == 'en-US', rc_outputs)
+ us_xml = filter(lambda x: x.GetLanguage() == 'en-US', xml_outputs)
+ self.assertTrue(us_rc)
+ self.assertTrue(us_xml)
+ self.assertEqual(util.normpath(us_rc[0].GetFilename()),
+ util.normpath('rc/dir/chrome_android_strings_en-US.rc'))
+ self.assertEqual(util.normpath(us_xml[0].GetFilename()),
+ util.normpath('xml/dir/values-en-rUS/strings.xml'))
+
+
+if __name__ == '__main__':
+ unittest.main()
« no previous file with comments | « tools/grit/grit/tool/android2grd.py ('k') | tools/grit/grit/tool/build.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698