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.
6 '''Unit tests for io.FileNode'''
10 if __name__ == '__main__':
11 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
17 from grit.node import misc
18 from grit.node import io
19 from grit.node import empty
20 from grit import grd_reader
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)
40 self.failUnless(root.ToRealPath(file_node.GetInputPath()) ==
42 os.path.join(ur'../resource', ur'flugel/kugel.pdf')))
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)
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=".">
54 <file path="generated_resources_fr.xtb" lang="fr" />
58 <message name="ID_HELLO">Hello!</message>
59 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message>
63 grd = grd_reader.Parse(StringIO.StringIO(xml),
64 util.PathFromRoot('grit/testdata'))
65 grd.SetOutputLanguage('en')
67 self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques())
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=".">
73 <if expr="lang == 'fr'">
74 <file path="generated_resources_fr.xtb" lang="fr" />
79 <message name="ID_HELLO">Hello!</message>
80 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message>
83 </grit>'''), util.PathFromRoot('grit/testdata'))
84 grd.SetOutputLanguage('en')
87 grd.SetOutputLanguage('fr')
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"
96 <file path="generated_resources_fr.xtb" lang="fr" />
99 <file path="no_such_file.xtb" lang="de" />
104 <message name="ID_HELLO">Hello!</message>
105 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>
106 Joi</ex></ph></message>
110 grd = grd_reader.Parse(StringIO.StringIO(xml),
111 util.PathFromRoot('grit/testdata'))
112 grd.SetOutputLanguage('en')
114 self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques())
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"
121 <output filename="resource.h" type="rc_header" />
122 <output filename="en/generated_resources.rc" type="rc_all"
124 <if expr="pp_if('NOT_TRUE')">
125 <output filename="de/generated_resources.rc" type="rc_all"
131 <message name="ID_HELLO">Hello!</message>
135 grd = grd_reader.Parse(StringIO.StringIO(xml),
136 util.PathFromRoot('grit/test/data'),
138 grd.SetOutputLanguage('en')
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')
149 # Verify that 'iw' and 'no' language codes in xtb files are mapped to 'he' and
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=".">
155 <file path="generated_resources_no.xtb" lang="nb" />
156 <file path="generated_resources_iw.xtb" lang="he" />
159 <messages></messages>
161 </grit>'''), util.PathFromRoot('grit/testdata'))
162 grd.SetOutputLanguage('en')
166 if __name__ == '__main__':