def template_test(self, func, letters, number_args):
        args_packed = pack_args(letters, number_args)
        args, kwarg_objects = MenuNode._split_kwargs(args_packed)

        kwargs = {kw.key(): kw.value() for kw in kwarg_objects}
        print(kwargs)

        menu = {'command': 'test', 'function': func}
        mn = MenuNode(**menu)

        try:
            mn._function(*args, **kwargs)
        except TypeError:
            with pytest.raises(InvalidArgError):
                mn._validate_function_args(args_packed)
        else:
            # assert anything here?
            mn._validate_function_args(args_packed)
 def test_mixed(self):
     li = [1, Kwarg('test', 1), 'test']
     with pytest.raises(SyntaxError):
         MenuNode._split_kwargs(li)
    def test_kwargs_first(self):
        args = [1, 'test']
        kwargs = [Kwarg('test', 1), Kwarg('test', 2)]

        with pytest.raises(SyntaxError):
            MenuNode._split_kwargs([*kwargs, *args])
 def test_args_first(self):
     args = [1, 'test']
     kwargs = [Kwarg('test', 1), Kwarg('test', 2)]
     expected = (args, kwargs)
     assert MenuNode._split_kwargs([*args, *kwargs]) == expected
 def test_only_kwargs(self):
     kwargs = [Kwarg('test', 1), Kwarg('test', 2)]
     expected = ([], kwargs)
     assert MenuNode._split_kwargs(kwargs) == expected
 def test_only_args(self):
     args = [1, 'test']
     expected = (args, [])
     assert MenuNode._split_kwargs(args) == expected
 def test_empty(self):
     expected = ([], [])
     assert MenuNode._split_kwargs([]) == expected