| Index: tools/mb/mb_unittest.py
|
| diff --git a/tools/mb/mb_unittest.py b/tools/mb/mb_unittest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8f5f1c8e7e21923810846f475cf1ef200b8e50bc
|
| --- /dev/null
|
| +++ b/tools/mb/mb_unittest.py
|
| @@ -0,0 +1,142 @@
|
| +# Copyright 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Tests for mb.py."""
|
| +
|
| +import sys
|
| +import unittest
|
| +
|
| +import mb
|
| +
|
| +
|
| +class FakeMB(mb.MetaBuildWrapper):
|
| + def __init__(self):
|
| + super(FakeMB, self).__init__()
|
| + self.files = {}
|
| + self.calls = []
|
| + self.out = []
|
| + self.err = []
|
| + self.chromium_src_dir = '/fake_src'
|
| + self.default_config = '/fake_src/tools/mb/mb_config.pyl'
|
| +
|
| + def ExpandUser(self, path):
|
| + return '$HOME/%s' % path
|
| +
|
| + def Exists(self, path):
|
| + return self.files.get(path) is not None
|
| +
|
| + def ReadFile(self, path):
|
| + return self.files[path]
|
| +
|
| + def WriteFile(self, path, contents):
|
| + self.files[path] = contents
|
| +
|
| + def Call(self, cmd):
|
| + self.calls.append(cmd)
|
| + return 0, '', ''
|
| +
|
| + def Print(self, *args, **kwargs):
|
| + sep = kwargs.get('sep', ' ')
|
| + end = kwargs.get('end', '\n')
|
| + f = kwargs.get('file', sys.stdout)
|
| + if f == sys.stderr:
|
| + self.err.append(sep.join(args) + end)
|
| + else:
|
| + self.out.append(sep.join(args) + end)
|
| +
|
| +class IntegrationTest(unittest.TestCase):
|
| + def test_validate(self):
|
| + # Note that this validates that the actual mb_config.pyl is valid.
|
| + ret = mb.main(['validate', '--quiet'])
|
| + self.assertEqual(ret, 0)
|
| +
|
| +
|
| +TEST_CONFIG = """\
|
| +{
|
| + 'common_dev_configs': ['gn_debug'],
|
| + 'configs': {
|
| + 'gyp_rel_bot': ['gyp', 'rel', 'goma'],
|
| + 'gn_debug': ['gn', 'debug'],
|
| + 'private': ['gyp', 'fake_feature1'],
|
| + 'unsupported': ['gn', 'fake_feature2'],
|
| + },
|
| + 'masters': {
|
| + 'fake_master': {
|
| + 'fake_builder': 'gyp_rel_bot',
|
| + },
|
| + },
|
| + 'mixins': {
|
| + 'fake_feature1': {
|
| + 'gn_args': 'enable_doom_melon=true',
|
| + 'gyp_defines': 'doom_melon=1',
|
| + },
|
| + 'fake_feature2': {
|
| + 'gn_args': 'enable_doom_melon=false',
|
| + 'gyp_defaults': 'doom_melon=0',
|
| + },
|
| + 'gyp': {'type': 'gyp'},
|
| + 'gn': {'type': 'gn'},
|
| + 'goma': {
|
| + 'gn_args': 'use_goma=true goma_dir="$(goma_dir)"',
|
| + 'gyp_defines': 'goma=1 gomadir="$(goma_dir)"',
|
| + },
|
| + 'rel': {
|
| + 'gn_args': 'is_debug=false',
|
| + 'gyp_config': 'Release',
|
| + },
|
| + 'debug': {
|
| + 'gn_args': 'is_debug=true',
|
| + },
|
| + },
|
| + 'private_configs': ['private'],
|
| + 'unsupported_configs': ['unsupported'],
|
| +}
|
| +"""
|
| +
|
| +
|
| +class UnitTest(unittest.TestCase):
|
| + def check(self, args, files=None, cmds=None, out=None, err=None, ret=None):
|
| + m = FakeMB()
|
| + 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()
|
| + if ret is not None:
|
| + self.assertEqual(actual_ret, ret)
|
| + if out is not None:
|
| + self.assertEqual(m.out, out)
|
| + if err is not None:
|
| + self.assertEqual(m.err, err)
|
| + if cmds is not None:
|
| + self.assertEqual(m.cmds, cmds)
|
| +
|
| + 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)
|
| + self.check(['analyze', '-c', 'gyp_rel_bot', '//out/Release',
|
| + '/tmp/in.json', '/tmp/out.json'],
|
| + ret=0)
|
| +
|
| + def test_gen(self):
|
| + self.check(['gen', '-c', 'gn_debug', '//out/Default'], ret=0)
|
| + self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], ret=0)
|
| +
|
| + def test_help(self):
|
| + self.assertRaises(SystemExit, self.check, ['-h'])
|
| + self.assertRaises(SystemExit, self.check, ['help'])
|
| + self.assertRaises(SystemExit, self.check, ['help', 'gen'])
|
| +
|
| + def test_lookup(self):
|
| + self.check(['lookup', '-c', 'gn_debug'], ret=0)
|
| +
|
| + def test_validate(self):
|
| + self.check(['validate'], ret=0)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|