| 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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 }, | 209 }, |
| 210 } | 210 } |
| 211 """ | 211 """ |
| 212 | 212 |
| 213 | 213 |
| 214 class UnitTest(unittest.TestCase): | 214 class UnitTest(unittest.TestCase): |
| 215 def fake_mbw(self, files=None, win32=False): | 215 def fake_mbw(self, files=None, win32=False): |
| 216 mbw = FakeMBW(win32=win32) | 216 mbw = FakeMBW(win32=win32) |
| 217 mbw.files.setdefault(mbw.default_config, TEST_CONFIG) | 217 mbw.files.setdefault(mbw.default_config, TEST_CONFIG) |
| 218 mbw.files.setdefault( | 218 mbw.files.setdefault( |
| 219 mbw.ToAbsPath('//testing/buildbot/gn_isolate_map.pyl'), |
| 220 '''{ |
| 221 "foo_unittests": { |
| 222 "label": "//foo:foo_unittests", |
| 223 "type": "console_test_launcher", |
| 224 "args": [], |
| 225 }, |
| 226 }''') |
| 227 mbw.files.setdefault( |
| 219 mbw.ToAbsPath('//build/args/bots/fake_master/fake_gn_args_bot.gn'), | 228 mbw.ToAbsPath('//build/args/bots/fake_master/fake_gn_args_bot.gn'), |
| 220 'is_debug = false\n') | 229 'is_debug = false\n') |
| 221 if files: | 230 if files: |
| 222 for path, contents in files.items(): | 231 for path, contents in files.items(): |
| 223 mbw.files[path] = contents | 232 mbw.files[path] = contents |
| 224 return mbw | 233 return mbw |
| 225 | 234 |
| 226 def check(self, args, mbw=None, files=None, out=None, err=None, ret=None): | 235 def check(self, args, mbw=None, files=None, out=None, err=None, ret=None): |
| 227 if not mbw: | 236 if not mbw: |
| 228 mbw = self.fake_mbw(files) | 237 mbw = self.fake_mbw(files) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 270 |
| 262 # Now we delete mb_type; this checks the case where the build dir | 271 # Now we delete mb_type; this checks the case where the build dir |
| 263 # exists but wasn't populated by mb; this should also result in a clobber. | 272 # exists but wasn't populated by mb; this should also result in a clobber. |
| 264 del mbw.files['/fake_src/out/Debug/mb_type'] | 273 del mbw.files['/fake_src/out/Debug/mb_type'] |
| 265 self.check(['gen', '-c', 'gyp_debug', '//out/Debug'], mbw=mbw, ret=0) | 274 self.check(['gen', '-c', 'gyp_debug', '//out/Debug'], mbw=mbw, ret=0) |
| 266 self.assertEqual(mbw.rmdirs, | 275 self.assertEqual(mbw.rmdirs, |
| 267 ['/fake_src/out/Debug', '/fake_src/out/Debug']) | 276 ['/fake_src/out/Debug', '/fake_src/out/Debug']) |
| 268 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp') | 277 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp') |
| 269 | 278 |
| 270 def test_gn_analyze(self): | 279 def test_gn_analyze(self): |
| 271 files = {'/tmp/in.json': """{\ | 280 files = {'/tmp/in.json': '''{\ |
| 272 "files": ["foo/foo_unittest.cc"], | 281 "files": ["foo/foo_unittest.cc"], |
| 273 "test_targets": ["foo_unittests", "bar_unittests"], | 282 "test_targets": ["foo_unittests"], |
| 274 "additional_compile_targets": [] | 283 "additional_compile_targets": ["all"] |
| 275 }"""} | 284 }''', |
| 285 '/tmp/out.json.gn': '''{\ |
| 286 "status": "Found dependency", |
| 287 "compile_targets": ["//foo:foo_unittests"], |
| 288 "test_targets": ["//foo:foo_unittests"] |
| 289 }'''} |
| 276 | 290 |
| 277 mbw = self.fake_mbw(files) | 291 mbw = self.fake_mbw(files) |
| 278 mbw.Call = lambda cmd, env=None, buffer_output=True: ( | 292 mbw.Call = lambda cmd, env=None, buffer_output=True: (0, '', '') |
| 279 0, 'out/Default/foo_unittests\n', '') | |
| 280 | 293 |
| 281 self.check(['analyze', '-c', 'gn_debug_goma', '//out/Default', | 294 self.check(['analyze', '-c', 'gn_debug_goma', '//out/Default', |
| 282 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) | 295 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) |
| 283 out = json.loads(mbw.files['/tmp/out.json']) | 296 out = json.loads(mbw.files['/tmp/out.json']) |
| 284 self.assertEqual(out, { | 297 self.assertEqual(out, { |
| 285 'status': 'Found dependency', | 298 'status': 'Found dependency', |
| 286 'compile_targets': ['foo_unittests'], | 299 'compile_targets': ['foo:foo_unittests'], |
| 287 'test_targets': ['foo_unittests'] | 300 'test_targets': ['foo_unittests'] |
| 288 }) | 301 }) |
| 289 | 302 |
| 290 def test_gn_analyze_fails(self): | |
| 291 files = {'/tmp/in.json': """{\ | |
| 292 "files": ["foo/foo_unittest.cc"], | |
| 293 "test_targets": ["foo_unittests", "bar_unittests"], | |
| 294 "additional_compile_targets": [] | |
| 295 }"""} | |
| 296 | |
| 297 mbw = self.fake_mbw(files) | |
| 298 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '') | |
| 299 | |
| 300 self.check(['analyze', '-c', 'gn_debug_goma', '//out/Default', | |
| 301 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=1) | |
| 302 | |
| 303 def test_gn_analyze_all(self): | |
| 304 files = {'/tmp/in.json': """{\ | |
| 305 "files": ["foo/foo_unittest.cc"], | |
| 306 "test_targets": ["bar_unittests"], | |
| 307 "additional_compile_targets": ["all"] | |
| 308 }"""} | |
| 309 mbw = self.fake_mbw(files) | |
| 310 mbw.Call = lambda cmd, env=None, buffer_output=True: ( | |
| 311 0, 'out/Default/foo_unittests\n', '') | |
| 312 self.check(['analyze', '-c', 'gn_debug_goma', '//out/Default', | |
| 313 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) | |
| 314 out = json.loads(mbw.files['/tmp/out.json']) | |
| 315 self.assertEqual(out, { | |
| 316 'status': 'Found dependency (all)', | |
| 317 'compile_targets': ['all', 'bar_unittests'], | |
| 318 'test_targets': ['bar_unittests'], | |
| 319 }) | |
| 320 | |
| 321 def test_gn_analyze_missing_file(self): | |
| 322 files = {'/tmp/in.json': """{\ | |
| 323 "files": ["foo/foo_unittest.cc"], | |
| 324 "test_targets": ["bar_unittests"], | |
| 325 "additional_compile_targets": [] | |
| 326 }"""} | |
| 327 mbw = self.fake_mbw(files) | |
| 328 mbw.cmds = [ | |
| 329 (0, '', ''), | |
| 330 (1, 'The input matches no targets, configs, or files\n', ''), | |
| 331 (1, 'The input matches no targets, configs, or files\n', ''), | |
| 332 ] | |
| 333 | |
| 334 self.check(['analyze', '-c', 'gn_debug_goma', '//out/Default', | |
| 335 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) | |
| 336 out = json.loads(mbw.files['/tmp/out.json']) | |
| 337 self.assertEqual(out, { | |
| 338 'status': 'No dependency', | |
| 339 'compile_targets': [], | |
| 340 'test_targets': [], | |
| 341 }) | |
| 342 | |
| 343 def test_gn_gen(self): | 303 def test_gn_gen(self): |
| 344 mbw = self.fake_mbw() | 304 mbw = self.fake_mbw() |
| 345 self.check(['gen', '-c', 'gn_debug_goma', '//out/Default', '-g', '/goma'], | 305 self.check(['gen', '-c', 'gn_debug_goma', '//out/Default', '-g', '/goma'], |
| 346 mbw=mbw, ret=0) | 306 mbw=mbw, ret=0) |
| 347 self.assertMultiLineEqual(mbw.files['/fake_src/out/Default/args.gn'], | 307 self.assertMultiLineEqual(mbw.files['/fake_src/out/Default/args.gn'], |
| 348 ('goma_dir = "/goma"\n' | 308 ('goma_dir = "/goma"\n' |
| 349 'is_debug = true\n' | 309 'is_debug = true\n' |
| 350 'use_goma = true\n')) | 310 'use_goma = true\n')) |
| 351 | 311 |
| 352 # Make sure we log both what is written to args.gn and the command line. | 312 # Make sure we log both what is written to args.gn and the command line. |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 self.check(['lookup', '-c', 'fake_config'], mbw=mbw, | 527 self.check(['lookup', '-c', 'fake_config'], mbw=mbw, |
| 568 ret=0, | 528 ret=0, |
| 569 out=("GYP_DEFINES='foo=bar baz=1'\n" | 529 out=("GYP_DEFINES='foo=bar baz=1'\n" |
| 570 "GYP_LINK_CONCURRENCY=1\n" | 530 "GYP_LINK_CONCURRENCY=1\n" |
| 571 "LLVM_FORCE_HEAD_REVISION=1\n" | 531 "LLVM_FORCE_HEAD_REVISION=1\n" |
| 572 "python build/gyp_chromium -G output_dir=_path_\n")) | 532 "python build/gyp_chromium -G output_dir=_path_\n")) |
| 573 | 533 |
| 574 | 534 |
| 575 if __name__ == '__main__': | 535 if __name__ == '__main__': |
| 576 unittest.main() | 536 unittest.main() |
| OLD | NEW |