From cdbd64a30d4dd47034be7dac2ed4ab523add24af Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 15 Jun 2017 12:51:20 +0200 Subject: [PATCH] Move test_configtypes_hypothesis to test_configtypes --- tests/unit/config/test_configtypes.py | 41 ++++++++++++ .../config/test_configtypes_hypothesis.py | 62 ------------------- 2 files changed, 41 insertions(+), 62 deletions(-) delete mode 100644 tests/unit/config/test_configtypes_hypothesis.py diff --git a/tests/unit/config/test_configtypes.py b/tests/unit/config/test_configtypes.py index 61067f0e9..7bcfbe26b 100644 --- a/tests/unit/config/test_configtypes.py +++ b/tests/unit/config/test_configtypes.py @@ -19,12 +19,18 @@ """Tests for qutebrowser.config.configtypes.""" import re +import os +import sys import json import collections import itertools import warnings +import inspect +import functools import pytest +import hypothesis +from hypothesis import strategies from PyQt5.QtCore import QUrl from PyQt5.QtGui import QColor, QFont from PyQt5.QtNetwork import QNetworkProxy @@ -175,6 +181,41 @@ class TestValidValues: assert vv.descriptions['bar'] == "bar desc" +class TestAll: + + """Various tests which apply to all available config types.""" + + def gen_classes(): + """Yield all configtypes classes to test. + + Not a method as it's used in decorators. + """ + for _name, member in inspect.getmembers(configtypes, inspect.isclass): + if member in [configtypes.BaseType, configtypes.MappingType, + configtypes._Numeric]: + pass + elif member is configtypes.List: + yield functools.partial(member, valtype=configtypes.Int()) + yield functools.partial(member, valtype=configtypes.Url()) + elif member is configtypes.Dict: + yield functools.partial(member, keytype=configtypes.String(), + valtype=configtypes.String()) + elif member is configtypes.FormatString: + yield functools.partial(member, fields=['a', 'b']) + elif issubclass(member, configtypes.BaseType): + yield member + + @pytest.mark.usefixtures('qapp', 'config_tmpdir') + @pytest.mark.parametrize('klass', gen_classes()) + @hypothesis.given(strategies.text()) + @hypothesis.example('\x00') + def test_from_str_hypothesis(self, klass, s): + try: + klass().from_str(s) + except configexc.ValidationError: + pass + + class TestBaseType: @pytest.fixture diff --git a/tests/unit/config/test_configtypes_hypothesis.py b/tests/unit/config/test_configtypes_hypothesis.py deleted file mode 100644 index 96f47622e..000000000 --- a/tests/unit/config/test_configtypes_hypothesis.py +++ /dev/null @@ -1,62 +0,0 @@ -# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: -# Copyright 2015-2017 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 os -import sys -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.List: - yield functools.partial(member, inner_type=configtypes.Int()) - yield functools.partial(member, inner_type=configtypes.Url()) - elif member is configtypes.FormatString: - yield functools.partial(member, fields=['a', 'b']) - elif issubclass(member, configtypes.BaseType): - yield member - - -@pytest.mark.usefixtures('qapp', 'config_tmpdir') -@pytest.mark.parametrize('klass', gen_classes()) -@hypothesis.given(strategies.text()) -@hypothesis.example('\x00') -def test_configtypes_hypothesis(klass, s): - if (klass == configtypes.File and sys.platform == 'linux' and - not os.environ.get('DISPLAY', '')): - pytest.skip("No DISPLAY available") - - try: - klass().validate(s) - except configexc.ValidationError: - pass - else: - klass().transform(s)