summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2015-07-24 17:49:09 +0200
committerFlorian Bruhin <git@the-compiler.org>2015-07-24 17:49:09 +0200
commitebdfa0be733bace5ef0af2d95451bf2135bb2edb (patch)
treef62f238f429eb0db453f8eede75e5f7ec1f11373
parentb19852b6e76c5e0e9ed93ab7798d25f761e16eca (diff)
downloadqutebrowser-ebdfa0be733bace5ef0af2d95451bf2135bb2edb.tar.gz
qutebrowser-ebdfa0be733bace5ef0af2d95451bf2135bb2edb.zip
Add hypothesis tests for configtypes.
See #830.
-rw-r--r--.gitignore1
-rw-r--r--tests/config/test_configtypes_hypothesis.py50
-rw-r--r--tox.ini2
3 files changed, 53 insertions, 0 deletions
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) <mail@qutebrowser.org>
+
+# 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 <http://www.gnu.org/licenses/>.
+
+"""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}