mirror of
https://github.com/progval/irctest.git
synced 2025-04-07 07:49:52 +00:00
Initial overhaul changes
This commit is contained in:
89
test.py
Normal file
89
test.py
Normal file
@ -0,0 +1,89 @@
|
||||
import sys
|
||||
import unittest
|
||||
import argparse
|
||||
import unittest
|
||||
import functools
|
||||
import importlib
|
||||
from irctest.cases import _IrcTestCase
|
||||
from irctest.runner import TextTestRunner
|
||||
from irctest.specifications import Specifications
|
||||
from irctest.basecontrollers import BaseClientController, BaseServerController
|
||||
|
||||
def main(args):
|
||||
try:
|
||||
module = importlib.import_module(args.module)
|
||||
except ImportError:
|
||||
print('Cannot import module {}'.format(args.module), file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
controller_class = module.get_irctest_controller_class()
|
||||
if issubclass(controller_class, BaseClientController):
|
||||
from irctest import client_tests as module
|
||||
elif issubclass(controller_class, BaseServerController):
|
||||
from irctest import server_tests as module
|
||||
else:
|
||||
print(r'{}.Controller should be a subclass of '
|
||||
r'irctest.basecontroller.Base{{Client,Server}}Controller'
|
||||
.format(args.module),
|
||||
file=sys.stderr)
|
||||
exit(1)
|
||||
_IrcTestCase.controllerClass = controller_class
|
||||
_IrcTestCase.show_io = args.show_io
|
||||
_IrcTestCase.strictTests = not args.loose
|
||||
if args.specification:
|
||||
try:
|
||||
_IrcTestCase.testedSpecifications = frozenset(
|
||||
Specifications.of_name(x) for x in args.specification
|
||||
)
|
||||
except ValueError:
|
||||
print('Invalid set of specifications: {}'
|
||||
.format(', '.join(args.specification)))
|
||||
exit(1)
|
||||
else:
|
||||
specs = list(Specifications)
|
||||
# remove deprecated specs
|
||||
specs.remove(Specifications.RFCDeprecated)
|
||||
specs.remove(Specifications.IRC302Deprecated)
|
||||
|
||||
_IrcTestCase.testedSpecifications = frozenset(specs)
|
||||
print('Testing {} on specification(s): {}'.format(
|
||||
controller_class.software_name,
|
||||
', '.join(sorted(map(lambda x:x.value,
|
||||
_IrcTestCase.testedSpecifications)))))
|
||||
ts = module.discover()
|
||||
testRunner = TextTestRunner(
|
||||
verbosity=args.verbose,
|
||||
descriptions=True,
|
||||
)
|
||||
testLoader = unittest.loader.defaultTestLoader
|
||||
result = testRunner.run(ts)
|
||||
if result.failures or result.errors:
|
||||
exit(1)
|
||||
else:
|
||||
exit(0)
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description='A script to test interoperability of IRC software.')
|
||||
parser.add_argument('module', type=str,
|
||||
help='The module used to run the tested program.')
|
||||
parser.add_argument('--show-io', action='store_true',
|
||||
help='Show input/outputs with the tested program.')
|
||||
parser.add_argument('-v', '--verbose', action='count', default=1,
|
||||
help='Verbosity. Give this option multiple times to make '
|
||||
'it even more verbose.')
|
||||
parser.add_argument('-s', '--specification', type=str, action='append',
|
||||
help=('The set of specifications to test the program with. '
|
||||
'Valid values: {}. '
|
||||
'Use this option multiple times to test with multiple '
|
||||
'specifications. If it is not given, defaults to all that '
|
||||
'are not deprecated.')
|
||||
.format(', '.join(x.value for x in Specifications)))
|
||||
parser.add_argument('-l', '--loose', action='store_true',
|
||||
help='Disables strict checks of conformity to the specification. '
|
||||
'Strict means the specification is unclear, and the most restrictive '
|
||||
'interpretation is choosen.')
|
||||
|
||||
|
||||
args = parser.parse_args()
|
||||
main(args)
|
Reference in New Issue
Block a user