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.node.message''' 7 8 9import os 10import sys 11if __name__ == '__main__': 12 sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) 13 14import unittest 15import StringIO 16 17from grit import tclib 18from grit import util 19from grit.node import message 20 21class MessageUnittest(unittest.TestCase): 22 def testMessage(self): 23 root = util.ParseGrdForUnittest(''' 24 <messages> 25 <message name="IDS_GREETING" 26 desc="Printed to greet the currently logged in user"> 27 Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing today? 28 </message> 29 </messages>''') 30 msg, = root.GetChildrenOfType(message.MessageNode) 31 cliques = msg.GetCliques() 32 content = cliques[0].GetMessage().GetPresentableContent() 33 self.failUnless(content == 'Hello USERNAME, how are you doing today?') 34 35 def testMessageWithWhitespace(self): 36 root = util.ParseGrdForUnittest("""\ 37 <messages> 38 <message name="IDS_BLA" desc=""> 39 ''' Hello there <ph name="USERNAME">%s</ph> ''' 40 </message> 41 </messages>""") 42 msg, = root.GetChildrenOfType(message.MessageNode) 43 content = msg.GetCliques()[0].GetMessage().GetPresentableContent() 44 self.failUnless(content == 'Hello there USERNAME') 45 self.failUnless(msg.ws_at_start == ' ') 46 self.failUnless(msg.ws_at_end == ' ') 47 48 def testConstruct(self): 49 msg = tclib.Message(text=" Hello USERNAME, how are you? BINGO\t\t", 50 placeholders=[tclib.Placeholder('USERNAME', '%s', 'Joi'), 51 tclib.Placeholder('BINGO', '%d', '11')]) 52 msg_node = message.MessageNode.Construct(None, msg, 'BINGOBONGO') 53 self.failUnless(msg_node.children[0].name == 'ph') 54 self.failUnless(msg_node.children[0].children[0].name == 'ex') 55 self.failUnless(msg_node.children[0].children[0].GetCdata() == 'Joi') 56 self.failUnless(msg_node.children[1].children[0].GetCdata() == '11') 57 self.failUnless(msg_node.ws_at_start == ' ') 58 self.failUnless(msg_node.ws_at_end == '\t\t') 59 60 def testUnicodeConstruct(self): 61 text = u'Howdie \u00fe' 62 msg = tclib.Message(text=text) 63 msg_node = message.MessageNode.Construct(None, msg, 'BINGOBONGO') 64 msg_from_node = msg_node.GetCdata() 65 self.failUnless(msg_from_node == text) 66 67 def testFormatterData(self): 68 root = util.ParseGrdForUnittest("""\ 69 <messages> 70 <message name="IDS_BLA" desc="" formatter_data=" foo=123 bar qux=low"> 71 Text 72 </message> 73 </messages>""") 74 msg, = root.GetChildrenOfType(message.MessageNode) 75 expected_formatter_data = { 76 'foo': '123', 77 'bar': '', 78 'qux': 'low'} 79 80 # Can't use assertDictEqual, not available in Python 2.6, so do it 81 # by hand. 82 self.failUnlessEqual(len(expected_formatter_data), 83 len(msg.formatter_data)) 84 for key in expected_formatter_data: 85 self.failUnlessEqual(expected_formatter_data[key], 86 msg.formatter_data[key]) 87 88 89if __name__ == '__main__': 90 unittest.main() 91