Update copyright years for 2013
[gpodder.git] / src / gpodder / unittests.py
blob929cba1189c7a361eeaedce7f7d9378ac7344ea1
1 # -*- coding: utf-8 -*-
3 # gPodder - A media aggregator and podcast client
4 # Copyright (c) 2005-2013 Thomas Perl and the gPodder Team
6 # gPodder is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # gPodder is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 # Run Doctests and Unittests for gPodder modules
22 # 2009-02-25 Thomas Perl <thp@gpodder.org>
25 import doctest
26 import unittest
27 import sys
29 try:
30 # Unused here locally, but we import it to be able to give an early
31 # warning about this missing dependency in order to avoid bogus errors.
32 import minimock
33 except ImportError, e:
34 print >>sys.stderr, """
35 Error: Unit tests require the "minimock" module (python-minimock).
36 Please install it before running the unit tests.
37 """
38 sys.exit(2)
40 # Main package and test package (for modules in main package)
41 package = 'gpodder'
42 test_package = '.'.join((package, 'test'))
44 suite = unittest.TestSuite()
45 coverage_modules = []
48 # Modules (in gpodder) for which doctests exist
49 # ex: Doctests embedded in "gpodder.util", coverage reported for "gpodder.util"
50 doctest_modules = ['util', 'jsonconfig']
52 for module in doctest_modules:
53 doctest_mod = __import__('.'.join((package, module)), fromlist=[module])
55 suite.addTest(doctest.DocTestSuite(doctest_mod))
56 coverage_modules.append(doctest_mod)
59 # Modules (in gpodder) for which unit tests (in gpodder.test) exist
60 # ex: Tests are in "gpodder.test.model", coverage reported for "gpodder.model"
61 test_modules = ['model']
63 for module in test_modules:
64 test_mod = __import__('.'.join((test_package, module)), fromlist=[module])
65 coverage_mod = __import__('.'.join((package, module)), fromlist=[module])
67 suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_mod))
68 coverage_modules.append(coverage_mod)
70 try:
71 # If you want a HTML-based test report, install HTMLTestRunner from:
72 # http://tungwaiyip.info/software/HTMLTestRunner.html
73 import HTMLTestRunner
74 REPORT_FILENAME = 'test_report.html'
75 runner = HTMLTestRunner.HTMLTestRunner(stream=open(REPORT_FILENAME, 'w'))
76 print """
77 HTML Test Report will be written to %s
78 """ % REPORT_FILENAME
79 except ImportError:
80 runner = unittest.TextTestRunner(verbosity=2)
82 try:
83 import coverage
84 except ImportError:
85 coverage = None
87 if __name__ == '__main__':
88 if coverage is not None:
89 coverage.erase()
90 coverage.start()
92 result = runner.run(suite)
94 if not result.wasSuccessful():
95 sys.exit(1)
97 if coverage is not None:
98 coverage.stop()
99 coverage.report(coverage_modules)
100 coverage.erase()
101 else:
102 print >>sys.stderr, """
103 No coverage reporting done (Python module "coverage" is missing)
104 Please install the python-coverage package to get coverage reporting.