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"""Unittest for c_format.py.
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 util
18from grit.tool import build
19
20
21class CFormatUnittest(unittest.TestCase):
22
23  def testMessages(self):
24    root = util.ParseGrdForUnittest("""
25    <messages>
26      <message name="IDS_QUESTIONS">Do you want to play questions?</message>
27      <message name="IDS_QUOTES">
28      "What's in a name, <ph name="NAME">%s<ex>Brandon</ex></ph>?"
29      </message>
30      <message name="IDS_LINE_BREAKS">
31          Was that rhetoric?
32No.
33Statement.  Two all.  Game point.
34</message>
35      <message name="IDS_NON_ASCII">
36         \xc3\xb5\\xc2\\xa4\\\xc2\xa4\\\\xc3\\xb5\xe4\xa4\xa4
37      </message>
38    </messages>
39      """)
40
41    buf = StringIO.StringIO()
42    build.RcBuilder.ProcessNode(root, DummyOutput('c_format', 'en'), buf)
43    output = util.StripBlankLinesAndComments(buf.getvalue())
44    self.assertEqual(u"""\
45#include "resource.h"
46const char* GetString(int id) {
47  switch (id) {
48    case IDS_QUESTIONS:
49      return "Do you want to play questions?";
50    case IDS_QUOTES:
51      return "\\"What\\'s in a name, %s?\\"";
52    case IDS_LINE_BREAKS:
53      return "Was that rhetoric?\\nNo.\\nStatement.  Two all.  Game point.";
54    case IDS_NON_ASCII:
55      return "\\303\\265\\xc2\\xa4\\\\302\\244\\\\xc3\\xb5\\344\\244\\244";
56    default:
57      return 0;
58  }
59}""", output)
60
61
62class DummyOutput(object):
63
64  def __init__(self, type, language):
65    self.type = type
66    self.language = language
67
68  def GetType(self):
69    return self.type
70
71  def GetLanguage(self):
72    return self.language
73
74  def GetOutputFilename(self):
75    return 'hello.gif'
76
77if __name__ == '__main__':
78  unittest.main()
79