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