From ebdfa0be733bace5ef0af2d95451bf2135bb2edb Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 24 Jul 2015 17:49:09 +0200 Subject: [PATCH] Add hypothesis tests for configtypes. See #830. --- .gitignore | 1 + tests/config/test_configtypes_hypothesis.py | 50 +++++++++++++++++++++ tox.ini | 2 + 3 files changed, 53 insertions(+) create mode 100644 tests/config/test_configtypes_hypothesis.py diff --git a/.gitignore b/.gitignore index fc3dd315d..d71a7a16b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ __pycache__ /testresults.html /.cache /.testmondata +/.hypothesis diff --git a/tests/config/test_configtypes_hypothesis.py b/tests/config/test_configtypes_hypothesis.py new file mode 100644 index 000000000..e214e39e7 --- /dev/null +++ b/tests/config/test_configtypes_hypothesis.py @@ -0,0 +1,50 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: +# Copyright 2015 Florian Bruhin (The Compiler) + +# This file is part of qutebrowser. +# +# qutebrowser 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. +# +# qutebrowser 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 qutebrowser. If not, see . + +"""Hypothesis tests for qutebrowser.config.configtypes.""" + +import inspect +import functools + +import pytest +import hypothesis +from hypothesis import strategies + +from qutebrowser.config import configtypes, configexc + + +def gen_classes(): + for name, member in inspect.getmembers(configtypes, inspect.isclass): + if member is configtypes.BaseType: + pass + elif member is configtypes.MappingType: + pass + elif member is configtypes.FormatString: + yield functools.partial(member, fields=['a', 'b']) + elif issubclass(member, configtypes.BaseType): + yield member + + +@pytest.mark.parametrize('klass', gen_classes()) +@hypothesis.given(strategies.text()) +@hypothesis.example('\x00') +def test_configtypes_hypothesis(klass, s): + try: + klass().validate(s) + except configexc.ValidationError: + pass diff --git a/tox.ini b/tox.ini index 969d7de7b..8ebbf7600 100644 --- a/tox.ini +++ b/tox.ini @@ -27,6 +27,8 @@ deps = pytest-qt==1.5.0 pytest-mock==0.7.0 pytest-html==1.3.1 + hypothesis==1.8.4 + hypothesis-pytest==0.13.0 commands = {envpython} scripts/link_pyqt.py --tox {envdir} {envpython} -m py.test --strict -rfEsw {posargs:tests}