Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / grit / grit / node / io_unittest.py
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 io.FileNode'''
7
8 import os
9 import sys
10 if __name__ == '__main__':
11   sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
12
13 import os
14 import StringIO
15 import unittest
16
17 from grit.node import misc
18 from grit.node import io
19 from grit.node import empty
20 from grit import grd_reader
21 from grit import util
22
23
24 class FileNodeUnittest(unittest.TestCase):
25   def testGetPath(self):
26     root = misc.GritNode()
27     root.StartParsing(u'grit', None)
28     root.HandleAttribute(u'latest_public_release', u'0')
29     root.HandleAttribute(u'current_release', u'1')
30     root.HandleAttribute(u'base_dir', ur'..\resource')
31     translations = empty.TranslationsNode()
32     translations.StartParsing(u'translations', root)
33     root.AddChild(translations)
34     file_node = io.FileNode()
35     file_node.StartParsing(u'file', translations)
36     file_node.HandleAttribute(u'path', ur'flugel\kugel.pdf')
37     translations.AddChild(file_node)
38     root.EndParsing()
39
40     self.failUnless(root.ToRealPath(file_node.GetInputPath()) ==
41                     util.normpath(
42                       os.path.join(ur'../resource', ur'flugel/kugel.pdf')))
43
44   def VerifyCliquesContainEnglishAndFrenchAndNothingElse(self, cliques):
45     for clique in cliques:
46       self.failUnlessEquals(len(clique[0].clique), 2)
47       self.failUnless('en' in cliques[i][0].clique)
48       self.failUnless('fr' in cliques[i][0].clique)
49
50   def testLoadTranslations(self):
51     xml = '''<?xml version="1.0" encoding="UTF-8"?>
52       <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
53         <translations>
54           <file path="generated_resources_fr.xtb" lang="fr" />
55         </translations>
56         <release seq="3">
57           <messages>
58             <message name="ID_HELLO">Hello!</message>
59             <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message>
60           </messages>
61         </release>
62       </grit>'''
63     grd = grd_reader.Parse(StringIO.StringIO(xml),
64                            util.PathFromRoot('grit/testdata'))
65     grd.SetOutputLanguage('en')
66     grd.RunGatherers()
67     self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques())
68
69   def testIffyness(self):
70     grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
71       <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
72         <translations>
73           <if expr="lang == 'fr'">
74             <file path="generated_resources_fr.xtb" lang="fr" />
75           </if>
76         </translations>
77         <release seq="3">
78           <messages>
79             <message name="ID_HELLO">Hello!</message>
80             <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message>
81           </messages>
82         </release>
83       </grit>'''), util.PathFromRoot('grit/testdata'))
84     grd.SetOutputLanguage('en')
85     grd.RunGatherers()
86
87     grd.SetOutputLanguage('fr')
88     grd.RunGatherers()
89
90   def testConditionalLoadTranslations(self):
91     xml = '''<?xml version="1.0" encoding="UTF-8"?>
92       <grit latest_public_release="2" source_lang_id="en-US" current_release="3"
93             base_dir=".">
94         <translations>
95           <if expr="True">
96             <file path="generated_resources_fr.xtb" lang="fr" />
97           </if>
98           <if expr="False">
99             <file path="no_such_file.xtb" lang="de" />
100           </if>
101         </translations>
102         <release seq="3">
103           <messages>
104             <message name="ID_HELLO">Hello!</message>
105             <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>
106               Joi</ex></ph></message>
107           </messages>
108         </release>
109       </grit>'''
110     grd = grd_reader.Parse(StringIO.StringIO(xml),
111                            util.PathFromRoot('grit/testdata'))
112     grd.SetOutputLanguage('en')
113     grd.RunGatherers()
114     self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques())
115
116   def testConditionalOutput(self):
117     xml = '''<?xml version="1.0" encoding="UTF-8"?>
118       <grit latest_public_release="2" source_lang_id="en-US" current_release="3"
119             base_dir=".">
120         <outputs>
121           <output filename="resource.h" type="rc_header" />
122           <output filename="en/generated_resources.rc" type="rc_all"
123                   lang="en" />
124           <if expr="pp_if('NOT_TRUE')">
125             <output filename="de/generated_resources.rc" type="rc_all"
126                     lang="de" />
127           </if>
128         </outputs>
129         <release seq="3">
130           <messages>
131             <message name="ID_HELLO">Hello!</message>
132           </messages>
133         </release>
134       </grit>'''
135     grd = grd_reader.Parse(StringIO.StringIO(xml),
136                            util.PathFromRoot('grit/test/data'),
137                            defines={})
138     grd.SetOutputLanguage('en')
139     grd.RunGatherers()
140     outputs = grd.GetChildrenOfType(io.OutputNode)
141     active = set(grd.ActiveDescendants())
142     self.failUnless(outputs[0] in active)
143     self.failUnless(outputs[0].GetType() == 'rc_header')
144     self.failUnless(outputs[1] in active)
145     self.failUnless(outputs[1].GetType() == 'rc_all')
146     self.failUnless(outputs[2] not in active)
147     self.failUnless(outputs[2].GetType() == 'rc_all')
148
149   # Verify that 'iw' and 'no' language codes in xtb files are mapped to 'he' and
150   # 'nb'.
151   def testLangCodeMapping(self):
152     grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
153       <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
154         <translations>
155           <file path="generated_resources_no.xtb" lang="nb" />
156           <file path="generated_resources_iw.xtb" lang="he" />
157         </translations>
158         <release seq="3">
159           <messages></messages>
160         </release>
161       </grit>'''), util.PathFromRoot('grit/testdata'))
162     grd.SetOutputLanguage('en')
163     grd.RunGatherers()
164
165
166 if __name__ == '__main__':
167   unittest.main()