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

Side by Side Diff: grit/tool/build_unittest.py

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month 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/tool/build.py ('k') | grit/tool/buildinfo.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 the 'grit build' tool.
7 '''
8
9 import codecs
10 import os
11 import sys
12 import tempfile
13 if __name__ == '__main__':
14 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
15
16 import unittest
17
18 from grit import util
19 from grit.tool import build
20
21
22 class BuildUnittest(unittest.TestCase):
23
24 def testFindTranslationsWithSubstitutions(self):
25 # This is a regression test; we had a bug where GRIT would fail to find
26 # messages with substitutions e.g. "Hello [IDS_USER]" where IDS_USER is
27 # another <message>.
28 output_dir = tempfile.mkdtemp()
29 builder = build.RcBuilder()
30 class DummyOpts(object):
31 def __init__(self):
32 self.input = util.PathFromRoot('grit/testdata/substitute.grd')
33 self.verbose = False
34 self.extra_verbose = False
35 builder.Run(DummyOpts(), ['-o', output_dir])
36
37 def testGenerateDepFile(self):
38 output_dir = tempfile.mkdtemp()
39 builder = build.RcBuilder()
40 class DummyOpts(object):
41 def __init__(self):
42 self.input = util.PathFromRoot('grit/testdata/substitute.grd')
43 self.verbose = False
44 self.extra_verbose = False
45 expected_dep_file = os.path.join(output_dir, 'substitute.grd.d')
46 builder.Run(DummyOpts(), ['-o', output_dir,
47 '--depdir', output_dir,
48 '--depfile', expected_dep_file])
49
50 self.failUnless(os.path.isfile(expected_dep_file))
51 with open(expected_dep_file) as f:
52 line = f.readline()
53 (dep_output_file, deps_string) = line.split(': ')
54 deps = deps_string.split(' ')
55
56 self.failUnlessEqual("resource.h", dep_output_file)
57 self.failUnlessEqual(1, len(deps))
58 self.failUnlessEqual(deps[0],
59 util.PathFromRoot('grit/testdata/substitute.xmb'))
60
61 def testGenerateDepFileWithResourceIds(self):
62 output_dir = tempfile.mkdtemp()
63 builder = build.RcBuilder()
64 class DummyOpts(object):
65 def __init__(self):
66 self.input = util.PathFromRoot('grit/testdata/substitute_no_ids.grd')
67 self.verbose = False
68 self.extra_verbose = False
69 expected_dep_file = os.path.join(output_dir, 'substitute_no_ids.grd.d')
70 builder.Run(DummyOpts(),
71 ['-f', util.PathFromRoot('grit/testdata/resource_ids'),
72 '-o', output_dir,
73 '--depdir', output_dir,
74 '--depfile', expected_dep_file])
75
76 self.failUnless(os.path.isfile(expected_dep_file))
77 with open(expected_dep_file) as f:
78 line = f.readline()
79 (dep_output_file, deps_string) = line.split(': ')
80 deps = deps_string.split(' ')
81
82 self.failUnlessEqual("resource.h", dep_output_file)
83 self.failUnlessEqual(2, len(deps))
84 self.failUnlessEqual(deps[0],
85 util.PathFromRoot('grit/testdata/substitute.xmb'))
86 self.failUnlessEqual(deps[1],
87 util.PathFromRoot('grit/testdata/resource_ids'))
88
89 def testAssertOutputs(self):
90 output_dir = tempfile.mkdtemp()
91 class DummyOpts(object):
92 def __init__(self):
93 self.input = util.PathFromRoot('grit/testdata/substitute.grd')
94 self.verbose = False
95 self.extra_verbose = False
96
97 # Incomplete output file list should fail.
98 builder_fail = build.RcBuilder()
99 self.failUnlessEqual(2,
100 builder_fail.Run(DummyOpts(), [
101 '-o', output_dir,
102 '-a', os.path.abspath(
103 os.path.join(output_dir, 'en_generated_resources.rc'))]))
104
105 # Complete output file list should succeed.
106 builder_ok = build.RcBuilder()
107 self.failUnlessEqual(0,
108 builder_ok.Run(DummyOpts(), [
109 '-o', output_dir,
110 '-a', os.path.abspath(
111 os.path.join(output_dir, 'en_generated_resources.rc')),
112 '-a', os.path.abspath(
113 os.path.join(output_dir, 'sv_generated_resources.rc')),
114 '-a', os.path.abspath(
115 os.path.join(output_dir, 'resource.h'))]))
116
117 def _verifyWhitelistedOutput(self,
118 filename,
119 whitelisted_ids,
120 non_whitelisted_ids,
121 encoding='utf8'):
122 self.failUnless(os.path.exists(filename))
123 whitelisted_ids_found = []
124 non_whitelisted_ids_found = []
125 with codecs.open(filename, encoding=encoding) as f:
126 for line in f.readlines():
127 for whitelisted_id in whitelisted_ids:
128 if whitelisted_id in line:
129 whitelisted_ids_found.append(whitelisted_id)
130 for non_whitelisted_id in non_whitelisted_ids:
131 if non_whitelisted_id in line:
132 non_whitelisted_ids_found.append(non_whitelisted_id)
133 self.longMessage = True
134 self.assertEqual(whitelisted_ids,
135 whitelisted_ids_found,
136 '\nin file {}'.format(os.path.basename(filename)))
137 non_whitelisted_msg = ('Non-Whitelisted IDs {} found in {}'
138 .format(non_whitelisted_ids_found, os.path.basename(filename)))
139 self.assertFalse(non_whitelisted_ids_found, non_whitelisted_msg)
140
141 def testWhitelistStrings(self):
142 output_dir = tempfile.mkdtemp()
143 builder = build.RcBuilder()
144 class DummyOpts(object):
145 def __init__(self):
146 self.input = util.PathFromRoot('grit/testdata/whitelist_strings.grd')
147 self.verbose = False
148 self.extra_verbose = False
149 whitelist_file = util.PathFromRoot('grit/testdata/whitelist.txt')
150 builder.Run(DummyOpts(), ['-o', output_dir,
151 '-w', whitelist_file])
152 header = os.path.join(output_dir, 'whitelist_test_resources.h')
153 rc = os.path.join(output_dir, 'en_whitelist_test_strings.rc')
154
155 whitelisted_ids = ['IDS_MESSAGE_WHITELISTED']
156 non_whitelisted_ids = ['IDS_MESSAGE_NOT_WHITELISTED']
157 self._verifyWhitelistedOutput(
158 header,
159 whitelisted_ids,
160 non_whitelisted_ids,
161 )
162 self._verifyWhitelistedOutput(
163 rc,
164 whitelisted_ids,
165 non_whitelisted_ids,
166 encoding='utf16'
167 )
168
169 def testWhitelistResources(self):
170 output_dir = tempfile.mkdtemp()
171 builder = build.RcBuilder()
172 class DummyOpts(object):
173 def __init__(self):
174 self.input = util.PathFromRoot('grit/testdata/whitelist_resources.grd')
175 self.verbose = False
176 self.extra_verbose = False
177 whitelist_file = util.PathFromRoot('grit/testdata/whitelist.txt')
178 builder.Run(DummyOpts(), ['-o', output_dir,
179 '-w', whitelist_file])
180 header = os.path.join(output_dir, 'whitelist_test_resources.h')
181 map_cc = os.path.join(output_dir, 'whitelist_test_resources_map.cc')
182 map_h = os.path.join(output_dir, 'whitelist_test_resources_map.h')
183 pak = os.path.join(output_dir, 'whitelist_test_resources.pak')
184
185 # Ensure the resource map header and .pak files exist, but don't verify
186 # their content.
187 self.failUnless(os.path.exists(map_h))
188 self.failUnless(os.path.exists(pak))
189
190 whitelisted_ids = [
191 'IDR_STRUCTURE_WHITELISTED',
192 'IDR_STRUCTURE_IN_TRUE_IF_WHITELISTED',
193 'IDR_INCLUDE_WHITELISTED',
194 ]
195 non_whitelisted_ids = [
196 'IDR_STRUCTURE_NOT_WHITELISTED',
197 'IDR_STRUCTURE_IN_TRUE_IF_NOT_WHITELISTED',
198 'IDR_STRUCTURE_IN_FALSE_IF_WHITELISTED',
199 'IDR_STRUCTURE_IN_FALSE_IF_NOT_WHITELISTED',
200 'IDR_INCLUDE_NOT_WHITELISTED',
201 ]
202 for output_file in (header, map_cc):
203 self._verifyWhitelistedOutput(
204 output_file,
205 whitelisted_ids,
206 non_whitelisted_ids,
207 )
208
209 def testOutputAllResourceDefinesTrue(self):
210 output_dir = tempfile.mkdtemp()
211 builder = build.RcBuilder()
212 class DummyOpts(object):
213 def __init__(self):
214 self.input = util.PathFromRoot('grit/testdata/whitelist_resources.grd')
215 self.verbose = False
216 self.extra_verbose = False
217 whitelist_file = util.PathFromRoot('grit/testdata/whitelist.txt')
218 builder.Run(DummyOpts(), ['-o', output_dir,
219 '-w', whitelist_file,
220 '--output-all-resource-defines',])
221 header = os.path.join(output_dir, 'whitelist_test_resources.h')
222 map_cc = os.path.join(output_dir, 'whitelist_test_resources_map.cc')
223
224 whitelisted_ids = [
225 'IDR_STRUCTURE_WHITELISTED',
226 'IDR_STRUCTURE_NOT_WHITELISTED',
227 'IDR_STRUCTURE_IN_TRUE_IF_WHITELISTED',
228 'IDR_STRUCTURE_IN_TRUE_IF_NOT_WHITELISTED',
229 'IDR_STRUCTURE_IN_FALSE_IF_WHITELISTED',
230 'IDR_STRUCTURE_IN_FALSE_IF_NOT_WHITELISTED',
231 'IDR_INCLUDE_WHITELISTED',
232 'IDR_INCLUDE_NOT_WHITELISTED',
233 ]
234 non_whitelisted_ids = []
235 for output_file in (header, map_cc):
236 self._verifyWhitelistedOutput(
237 output_file,
238 whitelisted_ids,
239 non_whitelisted_ids,
240 )
241
242 def testOutputAllResourceDefinesFalse(self):
243 output_dir = tempfile.mkdtemp()
244 builder = build.RcBuilder()
245 class DummyOpts(object):
246 def __init__(self):
247 self.input = util.PathFromRoot('grit/testdata/whitelist_resources.grd')
248 self.verbose = False
249 self.extra_verbose = False
250 whitelist_file = util.PathFromRoot('grit/testdata/whitelist.txt')
251 builder.Run(DummyOpts(), ['-o', output_dir,
252 '-w', whitelist_file,
253 '--no-output-all-resource-defines',])
254 header = os.path.join(output_dir, 'whitelist_test_resources.h')
255 map_cc = os.path.join(output_dir, 'whitelist_test_resources_map.cc')
256
257 whitelisted_ids = [
258 'IDR_STRUCTURE_WHITELISTED',
259 'IDR_STRUCTURE_IN_TRUE_IF_WHITELISTED',
260 'IDR_INCLUDE_WHITELISTED',
261 ]
262 non_whitelisted_ids = [
263 'IDR_STRUCTURE_NOT_WHITELISTED',
264 'IDR_STRUCTURE_IN_TRUE_IF_NOT_WHITELISTED',
265 'IDR_STRUCTURE_IN_FALSE_IF_WHITELISTED',
266 'IDR_STRUCTURE_IN_FALSE_IF_NOT_WHITELISTED',
267 'IDR_INCLUDE_NOT_WHITELISTED',
268 ]
269 for output_file in (header, map_cc):
270 self._verifyWhitelistedOutput(
271 output_file,
272 whitelisted_ids,
273 non_whitelisted_ids,
274 )
275
276 def testWriteOnlyNew(self):
277 output_dir = tempfile.mkdtemp()
278 builder = build.RcBuilder()
279 class DummyOpts(object):
280 def __init__(self):
281 self.input = util.PathFromRoot('grit/testdata/substitute.grd')
282 self.verbose = False
283 self.extra_verbose = False
284 UNCHANGED = 10
285 header = os.path.join(output_dir, 'resource.h')
286
287 builder.Run(DummyOpts(), ['-o', output_dir])
288 self.failUnless(os.path.exists(header))
289 first_mtime = os.stat(header).st_mtime
290
291 os.utime(header, (UNCHANGED, UNCHANGED))
292 builder.Run(DummyOpts(), ['-o', output_dir, '--write-only-new', '0'])
293 self.failUnless(os.path.exists(header))
294 second_mtime = os.stat(header).st_mtime
295
296 os.utime(header, (UNCHANGED, UNCHANGED))
297 builder.Run(DummyOpts(), ['-o', output_dir, '--write-only-new', '1'])
298 self.failUnless(os.path.exists(header))
299 third_mtime = os.stat(header).st_mtime
300
301 self.assertTrue(abs(second_mtime - UNCHANGED) > 5)
302 self.assertTrue(abs(third_mtime - UNCHANGED) < 5)
303
304 def testGenerateDepFileWithDependOnStamp(self):
305 output_dir = tempfile.mkdtemp()
306 builder = build.RcBuilder()
307 class DummyOpts(object):
308 def __init__(self):
309 self.input = util.PathFromRoot('grit/testdata/substitute.grd')
310 self.verbose = False
311 self.extra_verbose = False
312 expected_dep_file_name = 'substitute.grd.d'
313 expected_stamp_file_name = expected_dep_file_name + '.stamp'
314 expected_dep_file = os.path.join(output_dir, expected_dep_file_name)
315 expected_stamp_file = os.path.join(output_dir, expected_stamp_file_name)
316 if os.path.isfile(expected_stamp_file):
317 os.remove(expected_stamp_file)
318 builder.Run(DummyOpts(), ['-o', output_dir,
319 '--depdir', output_dir,
320 '--depfile', expected_dep_file,
321 '--depend-on-stamp'])
322 self.failUnless(os.path.isfile(expected_stamp_file))
323 first_mtime = os.stat(expected_stamp_file).st_mtime
324
325 # Reset mtime to very old.
326 OLDTIME = 10
327 os.utime(expected_stamp_file, (OLDTIME, OLDTIME))
328
329 builder.Run(DummyOpts(), ['-o', output_dir,
330 '--depdir', output_dir,
331 '--depfile', expected_dep_file,
332 '--depend-on-stamp'])
333 self.failUnless(os.path.isfile(expected_stamp_file))
334 second_mtime = os.stat(expected_stamp_file).st_mtime
335
336 # Some OS have a 2s stat resolution window, so can't do a direct comparison.
337 self.assertTrue((second_mtime - OLDTIME) > 5)
338 self.assertTrue(abs(second_mtime - first_mtime) < 5)
339
340 self.failUnless(os.path.isfile(expected_dep_file))
341 with open(expected_dep_file) as f:
342 line = f.readline()
343 (dep_output_file, deps_string) = line.split(': ')
344 deps = deps_string.split(' ')
345
346 self.failUnlessEqual(expected_stamp_file_name, dep_output_file)
347 self.failUnlessEqual(1, len(deps))
348 self.failUnlessEqual(deps[0],
349 util.PathFromRoot('grit/testdata/substitute.xmb'))
350
351
352 if __name__ == '__main__':
353 unittest.main()
OLDNEW
« no previous file with comments | « grit/tool/build.py ('k') | grit/tool/buildinfo.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698