Source code for unittests.linux.test_commands

#!/usr/bin/env python
# Copyright (c) 2016 - 2017, Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""``test_commands.py``

`Command helpers Unittests`

"""

from collections import OrderedDict

import pytest

from testlib.custom_exceptions import UnknownArguments, ArgumentsCollision
from testlib.linux.commands import mkdir_cmd
from testlib.linux.commands.cmd_helper import Command, CommandHelper


[docs]def pytest_raises(exc_iter): def decorator(f): def wrapper(*args, **kwargs): with pytest.raises(exc_iter): f(*args, **kwargs) return wrapper return decorator
[docs]class TestCmdHelperBasic(object): Command.CMD_HELPER = CommandHelper(params=OrderedDict.fromkeys('abcde', {}))
[docs] @pytest_raises(SystemExit) def test_empty_argparse_raises_exception(self): # create a Command with the default empty CommandHelper Command(list(''))
[docs] def test_inits(self): l = Command(list('abcde')) s = Command('a b c d e') d = Command({k: k for k in 'abcde'}) c = Command(l) n = Command(l._ns) assert l == s == d == c == n
[docs] def test_copy(self): l = Command(list('abcde')) d = Command.copy(l) assert l == d
[docs] def test_validate_dict(self): l = Command(list('abcde')) l._validate_dict(**{k: k for k in 'abcde'})
[docs] def test_get(self): l = Command(list('abcde')) assert l.get('a') == 'a'
[docs] def test_iter(self): l = Command(list('abcde')) for a in l: assert a in 'abcde'
[docs] def test_update(self): l = Command(list('abcde')) o = Command(list('abcde'[::-1])) l.update(dict(list(zip('abcde', 'abcde'[::-1])))) assert l == o
[docs]class TestCommandHelper(object): @classmethod def _build_args_list(cls, out_list, out_dict): _marker = object() cmd_list = [] for arg_k in out_list: arg_v = out_dict.get(arg_k, _marker) if arg_v != _marker: if arg_v: if isinstance(arg_v, list): cmd_list.extend(arg_v) elif isinstance(arg_v, int): cmd_list.append(str(arg_v)) elif isinstance(arg_v, str): cmd_list.append(arg_v) return cmd_list
[docs] def test_cmd_helper_start_empty(self): with pytest.raises(ArgumentsCollision): mkdir_cmd.CmdMkdir().check_args()
[docs] def test_cmd_helper_start_unknown(self): with pytest.raises(UnknownArguments): mkdir_cmd.CmdMkdir(unknown_argument=object()).check_args()
[docs] def test_cmd_helper_start_ok(self): mkdir_cmd.CmdMkdir(name=object()).check_args()
[docs] def test_cmd_helper_mkdir_kwargs_set(self): mkdir_kwargs = { 'mode': 'a+x', 'parents': False, 'verbose': True, 'context': 'CTX', 'help': True, 'version': True, 'name': 'some/dir/name', } cmd = mkdir_cmd.CmdMkdir(**mkdir_kwargs) cmd.check_args() output_list = mkdir_cmd.MkdirArgumentBuilder.ARGS_ORDERED output_dict = { 'mode': '-m=a+x', 'parents': None, 'verbose': '-v', 'context': '-Z=CTX', 'help': '--help', 'version': '--version', 'name': ['some/dir/name'], } _args_list = self._build_args_list(output_list, output_dict) assert 'name' in cmd assert 'parents' not in cmd assert mkdir_kwargs['name'] == cmd['name'] assert _args_list == cmd.to_args_list()
[docs] def test_cmd_helper_mkdir_kwargs_update(self): mkdir_kwargs = { 'mode': 'a+x', 'parents': False, 'verbose': True, 'context': 'CTX', 'help': True, 'version': True, 'name': 'some/dir/name', } cmd = mkdir_cmd.CmdMkdir(**mkdir_kwargs) cmd.check_args() cmd.update(parents=True, version=False) cmd.check_args() output_list = mkdir_cmd.MkdirArgumentBuilder.ARGS_ORDERED output_dict = { 'mode': '-m=a+x', 'parents': '-p', 'verbose': '-v', 'context': '-Z=CTX', 'help': '--help', 'version': None, 'name': ['some/dir/name'], } _args_list = self._build_args_list(output_list, output_dict) assert 'name' in cmd assert 'parents' in cmd assert mkdir_kwargs['name'] == cmd['name'] assert _args_list == cmd.to_args_list()
[docs] def test_cmd_helper_mkdir_kwargs_extend(self): mkdir_kwargs = { 'mode': 'a+x', 'parents': False, 'verbose': True, 'context': 'CTX', 'help': True, 'version': True, 'name': 'some/dir/name', } cmd = mkdir_cmd.CmdMkdir(**mkdir_kwargs) cmd.check_args() cmd.extend(parents=True, version=False) cmd.check_args() output_list = mkdir_cmd.MkdirArgumentBuilder.ARGS_ORDERED output_dict = { 'mode': '-m=a+x', 'parents': '-p', 'verbose': '-v', 'context': '-Z=CTX', 'help': '--help', 'version': '--version', 'name': ['some/dir/name'], } _args_list = self._build_args_list(output_list, output_dict) assert 'name' in cmd assert 'parents' in cmd assert mkdir_kwargs['name'] == cmd['name'] assert _args_list == cmd.to_args_list()
[docs] def test_cmd_helper_mkdir_kwarg_unset(self): mkdir_kwargs = { 'mode': 'a+x', 'parents': False, 'verbose': True, 'context': 'CTX', 'help': True, 'version': True, 'name': 'some/dir/name', } cmd = mkdir_cmd.CmdMkdir(**mkdir_kwargs) cmd.check_args() cmd.unset(mode='', parents='', verbose='', context='', version='', **{'help': ''}) cmd.check_args() output_list = mkdir_cmd.MkdirArgumentBuilder.ARGS_ORDERED output_dict = { 'name': 'some/dir/name', } _args_list = self._build_args_list(output_list, output_dict) assert 'name' in cmd assert 'parents' not in cmd assert mkdir_kwargs['name'] == cmd['name'] assert _args_list == cmd.to_args_list()
[docs] def test_cmd_helper_mkdir_merge(self): mkdir_kwargs_lhs = { 'mode': 'a+x', 'parents': False, 'verbose': True, 'context': 'CTX', 'help': True, 'version': True, 'name': 'lhs', } cmd_lhs = mkdir_cmd.CmdMkdir(**mkdir_kwargs_lhs) cmd_lhs.check_args() mkdir_kwargs_rhs = { 'mode': 'a+x', 'parents': True, 'verbose': False, 'context': 'CTX', 'help': False, 'version': False, 'name': 'rhs', } cmd_rhs = mkdir_cmd.CmdMkdir(**mkdir_kwargs_rhs) cmd_rhs.check_args() cmd = mkdir_cmd.CmdMkdir.merge(cmd_lhs, cmd_rhs) cmd.check_args() assert cmd['name'] == 'rhs' assert cmd['parents'] assert not cmd['verbose'] assert cmd._to_dict(cmd) == mkdir_kwargs_rhs