Index: tools/mb/mb_unittest.py |
diff --git a/tools/mb/mb_unittest.py b/tools/mb/mb_unittest.py |
index 8f5f1c8e7e21923810846f475cf1ef200b8e50bc..19cd87fabed2eff250c835471988202d1b13982f 100644 |
--- a/tools/mb/mb_unittest.py |
+++ b/tools/mb/mb_unittest.py |
@@ -4,19 +4,20 @@ |
"""Tests for mb.py.""" |
+import json |
import sys |
import unittest |
import mb |
-class FakeMB(mb.MetaBuildWrapper): |
+class FakeMBW(mb.MetaBuildWrapper): |
def __init__(self): |
- super(FakeMB, self).__init__() |
+ super(FakeMBW, self).__init__() |
self.files = {} |
self.calls = [] |
- self.out = [] |
- self.err = [] |
+ self.out = '' |
+ self.err = '' |
self.chromium_src_dir = '/fake_src' |
self.default_config = '/fake_src/tools/mb/mb_config.pyl' |
@@ -41,9 +42,9 @@ class FakeMB(mb.MetaBuildWrapper): |
end = kwargs.get('end', '\n') |
f = kwargs.get('file', sys.stdout) |
if f == sys.stderr: |
- self.err.append(sep.join(args) + end) |
+ self.err += sep.join(args) + end |
else: |
- self.out.append(sep.join(args) + end) |
+ self.out += sep.join(args) + end |
class IntegrationTest(unittest.TestCase): |
def test_validate(self): |
@@ -58,12 +59,14 @@ TEST_CONFIG = """\ |
'configs': { |
'gyp_rel_bot': ['gyp', 'rel', 'goma'], |
'gn_debug': ['gn', 'debug'], |
+ 'gn_rel_bot': ['gn', 'rel', 'goma'], |
'private': ['gyp', 'fake_feature1'], |
'unsupported': ['gn', 'fake_feature2'], |
}, |
'masters': { |
'fake_master': { |
'fake_builder': 'gyp_rel_bot', |
+ 'fake_gn_builder': 'gn_rel_bot', |
}, |
}, |
'mixins': { |
@@ -96,28 +99,45 @@ TEST_CONFIG = """\ |
class UnitTest(unittest.TestCase): |
- def check(self, args, files=None, cmds=None, out=None, err=None, ret=None): |
- m = FakeMB() |
+ def fake_mbw(self, files): |
+ mbw = FakeMBW() |
if files: |
for path, contents in files.items(): |
- m.files[path] = contents |
- m.files.setdefault(mb.default_config, TEST_CONFIG) |
- m.ParseArgs(args) |
- actual_ret = m.args.func() |
+ mbw.files[path] = contents |
+ mbw.files.setdefault(mbw.default_config, TEST_CONFIG) |
+ return mbw |
+ |
+ def check(self, args, mbw=None, files=None, out=None, err=None, ret=None): |
+ if not mbw: |
+ mbw = self.fake_mbw(files) |
+ mbw.ParseArgs(args) |
+ actual_ret = mbw.args.func() |
if ret is not None: |
self.assertEqual(actual_ret, ret) |
if out is not None: |
- self.assertEqual(m.out, out) |
+ self.assertEqual(mbw.out, out) |
if err is not None: |
- self.assertEqual(m.err, err) |
- if cmds is not None: |
- self.assertEqual(m.cmds, cmds) |
+ self.assertEqual(mbw.err, err) |
+ return mbw |
+ |
+ def test_gn_analyze(self): |
+ files = {'/tmp/in.json': """{\ |
+ "files": ["foo/foo_unittest.cc"], |
+ "targets": ["foo_unittests", "bar_unittests"] |
+ }"""} |
+ mbw = self.fake_mbw(files) |
+ mbw.Call = lambda cmd: (0, 'out/Default/foo_unittests\n', '') |
- def test_analyze(self): |
- files = {'/tmp/in.json': '{"files": [], "targets": []}'} |
self.check(['analyze', '-c', 'gn_debug', '//out/Default', |
- '/tmp/in.json', '/tmp/out.json'], |
- files=files, ret=0) |
+ '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) |
+ out = json.loads(mbw.files['/tmp/out.json']) |
+ self.assertEqual(out, { |
+ 'status': 'Found dependency', |
+ 'targets': ['foo_unittests'], |
+ 'build_targets': ['foo_unittests'] |
+ }) |
+ |
+ def test_gyp_analyze(self): |
self.check(['analyze', '-c', 'gyp_rel_bot', '//out/Release', |
'/tmp/in.json', '/tmp/out.json'], |
ret=0) |
@@ -126,6 +146,14 @@ class UnitTest(unittest.TestCase): |
self.check(['gen', '-c', 'gn_debug', '//out/Default'], ret=0) |
self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], ret=0) |
+ def test_goma_dir_expansion(self): |
+ self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, |
+ out=("python build/gyp_chromium -G 'output_dir=<path>' " |
+ "-G config=Release -D goma=1 -D gomadir=/foo\n")) |
+ self.check(['lookup', '-c', 'gn_rel_bot', '-g', '/foo'], ret=0, |
+ out=("gn gen '<path>' '--args=is_debug=false use_goma=true " |
+ "goma_dir=\"/foo\"'\n" )) |
+ |
def test_help(self): |
self.assertRaises(SystemExit, self.check, ['-h']) |
self.assertRaises(SystemExit, self.check, ['help']) |