summaryrefslogtreecommitdiffstats
path: root/python/mach/mach/test/test_dispatcher.py
blob: 85c2e9a847d8441de3f5104d156979299d72b22e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import unittest
from io import StringIO
from pathlib import Path

import pytest
from mozunit import main
from six import string_types

from mach.base import CommandContext
from mach.registrar import Registrar


@pytest.mark.usefixtures("get_mach", "run_mach")
class TestDispatcher(unittest.TestCase):
    """Tests dispatch related code"""

    def get_parser(self, config=None):
        mach = self.get_mach(Path("basic.py"))

        for provider in Registrar.settings_providers:
            mach.settings.register_provider(provider)

        if config:
            if isinstance(config, string_types):
                config = StringIO(config)
            mach.settings.load_fps([config])

        context = CommandContext(cwd="", settings=mach.settings)
        return mach.get_argument_parser(context)

    def test_command_aliases(self):
        config = """
[alias]
foo = cmd_foo
bar = cmd_bar
baz = cmd_bar --baz
cmd_bar = cmd_bar --baz
"""
        parser = self.get_parser(config=config)

        args = parser.parse_args(["foo"])
        self.assertEqual(args.command, "cmd_foo")

        def assert_bar_baz(argv):
            args = parser.parse_args(argv)
            self.assertEqual(args.command, "cmd_bar")
            self.assertTrue(args.command_args.baz)

        # The following should all result in |cmd_bar --baz|
        assert_bar_baz(["bar", "--baz"])
        assert_bar_baz(["baz"])
        assert_bar_baz(["cmd_bar"])


if __name__ == "__main__":
    main()