Move test_configtypes_hypothesis to test_configtypes

This commit is contained in:
Florian Bruhin 2017-06-15 12:51:20 +02:00
parent 51a29468be
commit cdbd64a30d
2 changed files with 41 additions and 62 deletions

View File

@ -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

View File

@ -1,62 +0,0 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2015-2017 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 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)