OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Tests for mb.py.""" | 6 """Tests for mb.py.""" |
7 | 7 |
8 import json | 8 import json |
9 import StringIO | 9 import StringIO |
10 import os | 10 import os |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 | 51 |
52 def PathJoin(self, *comps): | 52 def PathJoin(self, *comps): |
53 return self.sep.join(comps) | 53 return self.sep.join(comps) |
54 | 54 |
55 def ReadFile(self, path): | 55 def ReadFile(self, path): |
56 return self.files[path] | 56 return self.files[path] |
57 | 57 |
58 def WriteFile(self, path, contents, force_verbose=False): | 58 def WriteFile(self, path, contents, force_verbose=False): |
59 self.files[path] = contents | 59 self.files[path] = contents |
60 | 60 |
61 def Call(self, cmd, env=None): | 61 def Call(self, cmd, env=None, buffer_output=True): |
62 if env: | 62 if env: |
63 self.cross_compile = env.get('GYP_CROSSCOMPILE') | 63 self.cross_compile = env.get('GYP_CROSSCOMPILE') |
64 self.calls.append(cmd) | 64 self.calls.append(cmd) |
65 if self.cmds: | 65 if self.cmds: |
66 return self.cmds.pop(0) | 66 return self.cmds.pop(0) |
67 return 0, '', '' | 67 return 0, '', '' |
68 | 68 |
69 def Print(self, *args, **kwargs): | 69 def Print(self, *args, **kwargs): |
70 sep = kwargs.get('sep', ' ') | 70 sep = kwargs.get('sep', ' ') |
71 end = kwargs.get('end', '\n') | 71 end = kwargs.get('end', '\n') |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 ['/fake_src/out/Debug', '/fake_src/out/Debug']) | 201 ['/fake_src/out/Debug', '/fake_src/out/Debug']) |
202 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp') | 202 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp') |
203 | 203 |
204 def test_gn_analyze(self): | 204 def test_gn_analyze(self): |
205 files = {'/tmp/in.json': """{\ | 205 files = {'/tmp/in.json': """{\ |
206 "files": ["foo/foo_unittest.cc"], | 206 "files": ["foo/foo_unittest.cc"], |
207 "targets": ["foo_unittests", "bar_unittests"] | 207 "targets": ["foo_unittests", "bar_unittests"] |
208 }"""} | 208 }"""} |
209 | 209 |
210 mbw = self.fake_mbw(files) | 210 mbw = self.fake_mbw(files) |
211 mbw.Call = lambda cmd, env=None: (0, 'out/Default/foo_unittests\n', '') | 211 mbw.Call = lambda cmd, env=None, buffer_output=True: ( |
| 212 0, 'out/Default/foo_unittests\n', '') |
212 | 213 |
213 self.check(['analyze', '-c', 'gn_debug', '//out/Default', | 214 self.check(['analyze', '-c', 'gn_debug', '//out/Default', |
214 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) | 215 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) |
215 out = json.loads(mbw.files['/tmp/out.json']) | 216 out = json.loads(mbw.files['/tmp/out.json']) |
216 self.assertEqual(out, { | 217 self.assertEqual(out, { |
217 'status': 'Found dependency', | 218 'status': 'Found dependency', |
218 'targets': ['foo_unittests'], | 219 'targets': ['foo_unittests'], |
219 'build_targets': ['foo_unittests'] | 220 'build_targets': ['foo_unittests'] |
220 }) | 221 }) |
221 | 222 |
222 def test_gn_analyze_all(self): | 223 def test_gn_analyze_all(self): |
223 files = {'/tmp/in.json': """{\ | 224 files = {'/tmp/in.json': """{\ |
224 "files": ["foo/foo_unittest.cc"], | 225 "files": ["foo/foo_unittest.cc"], |
225 "targets": ["all", "bar_unittests"] | 226 "targets": ["all", "bar_unittests"] |
226 }"""} | 227 }"""} |
227 mbw = self.fake_mbw(files) | 228 mbw = self.fake_mbw(files) |
228 mbw.Call = lambda cmd, env=None: (0, 'out/Default/foo_unittests\n', '') | 229 mbw.Call = lambda cmd, env=None, buffer_output=True: ( |
| 230 0, 'out/Default/foo_unittests\n', '') |
229 self.check(['analyze', '-c', 'gn_debug', '//out/Default', | 231 self.check(['analyze', '-c', 'gn_debug', '//out/Default', |
230 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) | 232 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) |
231 out = json.loads(mbw.files['/tmp/out.json']) | 233 out = json.loads(mbw.files['/tmp/out.json']) |
232 self.assertEqual(out, { | 234 self.assertEqual(out, { |
233 'status': 'Found dependency (all)', | 235 'status': 'Found dependency (all)', |
234 }) | 236 }) |
235 | 237 |
236 def test_gn_analyze_missing_file(self): | 238 def test_gn_analyze_missing_file(self): |
237 files = {'/tmp/in.json': """{\ | 239 files = {'/tmp/in.json': """{\ |
238 "files": ["foo/foo_unittest.cc"], | 240 "files": ["foo/foo_unittest.cc"], |
(...skipping 25 matching lines...) Expand all Loading... |
264 mbw = self.fake_mbw(win32=True) | 266 mbw = self.fake_mbw(win32=True) |
265 self.check(['gen', '-c', 'gn_debug', '-g', 'c:\\goma', '//out/Debug'], | 267 self.check(['gen', '-c', 'gn_debug', '-g', 'c:\\goma', '//out/Debug'], |
266 mbw=mbw, ret=0, | 268 mbw=mbw, ret=0, |
267 out=('c:\\fake_src\\buildtools\\win\\gn gen //out/Debug ' | 269 out=('c:\\fake_src\\buildtools\\win\\gn gen //out/Debug ' |
268 '"--args=is_debug=true use_goma=true goma_dir=\\"' | 270 '"--args=is_debug=true use_goma=true goma_dir=\\"' |
269 'c:\\goma\\"" --check\n')) | 271 'c:\\goma\\"" --check\n')) |
270 | 272 |
271 | 273 |
272 def test_gn_gen_fails(self): | 274 def test_gn_gen_fails(self): |
273 mbw = self.fake_mbw() | 275 mbw = self.fake_mbw() |
274 mbw.Call = lambda cmd, env=None: (1, '', '') | 276 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '') |
275 self.check(['gen', '-c', 'gn_debug', '//out/Default'], mbw=mbw, ret=1) | 277 self.check(['gen', '-c', 'gn_debug', '//out/Default'], mbw=mbw, ret=1) |
276 | 278 |
277 def test_gn_gen_swarming(self): | 279 def test_gn_gen_swarming(self): |
278 files = { | 280 files = { |
279 '/tmp/swarming_targets': 'base_unittests\n', | 281 '/tmp/swarming_targets': 'base_unittests\n', |
280 '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( | 282 '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( |
281 "{'base_unittests': {" | 283 "{'base_unittests': {" |
282 " 'label': '//base:base_unittests'," | 284 " 'label': '//base:base_unittests'," |
283 " 'type': 'raw'," | 285 " 'type': 'raw'," |
284 " 'args': []," | 286 " 'args': []," |
285 "}}\n" | 287 "}}\n" |
286 ), | 288 ), |
287 '/fake_src/out/Default/base_unittests.runtime_deps': ( | 289 '/fake_src/out/Default/base_unittests.runtime_deps': ( |
288 "base_unittests\n" | 290 "base_unittests\n" |
289 ), | 291 ), |
290 } | 292 } |
291 mbw = self.fake_mbw(files) | 293 mbw = self.fake_mbw(files) |
292 self.check(['gen', | 294 self.check(['gen', |
293 '-c', 'gn_debug', | 295 '-c', 'gn_debug', |
294 '--swarming-targets-file', '/tmp/swarming_targets', | 296 '--swarming-targets-file', '/tmp/swarming_targets', |
295 '//out/Default'], mbw=mbw, ret=0) | 297 '//out/Default'], mbw=mbw, ret=0) |
296 self.assertIn('/fake_src/out/Default/base_unittests.isolate', | 298 self.assertIn('/fake_src/out/Default/base_unittests.isolate', |
297 mbw.files) | 299 mbw.files) |
298 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json', | 300 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json', |
299 mbw.files) | 301 mbw.files) |
300 | 302 |
| 303 def test_gn_isolate(self): |
| 304 files = { |
| 305 '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( |
| 306 "{'base_unittests': {" |
| 307 " 'label': '//base:base_unittests'," |
| 308 " 'type': 'raw'," |
| 309 " 'args': []," |
| 310 "}}\n" |
| 311 ), |
| 312 '/fake_src/out/Default/base_unittests.runtime_deps': ( |
| 313 "base_unittests\n" |
| 314 ), |
| 315 } |
| 316 self.check(['isolate', '-c', 'gn_debug', '//out/Default', 'base_unittests'], |
| 317 files=files, ret=0) |
| 318 |
| 319 # test running isolate on an existing build_dir |
| 320 files['/fake_src/out/Default/args.gn'] = 'is_debug = True\n' |
| 321 self.check(['isolate', '//out/Default', 'base_unittests'], |
| 322 files=files, ret=0) |
| 323 |
| 324 files['/fake_src/out/Default/mb_type'] = 'gn\n' |
| 325 self.check(['isolate', '//out/Default', 'base_unittests'], |
| 326 files=files, ret=0) |
| 327 |
| 328 def test_gn_run(self): |
| 329 files = { |
| 330 '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( |
| 331 "{'base_unittests': {" |
| 332 " 'label': '//base:base_unittests'," |
| 333 " 'type': 'raw'," |
| 334 " 'args': []," |
| 335 "}}\n" |
| 336 ), |
| 337 '/fake_src/out/Default/base_unittests.runtime_deps': ( |
| 338 "base_unittests\n" |
| 339 ), |
| 340 } |
| 341 self.check(['run', '-c', 'gn_debug', '//out/Default', 'base_unittests'], |
| 342 files=files, ret=0) |
| 343 |
301 def test_gn_lookup(self): | 344 def test_gn_lookup(self): |
302 self.check(['lookup', '-c', 'gn_debug'], ret=0) | 345 self.check(['lookup', '-c', 'gn_debug'], ret=0) |
303 | 346 |
304 def test_gn_lookup_goma_dir_expansion(self): | 347 def test_gn_lookup_goma_dir_expansion(self): |
305 self.check(['lookup', '-c', 'gn_rel_bot', '-g', '/foo'], ret=0, | 348 self.check(['lookup', '-c', 'gn_rel_bot', '-g', '/foo'], ret=0, |
306 out=("/fake_src/buildtools/linux64/gn gen _path_ " | 349 out=("/fake_src/buildtools/linux64/gn gen _path_ " |
307 "'--args=is_debug=false use_goma=true " | 350 "'--args=is_debug=false use_goma=true " |
308 "goma_dir=\"/foo\"'\n" )) | 351 "goma_dir=\"/foo\"'\n" )) |
309 | 352 |
310 def test_gyp_analyze(self): | 353 def test_gyp_analyze(self): |
(...skipping 14 matching lines...) Expand all Loading... |
325 "python build/gyp_chromium -G output_dir=out\n")) | 368 "python build/gyp_chromium -G output_dir=out\n")) |
326 | 369 |
327 mbw = self.fake_mbw(win32=True) | 370 mbw = self.fake_mbw(win32=True) |
328 self.check(['gen', '-c', 'gyp_rel_bot', '-g', 'c:\\goma', '//out/Release'], | 371 self.check(['gen', '-c', 'gyp_rel_bot', '-g', 'c:\\goma', '//out/Release'], |
329 mbw=mbw, ret=0, | 372 mbw=mbw, ret=0, |
330 out=("set GYP_DEFINES=goma=1 gomadir='c:\\goma'\n" | 373 out=("set GYP_DEFINES=goma=1 gomadir='c:\\goma'\n" |
331 "python build\\gyp_chromium -G output_dir=out\n")) | 374 "python build\\gyp_chromium -G output_dir=out\n")) |
332 | 375 |
333 def test_gyp_gen_fails(self): | 376 def test_gyp_gen_fails(self): |
334 mbw = self.fake_mbw() | 377 mbw = self.fake_mbw() |
335 mbw.Call = lambda cmd, env=None: (1, '', '') | 378 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '') |
336 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1) | 379 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1) |
337 | 380 |
338 def test_gyp_lookup_goma_dir_expansion(self): | 381 def test_gyp_lookup_goma_dir_expansion(self): |
339 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, | 382 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, |
340 out=("GYP_DEFINES='goma=1 gomadir=/foo'\n" | 383 out=("GYP_DEFINES='goma=1 gomadir=/foo'\n" |
341 "python build/gyp_chromium -G output_dir=_path_\n")) | 384 "python build/gyp_chromium -G output_dir=_path_\n")) |
342 | 385 |
343 def test_help(self): | 386 def test_help(self): |
344 orig_stdout = sys.stdout | 387 orig_stdout = sys.stdout |
345 try: | 388 try: |
346 sys.stdout = StringIO.StringIO() | 389 sys.stdout = StringIO.StringIO() |
347 self.assertRaises(SystemExit, self.check, ['-h']) | 390 self.assertRaises(SystemExit, self.check, ['-h']) |
348 self.assertRaises(SystemExit, self.check, ['help']) | 391 self.assertRaises(SystemExit, self.check, ['help']) |
349 self.assertRaises(SystemExit, self.check, ['help', 'gen']) | 392 self.assertRaises(SystemExit, self.check, ['help', 'gen']) |
350 finally: | 393 finally: |
351 sys.stdout = orig_stdout | 394 sys.stdout = orig_stdout |
352 | 395 |
353 | 396 |
354 def test_validate(self): | 397 def test_validate(self): |
355 self.check(['validate'], ret=0) | 398 self.check(['validate'], ret=0) |
356 | 399 |
357 | 400 |
358 if __name__ == '__main__': | 401 if __name__ == '__main__': |
359 unittest.main() | 402 unittest.main() |
OLD | NEW |