Skip to content

Commit

Permalink
rudimentary tests for ConfigElement
Browse files Browse the repository at this point in the history
  • Loading branch information
nihlaeth committed Feb 12, 2017
1 parent 44a5281 commit ee97e17
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$

# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
no-docstring-rgx=^(_|test_|Test)

# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
Expand Down
3 changes: 3 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[aliases]
test=pytest

[build_sphinx]
source-dir = doc/source
build-dir = doc/build
Expand Down
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ def run(self):
license='GPLv3',
python_requires='>=2.7',
packages=find_packages(),
setup_requires=['pip>=9.0.1'],
setup_requires=['pip>=9.0.1', 'pytest-runner'],
tests_require=['pytest'],
install_requires=['appdirs>=1.4', 'pathlib;python_version<"3.3"'],
extras_require={
'doctest': ['sphinx>=1.3.1'],
Expand Down
56 changes: 56 additions & 0 deletions tests/test_config_elements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"""Test ConfigElement and subclasses."""
import argparse
import pytest

from user_config import ConfigElement, InvalidData

def validate_length(value):
"""Custom validator."""
if len(value) > 3:
raise InvalidData('we cant handle more than three characters')

# pylint:disable=no-self-use
class TestConfigElement(object):

def test_init(self):
with pytest.raises(InvalidData):
config_element = ConfigElement(default=42)
config_element = ConfigElement(doc="test")
assert config_element.doc == "test"
assert config_element.required
config_element = ConfigElement(required=False)
assert not config_element.required
config_element = ConfigElement(short_name='f')
# pylint: disable=protected-access
assert config_element._short_name == '-f'
config_element = ConfigElement(short_name='-f')
assert config_element._short_name == '-f'
config_element = ConfigElement(long_name='force')
assert config_element._long_name == '--force'
config_element = ConfigElement(long_name='--force')
assert config_element._long_name == '--force'
config_element = ConfigElement(
default='hi', validate=validate_length)
assert config_element.get_default() == 'hi'
with pytest.raises(InvalidData):
config_element = ConfigElement(
default='high', validate=validate_length)

def test_default(self):
config_element = ConfigElement()
assert not config_element.has_default()
assert config_element.get_default() is None
config_element = ConfigElement(default="test")
assert config_element.has_default()
assert config_element.get_default() == "test"

def test_parser(self):
config_element = ConfigElement()
config_element.element_name = "test"
parser = argparse.ArgumentParser(prog="test application")
config_element.construct_parser(parser)
arguments = vars(parser.parse_args(['--test', 'success']))
assert arguments['test'] == 'success'
data = {}
config_element.extract_data_from_parser(arguments, data)
assert data['test'] == 'success'
2 changes: 1 addition & 1 deletion user_config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class ConfigElement(object):
Raises
------
InvalidArgument:
InvalidData:
if default value does not pass validation
Attributes
Expand Down

0 comments on commit ee97e17

Please sign in to comment.