diff --git a/tests/test_decorators.py b/tests/test_decorators.py new file mode 100644 index 0000000000000000000000000000000000000000..255bc59955d67bf261d57d4a604cb17ae1979013 --- /dev/null +++ b/tests/test_decorators.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2018 Branko Majic +# +# This file is part of Gimmecert. +# +# Gimmecert is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# Gimmecert is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Gimmecert. If not, see . +# + + +import collections + +import gimmecert.decorators + +import pytest + + +def test_get_subcommand_parser_setup_functions_returns_list(): + + registered_functions = gimmecert.decorators.get_subcommand_parser_setup_functions() + + assert isinstance(registered_functions, collections.Iterable) + + +def test_subcommand_parser_decorator_registers_function(): + + @gimmecert.decorators.subcommand_parser + def myfunction1(parser, subparsers): + pass + + @gimmecert.decorators.subcommand_parser + def myfunction2(parser, subparsers): + pass + + registered_functions = gimmecert.decorators.get_subcommand_parser_setup_functions() + + assert registered_functions == [myfunction1, myfunction2] + + +def test_subcommand_parser_decorator_ensures_function_has_correct_signature(): + + with pytest.raises(gimmecert.decorators.SetupSubcommandParserInvalidSignature): + + @gimmecert.decorators.subcommand_parser + def invalid_signature_no_arguments(): + pass + + with pytest.raises(gimmecert.decorators.SetupSubcommandParserInvalidSignature): + + @gimmecert.decorators.subcommand_parser + def invalid_signature_too_many_arguments(parser, subparsers, extra): + pass