Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(271)

Side by Side Diff: grit/node/misc_unittest.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « grit/node/misc.py ('k') | grit/node/structure.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 #!/usr/bin/python2.4
2 # Copyright (c) 2011 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 misc.GritNode'''
7
8
9 import os
10 import sys
11 if __name__ == '__main__':
12 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
13
14 import unittest
15 import StringIO
16
17 from grit import grd_reader
18 import grit.exception
19 from grit import util
20 from grit.node import misc
21
22
23 class GritNodeUnittest(unittest.TestCase):
24 def testUniqueNameAttribute(self):
25 try:
26 restree = grd_reader.Parse(
27 util.PathFromRoot('grit/testdata/duplicate-name-input.xml'))
28 self.fail('Expected parsing exception because of duplicate names.')
29 except grit.exception.Parsing:
30 pass # Expected case
31
32 def testReadFirstIdsFromFile(self):
33 test_resource_ids = os.path.join(os.path.dirname(__file__), '..',
34 'testdata', 'resource_ids')
35 src_dir, id_dict = misc._ReadFirstIdsFromFile(
36 test_resource_ids,
37 {
38 'FOO': 'bar',
39 'SHARED_INTERMEDIATE_DIR': 'out/Release/obj/gen',
40 })
41 self.assertEqual({}, id_dict.get('bar/file.grd', None))
42 self.assertEqual({},
43 id_dict.get('out/Release/obj/gen/devtools/devtools.grd', None))
44
45
46 class IfNodeUnittest(unittest.TestCase):
47 def testIffyness(self):
48 grd = grd_reader.Parse(StringIO.StringIO('''
49 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
50 <release seq="3">
51 <messages>
52 <if expr="'bingo' in defs">
53 <message name="IDS_BINGO">
54 Bingo!
55 </message>
56 </if>
57 <if expr="'hello' in defs">
58 <message name="IDS_HELLO">
59 Hello!
60 </message>
61 </if>
62 <if expr="lang == 'fr' or 'FORCE_FRENCH' in defs">
63 <message name="IDS_HELLO" internal_comment="French version">
64 Good morning
65 </message>
66 </if>
67 </messages>
68 </release>
69 </grit>'''), dir='.')
70
71 messages_node = grd.children[0].children[0]
72 bingo_message = messages_node.children[0].children[0]
73 hello_message = messages_node.children[1].children[0]
74 french_message = messages_node.children[2].children[0]
75 self.assertTrue(bingo_message.name == 'message')
76 self.assertTrue(hello_message.name == 'message')
77 self.assertTrue(french_message.name == 'message')
78
79 grd.SetOutputContext('fr', {'hello' : '1'})
80 self.failUnless(not bingo_message.SatisfiesOutputCondition())
81 self.failUnless(hello_message.SatisfiesOutputCondition())
82 self.failUnless(french_message.SatisfiesOutputCondition())
83
84 grd.SetOutputContext('en', {'bingo' : 1})
85 self.failUnless(bingo_message.SatisfiesOutputCondition())
86 self.failUnless(not hello_message.SatisfiesOutputCondition())
87 self.failUnless(not french_message.SatisfiesOutputCondition())
88
89 grd.SetOutputContext('en', {'FORCE_FRENCH' : '1', 'bingo' : '1'})
90 self.failUnless(bingo_message.SatisfiesOutputCondition())
91 self.failUnless(not hello_message.SatisfiesOutputCondition())
92 self.failUnless(french_message.SatisfiesOutputCondition())
93
94 def testIffynessWithOutputNodes(self):
95 grd = grd_reader.Parse(StringIO.StringIO('''
96 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
97 <outputs>
98 <output filename="uncond1.rc" type="rc_data" />
99 <if expr="lang == 'fr' or 'hello' in defs">
100 <output filename="only_fr.adm" type="adm" />
101 <output filename="only_fr.plist" type="plist" />
102 </if>
103 <if expr="lang == 'ru'">
104 <output filename="doc.html" type="document" />
105 </if>
106 <output filename="uncond2.adm" type="adm" />
107 <output filename="iftest.h" type="rc_header">
108 <emit emit_type='prepend'></emit>
109 </output>
110 </outputs>
111 </grit>'''), dir='.')
112
113 outputs_node = grd.children[0]
114 uncond1_output = outputs_node.children[0]
115 only_fr_adm_output = outputs_node.children[1].children[0]
116 only_fr_plist_output = outputs_node.children[1].children[1]
117 doc_output = outputs_node.children[2].children[0]
118 uncond2_output = outputs_node.children[0]
119 self.assertTrue(uncond1_output.name == 'output')
120 self.assertTrue(only_fr_adm_output.name == 'output')
121 self.assertTrue(only_fr_plist_output.name == 'output')
122 self.assertTrue(doc_output.name == 'output')
123 self.assertTrue(uncond2_output.name == 'output')
124
125 grd.SetOutputContext('ru', {'hello' : '1'})
126 outputs = [output.GetFilename() for output in grd.GetOutputFiles()]
127 self.assertEquals(
128 outputs,
129 ['uncond1.rc', 'only_fr.adm', 'only_fr.plist', 'doc.html',
130 'uncond2.adm', 'iftest.h'])
131
132 grd.SetOutputContext('ru', {'bingo': '2'})
133 outputs = [output.GetFilename() for output in grd.GetOutputFiles()]
134 self.assertEquals(
135 outputs,
136 ['uncond1.rc', 'doc.html', 'uncond2.adm', 'iftest.h'])
137
138 grd.SetOutputContext('fr', {'hello': '1'})
139 outputs = [output.GetFilename() for output in grd.GetOutputFiles()]
140 self.assertEquals(
141 outputs,
142 ['uncond1.rc', 'only_fr.adm', 'only_fr.plist', 'uncond2.adm',
143 'iftest.h'])
144
145 grd.SetOutputContext('en', {'bingo': '1'})
146 outputs = [output.GetFilename() for output in grd.GetOutputFiles()]
147 self.assertEquals(outputs, ['uncond1.rc', 'uncond2.adm', 'iftest.h'])
148
149 grd.SetOutputContext('fr', {'bingo': '1'})
150 outputs = [output.GetFilename() for output in grd.GetOutputFiles()]
151 self.assertNotEquals(outputs, ['uncond1.rc', 'uncond2.adm', 'iftest.h'])
152
153 class ReleaseNodeUnittest(unittest.TestCase):
154 def testPseudoControl(self):
155 grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UT F-8"?>
156 <grit latest_public_release="1" source_lang_id="en-US" current_release="2" base_dir=".">
157 <release seq="1" allow_pseudo="false">
158 <messages>
159 <message name="IDS_HELLO">
160 Hello
161 </message>
162 </messages>
163 <structures>
164 <structure type="dialog" name="IDD_ABOUTBOX" encoding="utf-16" file= "klonk.rc" />
165 </structures>
166 </release>
167 <release seq="2">
168 <messages>
169 <message name="IDS_BINGO">
170 Bingo
171 </message>
172 </messages>
173 <structures>
174 <structure type="menu" name="IDC_KLONKMENU" encoding="utf-16" file=" klonk.rc" />
175 </structures>
176 </release>
177 </grit>'''), util.PathFromRoot('grit/testdata'))
178 grd.RunGatherers(recursive=True)
179
180 hello = grd.GetNodeById('IDS_HELLO')
181 aboutbox = grd.GetNodeById('IDD_ABOUTBOX')
182 bingo = grd.GetNodeById('IDS_BINGO')
183 menu = grd.GetNodeById('IDC_KLONKMENU')
184
185 for node in [hello, aboutbox]:
186 self.failUnless(not node.PseudoIsAllowed())
187
188 for node in [bingo, menu]:
189 self.failUnless(node.PseudoIsAllowed())
190
191 for node in [hello, aboutbox]:
192 try:
193 formatter = node.ItemFormatter('rc_all')
194 formatter.Format(node, 'xyz-pseudo')
195 self.fail('Should have failed during Format since pseudo is not allowed' )
196 except:
197 pass # expected case
198
199 for node in [bingo, menu]:
200 try:
201 formatter = node.ItemFormatter('rc_all')
202 formatter.Format(node, 'xyz-pseudo')
203 except:
204 self.fail('Should not have gotten exception since pseudo is allowed')
205
206
207 if __name__ == '__main__':
208 unittest.main()
OLDNEW
« no previous file with comments | « grit/node/misc.py ('k') | grit/node/structure.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698