| 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 sys | 11 import sys |
| 11 import unittest | 12 import unittest |
| 12 | 13 |
| 13 import mb | 14 import mb |
| 14 | 15 |
| 15 | 16 |
| 16 class FakeMBW(mb.MetaBuildWrapper): | 17 class FakeMBW(mb.MetaBuildWrapper): |
| 17 def __init__(self): | 18 def __init__(self): |
| 18 super(FakeMBW, self).__init__() | 19 super(FakeMBW, self).__init__() |
| 20 |
| 21 # Override vars for test portability. |
| 22 self.chromium_src_dir = '/fake_src' |
| 23 self.default_config = '/fake_src/tools/mb/mb_config.pyl' |
| 24 self.executable = 'python' |
| 25 self.platform = 'linux2' |
| 26 self.sep = '/' |
| 27 |
| 19 self.files = {} | 28 self.files = {} |
| 20 self.calls = [] | 29 self.calls = [] |
| 21 self.cmds = [] | 30 self.cmds = [] |
| 22 self.cross_compile = None | 31 self.cross_compile = None |
| 23 self.out = '' | 32 self.out = '' |
| 24 self.err = '' | 33 self.err = '' |
| 25 self.platform = 'linux2' | |
| 26 self.chromium_src_dir = '/fake_src' | |
| 27 self.default_config = '/fake_src/tools/mb/mb_config.pyl' | |
| 28 self.rmdirs = [] | 34 self.rmdirs = [] |
| 29 | 35 |
| 30 def ExpandUser(self, path): | 36 def ExpandUser(self, path): |
| 31 return '$HOME/%s' % path | 37 return '$HOME/%s' % path |
| 32 | 38 |
| 33 def Exists(self, path): | 39 def Exists(self, path): |
| 34 return self.files.get(path) is not None | 40 return self.files.get(path) is not None |
| 35 | 41 |
| 36 def MaybeMakeDirectory(self, path): | 42 def MaybeMakeDirectory(self, path): |
| 37 self.files[path] = True | 43 self.files[path] = True |
| 38 | 44 |
| 45 def PathJoin(self, *comps): |
| 46 return self.sep.join(comps) |
| 47 |
| 39 def ReadFile(self, path): | 48 def ReadFile(self, path): |
| 40 return self.files[path] | 49 return self.files[path] |
| 41 | 50 |
| 42 def WriteFile(self, path, contents, force_verbose=False): | 51 def WriteFile(self, path, contents, force_verbose=False): |
| 43 self.files[path] = contents | 52 self.files[path] = contents |
| 44 | 53 |
| 45 def Call(self, cmd, env=None): | 54 def Call(self, cmd, env=None): |
| 46 if env: | 55 if env: |
| 47 self.cross_compile = env.get('GYP_CROSSCOMPILE') | 56 self.cross_compile = env.get('GYP_CROSSCOMPILE') |
| 48 self.calls.append(cmd) | 57 self.calls.append(cmd) |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 'gyp_defaults': 'doom_melon=0', | 123 'gyp_defaults': 'doom_melon=0', |
| 115 }, | 124 }, |
| 116 'gyp': {'type': 'gyp'}, | 125 'gyp': {'type': 'gyp'}, |
| 117 'gn': {'type': 'gn'}, | 126 'gn': {'type': 'gn'}, |
| 118 'goma': { | 127 'goma': { |
| 119 'gn_args': 'use_goma=true goma_dir="$(goma_dir)"', | 128 'gn_args': 'use_goma=true goma_dir="$(goma_dir)"', |
| 120 'gyp_defines': 'goma=1 gomadir="$(goma_dir)"', | 129 'gyp_defines': 'goma=1 gomadir="$(goma_dir)"', |
| 121 }, | 130 }, |
| 122 'rel': { | 131 'rel': { |
| 123 'gn_args': 'is_debug=false', | 132 'gn_args': 'is_debug=false', |
| 124 'gyp_config': 'Release', | |
| 125 }, | 133 }, |
| 126 'debug': { | 134 'debug': { |
| 127 'gn_args': 'is_debug=true', | 135 'gn_args': 'is_debug=true', |
| 128 'gyp_config': 'Debug', | |
| 129 }, | 136 }, |
| 130 }, | 137 }, |
| 131 'private_configs': ['private'], | 138 'private_configs': ['private'], |
| 132 'unsupported_configs': ['unsupported'], | 139 'unsupported_configs': ['unsupported'], |
| 133 } | 140 } |
| 134 """ | 141 """ |
| 135 | 142 |
| 136 | 143 |
| 137 class UnitTest(unittest.TestCase): | 144 class UnitTest(unittest.TestCase): |
| 138 def fake_mbw(self, files=None): | 145 def fake_mbw(self, files=None): |
| (...skipping 20 matching lines...) Expand all Loading... |
| 159 def test_clobber(self): | 166 def test_clobber(self): |
| 160 files = { | 167 files = { |
| 161 '/fake_src/out/Debug': None, | 168 '/fake_src/out/Debug': None, |
| 162 '/fake_src/out/Debug/mb_type': None, | 169 '/fake_src/out/Debug/mb_type': None, |
| 163 } | 170 } |
| 164 mbw = self.fake_mbw(files) | 171 mbw = self.fake_mbw(files) |
| 165 | 172 |
| 166 # The first time we run this, the build dir doesn't exist, so no clobber. | 173 # The first time we run this, the build dir doesn't exist, so no clobber. |
| 167 self.check(['gen', '-c', 'gn_debug', '//out/Debug'], mbw=mbw, ret=0) | 174 self.check(['gen', '-c', 'gn_debug', '//out/Debug'], mbw=mbw, ret=0) |
| 168 self.assertEqual(mbw.rmdirs, []) | 175 self.assertEqual(mbw.rmdirs, []) |
| 169 self.assertTrue(mbw.files['/fake_src/out/Debug/mb_type'], 'gn') | 176 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gn') |
| 170 | 177 |
| 171 # The second time we run this, the build dir exists and matches, so no | 178 # The second time we run this, the build dir exists and matches, so no |
| 172 # clobber. | 179 # clobber. |
| 173 self.check(['gen', '-c', 'gn_debug', '//out/Debug'], mbw=mbw, ret=0) | 180 self.check(['gen', '-c', 'gn_debug', '//out/Debug'], mbw=mbw, ret=0) |
| 174 self.assertEqual(mbw.rmdirs, []) | 181 self.assertEqual(mbw.rmdirs, []) |
| 175 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gn') | 182 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gn') |
| 176 | 183 |
| 177 # Now we switch build types; this should result in a clobber. | 184 # Now we switch build types; this should result in a clobber. |
| 178 self.check(['gen', '-c', 'gyp_debug', '//out/Debug'], mbw=mbw, ret=0) | 185 self.check(['gen', '-c', 'gyp_debug', '//out/Debug'], mbw=mbw, ret=0) |
| 179 self.assertEqual(mbw.rmdirs, ['/fake_src/out/Debug']) | 186 self.assertEqual(mbw.rmdirs, ['/fake_src/out/Debug']) |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 '/tmp/in.json', '/tmp/out.json'], | 294 '/tmp/in.json', '/tmp/out.json'], |
| 288 ret=0) | 295 ret=0) |
| 289 self.assertIn('analyzer', mbw.calls[0]) | 296 self.assertIn('analyzer', mbw.calls[0]) |
| 290 | 297 |
| 291 def test_gyp_crosscompile(self): | 298 def test_gyp_crosscompile(self): |
| 292 mbw = self.fake_mbw() | 299 mbw = self.fake_mbw() |
| 293 self.check(['gen', '-c', 'private', '//out/Release'], mbw=mbw) | 300 self.check(['gen', '-c', 'private', '//out/Release'], mbw=mbw) |
| 294 self.assertTrue(mbw.cross_compile) | 301 self.assertTrue(mbw.cross_compile) |
| 295 | 302 |
| 296 def test_gyp_gen(self): | 303 def test_gyp_gen(self): |
| 297 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], ret=0) | 304 self.check(['gen', '-c', 'gyp_rel_bot', '-g', '/goma', '//out/Release'], |
| 305 ret=0, |
| 306 out=("python build/gyp_chromium -G output_dir=out " |
| 307 "-D goma=1 -D gomadir=/goma\n")) |
| 308 |
| 309 # simulate win32 |
| 310 mbw = self.fake_mbw() |
| 311 mbw.sep = '\\' |
| 312 self.check(['gen', '-c', 'gyp_rel_bot', '-g', 'c:\\goma', '//out/Release'], |
| 313 mbw=mbw, ret=0, |
| 314 out=("python 'build\\gyp_chromium' -G output_dir=out " |
| 315 "-D goma=1 -D 'gomadir=c:\\goma'\n")) |
| 298 | 316 |
| 299 def test_gyp_gen_fails(self): | 317 def test_gyp_gen_fails(self): |
| 300 mbw = self.fake_mbw() | 318 mbw = self.fake_mbw() |
| 301 mbw.Call = lambda cmd, env=None: (1, '', '') | 319 mbw.Call = lambda cmd, env=None: (1, '', '') |
| 302 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1) | 320 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1) |
| 303 | 321 |
| 304 def test_gyp_lookup_goma_dir_expansion(self): | 322 def test_gyp_lookup_goma_dir_expansion(self): |
| 305 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, | 323 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, |
| 306 out=("python build/gyp_chromium -G 'output_dir=<path>' " | 324 out=("python build/gyp_chromium -G 'output_dir=<path>' " |
| 307 "-G config=Release -D goma=1 -D gomadir=/foo\n")) | 325 "-D goma=1 -D gomadir=/foo\n")) |
| 308 | 326 |
| 309 def test_help(self): | 327 def test_help(self): |
| 310 orig_stdout = sys.stdout | 328 orig_stdout = sys.stdout |
| 311 try: | 329 try: |
| 312 sys.stdout = StringIO.StringIO() | 330 sys.stdout = StringIO.StringIO() |
| 313 self.assertRaises(SystemExit, self.check, ['-h']) | 331 self.assertRaises(SystemExit, self.check, ['-h']) |
| 314 self.assertRaises(SystemExit, self.check, ['help']) | 332 self.assertRaises(SystemExit, self.check, ['help']) |
| 315 self.assertRaises(SystemExit, self.check, ['help', 'gen']) | 333 self.assertRaises(SystemExit, self.check, ['help', 'gen']) |
| 316 finally: | 334 finally: |
| 317 sys.stdout = orig_stdout | 335 sys.stdout = orig_stdout |
| 318 | 336 |
| 319 | 337 |
| 320 def test_validate(self): | 338 def test_validate(self): |
| 321 self.check(['validate'], ret=0) | 339 self.check(['validate'], ret=0) |
| 322 | 340 |
| 323 | 341 |
| 324 if __name__ == '__main__': | 342 if __name__ == '__main__': |
| 325 unittest.main() | 343 unittest.main() |
| OLD | NEW |