#!/usr/bin/env python3

import doctest

from tombola import Tombola

# modules to test
import bingo, lotto, tombolist, drum  # <1>

TEST_FILE = 'tombola_tests.rst'
TEST_MSG = '{0:16} {1.attempted:2} tests, {1.failed:2} failed - {2}'


def main(argv):
    verbose = '-v' in argv
    real_subclasses = Tombola.__subclasses__()  # <2>
    virtual_subclasses = [tombolist.TomboList]  # <3>
    for cls in real_subclasses + virtual_subclasses:  # <4>
        test(cls, verbose)


def test(cls, verbose=False):

    res = doctest.testfile(
            TEST_FILE,
            globs={'ConcreteTombola': cls},  # <5>
            verbose=verbose,
            optionflags=doctest.REPORT_ONLY_FIRST_FAILURE)
    tag = 'FAIL' if res.failed else 'OK'
    print(TEST_MSG.format(cls.__name__, res, tag))  # <6>


if __name__ == '__main__':
    import sys
    main(sys.argv)
