| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unittest for js_map_format.py. | 6 """Unittest for chrome_messages_json.py. |
| 7 """ | 7 """ |
| 8 | 8 |
| 9 import os | 9 import os |
| 10 import sys | 10 import sys |
| 11 if __name__ == '__main__': | 11 if __name__ == '__main__': |
| 12 sys.path[0] = os.path.abspath(os.path.join(sys.path[0], '../..')) | 12 sys.path[0] = os.path.abspath(os.path.join(sys.path[0], '../..')) |
| 13 | 13 |
| 14 import unittest | 14 import unittest |
| 15 import StringIO | 15 import StringIO |
| 16 | 16 |
| 17 from grit import grd_reader | 17 from grit import grd_reader |
| 18 from grit import util | 18 from grit import util |
| 19 from grit.tool import build | 19 from grit.tool import build |
| 20 | 20 |
| 21 | 21 class ChromeMessagesJsonFormatUnittest(unittest.TestCase): |
| 22 class JsMapFormatUnittest(unittest.TestCase): | |
| 23 | 22 |
| 24 def testMessages(self): | 23 def testMessages(self): |
| 25 grd_text = u""" | 24 grd_text = u""" |
| 26 <messages> | 25 <messages> |
| 27 <message name="IDS_SIMPLE_MESSAGE"> | 26 <message name="IDS_SIMPLE_MESSAGE"> |
| 28 Simple message. | 27 Simple message. |
| 29 </message> | 28 </message> |
| 30 <message name="IDS_QUOTES"> | 29 <message name="IDS_QUOTES"> |
| 31 element\u2019s \u201c<ph name="NAME">%s<ex>name</ex></ph>\u201d at
tribute | 30 element\u2019s \u201c<ph name="NAME">%s<ex>name</ex></ph>\u201d at
tribute |
| 32 </message> | 31 </message> |
| 33 <message name="IDS_PLACEHOLDERS"> | 32 <message name="IDS_PLACEHOLDERS"> |
| 34 <ph name="ERROR_COUNT">%1$d<ex>1</ex></ph> error, <ph name="WARNIN
G_COUNT">%2$d<ex>1</ex></ph> warning | 33 <ph name="ERROR_COUNT">%1$d<ex>1</ex></ph> error, <ph name="WARNIN
G_COUNT">%2$d<ex>1</ex></ph> warning |
| 35 </message> | 34 </message> |
| 36 <message name="IDS_STARTS_WITH_SPACE"> | 35 <message name="IDS_STARTS_WITH_SPACE"> |
| 37 ''' (<ph name="COUNT">%d<ex>2</ex></ph>) | 36 ''' (<ph name="COUNT">%d<ex>2</ex></ph>) |
| 38 </message> | 37 </message> |
| 39 <message name="IDS_DOUBLE_QUOTES"> | 38 <message name="IDS_DOUBLE_QUOTES"> |
| 40 A "double quoted" message. | 39 A "double quoted" message. |
| 41 </message> | 40 </message> |
| 41 <message name="IDS_BACKSLASH"> |
| 42 \\ |
| 43 </message> |
| 42 </messages> | 44 </messages> |
| 43 """ | 45 """ |
| 44 root = grd_reader.Parse(StringIO.StringIO(grd_text.encode('utf-8')), | 46 root = grd_reader.Parse(StringIO.StringIO(grd_text.encode('utf-8')), |
| 45 flexible_root=True) | 47 flexible_root=True) |
| 46 util.FixRootForUnittest(root) | 48 util.FixRootForUnittest(root) |
| 47 | 49 |
| 48 buf = StringIO.StringIO() | 50 buf = StringIO.StringIO() |
| 49 build.RcBuilder.ProcessNode(root, DummyOutput('js_map_format', 'en'), buf) | 51 build.RcBuilder.ProcessNode(root, DummyOutput('chrome_messages_json', 'en'),
buf) |
| 50 output = buf.getvalue() | 52 output = buf.getvalue() |
| 51 test = u""" | 53 test = u""" |
| 52 localizedStrings["Simple message."] = "Simple message."; | 54 { |
| 53 localizedStrings["element\u2019s \u201c%s\u201d attribute"] = "element\u2019s \u
201c%s\u201d attribute"; | 55 "IDS_SIMPLE_MESSAGE": { |
| 54 localizedStrings["%d error, %d warning"] = "%1$d error, %2$d warning"; | 56 "message": "Simple message." |
| 55 localizedStrings[" (%d)"] = " (%d)"; | 57 }, |
| 56 localizedStrings["A \\\"double quoted\\\" message."] = "A \\\"double quoted\\\"
message."; | 58 "IDS_QUOTES": { |
| 59 "message": "element\u2019s \u201c%s\u201d attribute" |
| 60 }, |
| 61 "IDS_PLACEHOLDERS": { |
| 62 "message": "%1$d error, %2$d warning" |
| 63 }, |
| 64 "IDS_STARTS_WITH_SPACE": { |
| 65 "message": "(%d)" |
| 66 }, |
| 67 "IDS_DOUBLE_QUOTES": { |
| 68 "message": "A \\"double quoted\\" message." |
| 69 }, |
| 70 "IDS_BACKSLASH": { |
| 71 "message": "\\\\" |
| 72 } |
| 73 } |
| 57 """ | 74 """ |
| 58 self.failUnless(output.strip() == test.strip()) | 75 self.failUnless(output.strip() == test.strip()) |
| 59 | 76 |
| 60 def testTranslations(self): | 77 def testTranslations(self): |
| 61 root = grd_reader.Parse(StringIO.StringIO(""" | 78 root = grd_reader.Parse(StringIO.StringIO(""" |
| 62 <messages> | 79 <messages> |
| 63 <message name="ID_HELLO">Hello!</message> | 80 <message name="ID_HELLO">Hello!</message> |
| 64 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex> | 81 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex> |
| 65 Joi</ex></ph></message> | 82 Joi</ex></ph></message> |
| 66 </messages> | 83 </messages> |
| 67 """), flexible_root=True) | 84 """), flexible_root=True) |
| 68 util.FixRootForUnittest(root) | 85 util.FixRootForUnittest(root) |
| 69 | 86 |
| 70 buf = StringIO.StringIO() | 87 buf = StringIO.StringIO() |
| 71 build.RcBuilder.ProcessNode(root, DummyOutput('js_map_format', 'fr'), buf) | 88 build.RcBuilder.ProcessNode(root, DummyOutput('chrome_messages_json', 'fr'),
buf) |
| 72 output = buf.getvalue() | 89 output = buf.getvalue() |
| 73 test = u""" | 90 test = u""" |
| 74 localizedStrings["Hello!"] = "H\xe9P\xe9ll\xf4P\xf4!"; | 91 { |
| 75 localizedStrings["Hello %s"] = "H\xe9P\xe9ll\xf4P\xf4 %s"; | 92 "ID_HELLO": { |
| 93 "message": "H\xe9P\xe9ll\xf4P\xf4!" |
| 94 }, |
| 95 "ID_HELLO_USER": { |
| 96 "message": "H\xe9P\xe9ll\xf4P\xf4 %s" |
| 97 } |
| 98 } |
| 76 """ | 99 """ |
| 77 self.failUnless(output.strip() == test.strip()) | 100 self.failUnless(output.strip() == test.strip()) |
| 78 | 101 |
| 79 | 102 |
| 80 class DummyOutput(object): | 103 class DummyOutput(object): |
| 81 | 104 |
| 82 def __init__(self, type, language): | 105 def __init__(self, type, language): |
| 83 self.type = type | 106 self.type = type |
| 84 self.language = language | 107 self.language = language |
| 85 | 108 |
| 86 def GetType(self): | 109 def GetType(self): |
| 87 return self.type | 110 return self.type |
| 88 | 111 |
| 89 def GetLanguage(self): | 112 def GetLanguage(self): |
| 90 return self.language | 113 return self.language |
| 91 | 114 |
| 92 def GetOutputFilename(self): | 115 def GetOutputFilename(self): |
| 93 return 'hello.gif' | 116 return 'hello.gif' |
| 94 | 117 |
| 118 |
| 95 if __name__ == '__main__': | 119 if __name__ == '__main__': |
| 96 unittest.main() | 120 unittest.main() |
| OLD | NEW |