Commit 823cd196475ed6b6468580eb0ca4838b15ca1179
1 parent
d89b2921
Use Python unit tests in the ctools.test() function.
This avoids code duplication and makes use to the standard unit tests within the installation.
Showing
4 changed files
with
95 additions
and
31 deletions
pyext/Makefile.am
| @@ -30,13 +30,36 @@ | @@ -30,13 +30,36 @@ | ||
| 30 | if WITH_PYTHON | 30 | if WITH_PYTHON |
| 31 | 31 | ||
| 32 | # Test scripts to be distributed in $(pythondir)/ctools/tests | 32 | # Test scripts to be distributed in $(pythondir)/ctools/tests |
| 33 | -testscripts = ctools/tests/__init__.py \ | ||
| 34 | - ctools/tests/unbinned.py | 33 | +testscripts = $(abs_top_srcdir)/test/test_python.py \ |
| 34 | + $(abs_top_srcdir)/test/test_ctobssim.py \ | ||
| 35 | + $(abs_top_srcdir)/test/test_ctselect.py \ | ||
| 36 | + $(abs_top_srcdir)/test/test_ctbin.py \ | ||
| 37 | + $(abs_top_srcdir)/test/test_ctlike.py \ | ||
| 38 | + $(abs_top_srcdir)/test/test_cttsmap.py \ | ||
| 39 | + $(abs_top_srcdir)/test/test_ctmodel.py \ | ||
| 40 | + $(abs_top_srcdir)/test/test_ctskymap.py \ | ||
| 41 | + $(abs_top_srcdir)/test/test_ctexpcube.py \ | ||
| 42 | + $(abs_top_srcdir)/test/test_ctpsfcube.py \ | ||
| 43 | + $(abs_top_srcdir)/test/test_ctbkgcube.py \ | ||
| 44 | + $(abs_top_srcdir)/test/test_ctcubemask.py \ | ||
| 45 | + $(abs_top_srcdir)/test/test_ctbutterfly.py \ | ||
| 46 | + $(abs_top_srcdir)/test/test_ctulimit.py \ | ||
| 47 | + $(abs_top_srcdir)/test/test_cterror.py \ | ||
| 48 | + $(abs_top_srcdir)/test/test_pipelines.py | ||
| 49 | +testdata = $(abs_top_srcdir)/test/data/crab.xml \ | ||
| 50 | + $(abs_top_srcdir)/test/data/crab_events.fits.gz \ | ||
| 51 | + $(abs_top_srcdir)/test/data/crab_cntmap.fits.gz \ | ||
| 52 | + $(abs_top_srcdir)/test/data/exclusion.reg | ||
| 53 | +testirf = $(abs_top_srcdir)/test/irf/cta_dummy_irf.dat | ||
| 35 | 54 | ||
| 36 | # Distribute scripts | 55 | # Distribute scripts |
| 37 | -EXTRA_DIST = $(testscripts) | 56 | +EXTRA_DIST = $(testscripts) $(testdata) $(testirf) |
| 38 | testscriptsdir = $(pythondir)/ctools/tests | 57 | testscriptsdir = $(pythondir)/ctools/tests |
| 39 | testscripts_DATA = $(testscripts) | 58 | testscripts_DATA = $(testscripts) |
| 59 | +testdatadir = $(pythondir)/ctools/tests/data | ||
| 60 | +testdata_DATA = $(testdata) | ||
| 61 | +testirfdir = $(pythondir)/ctools/tests/irf | ||
| 62 | +testirf_DATA = $(testirf) | ||
| 40 | 63 | ||
| 41 | # Set SWIG interface filename | 64 | # Set SWIG interface filename |
| 42 | SWIG_INTERFACE = ctools/tools.i | 65 | SWIG_INTERFACE = ctools/tools.i |
pyext/ctools/__init__.py
| 1 | +# ========================================================================== | ||
| 2 | +# ctools Python module | ||
| 3 | +# | ||
| 4 | +# Copyright (C) 2015 Juergen Knoedlseder | ||
| 5 | +# | ||
| 6 | +# This program 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. | ||
| 10 | +# | ||
| 11 | +# This program 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. | ||
| 15 | +# | ||
| 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/>. | ||
| 18 | +# | ||
| 19 | +# ========================================================================== | ||
| 1 | # import gammalib first | 20 | # import gammalib first |
| 2 | import gammalib | 21 | import gammalib |
| 3 | 22 | ||
| @@ -15,23 +34,3 @@ del tools | @@ -15,23 +34,3 @@ del tools | ||
| 15 | del gammalib | 34 | del gammalib |
| 16 | del bad_entries | 35 | del bad_entries |
| 17 | del entry | 36 | del entry |
| 18 | - | ||
| 19 | -# Add test function | ||
| 20 | -def test(verbosity=2): | ||
| 21 | - """ | ||
| 22 | - Run ctools tests. | ||
| 23 | - """ | ||
| 24 | - # Imports | ||
| 25 | - import unittest | ||
| 26 | - from .tests.unbinned import pipelines | ||
| 27 | - | ||
| 28 | - # Create a test suite | ||
| 29 | - test_suite = unittest.TestSuite() | ||
| 30 | - | ||
| 31 | - # Test cases must be listed manually here ... | ||
| 32 | - # We currently don't use unittest for test collection | ||
| 33 | - test_suite.addTest(unittest.makeSuite(pipelines)) | ||
| 34 | - | ||
| 35 | - # Create a test runner and run the test | ||
| 36 | - test_runner = unittest.TextTestRunner(verbosity=verbosity) | ||
| 37 | - test_runner.run(test_suite) |
pyext/ctools/tools.i
| @@ -60,3 +60,10 @@ | @@ -60,3 +60,10 @@ | ||
| 60 | %include "ctbutterfly.i" | 60 | %include "ctbutterfly.i" |
| 61 | %include "ctulimit.i" | 61 | %include "ctulimit.i" |
| 62 | %include "cterror.i" | 62 | %include "cterror.i" |
| 63 | + | ||
| 64 | +/* __ Test function ______________________________________________________ */ | ||
| 65 | +%pythoncode %{ | ||
| 66 | +def test(): | ||
| 67 | + from ctools.tests import test_python | ||
| 68 | + test_python.test(installed=True) | ||
| 69 | +%} | ||
| 63 | \ No newline at end of file | 70 | \ No newline at end of file |
test/test_python.py
| @@ -39,10 +39,10 @@ import test_cterror | @@ -39,10 +39,10 @@ import test_cterror | ||
| 39 | import test_pipelines | 39 | import test_pipelines |
| 40 | 40 | ||
| 41 | 41 | ||
| 42 | -# ======================== # | ||
| 43 | -# Main routine entry point # | ||
| 44 | -# ======================== # | ||
| 45 | -if __name__ == '__main__': | 42 | +# ================== # |
| 43 | +# Perform unit tests # | ||
| 44 | +# ================== # | ||
| 45 | +def test(installed=False): | ||
| 46 | """ | 46 | """ |
| 47 | Perform unit testing for Python interface. | 47 | Perform unit testing for Python interface. |
| 48 | """ | 48 | """ |
| @@ -100,20 +100,41 @@ if __name__ == '__main__': | @@ -100,20 +100,41 @@ if __name__ == '__main__': | ||
| 100 | suites.append(suite_cterror) | 100 | suites.append(suite_cterror) |
| 101 | suites.append(suite_pipelines) | 101 | suites.append(suite_pipelines) |
| 102 | 102 | ||
| 103 | + # If we have an installed version then create a temporary | ||
| 104 | + # directory and copy over all information that is needed | ||
| 105 | + if installed: | ||
| 106 | + | ||
| 107 | + # Create temporary working directory | ||
| 108 | + import tempfile | ||
| 109 | + path = tempfile.mkdtemp() | ||
| 110 | + os.chdir(path) | ||
| 111 | + | ||
| 112 | + # Get test directory | ||
| 113 | + import inspect | ||
| 114 | + testdir = inspect.getfile(ctools.tests) | ||
| 115 | + head, tail = os.path.split(testdir) | ||
| 116 | + | ||
| 117 | + # Copy over test data and irf | ||
| 118 | + os.system("cp -r %s %s" % (head+"/data", "data")) | ||
| 119 | + os.system("cp -r %s %s" % (head+"/irf", "irf")) | ||
| 120 | + | ||
| 103 | # Set PFILES environment variable | 121 | # Set PFILES environment variable |
| 104 | try: | 122 | try: |
| 105 | os.mkdir("pfiles") | 123 | os.mkdir("pfiles") |
| 106 | except: | 124 | except: |
| 107 | pass | 125 | pass |
| 108 | - os.system("cp -r ../src/*/*.par pfiles/") | ||
| 109 | os.environ['PFILES'] = "pfiles" | 126 | os.environ['PFILES'] = "pfiles" |
| 110 | 127 | ||
| 128 | + # If we have a non-installed version then copy over pfiles | ||
| 129 | + if not installed: | ||
| 130 | + os.system("cp -r ../src/*/*.par pfiles/") | ||
| 131 | + | ||
| 111 | # Run test suite | 132 | # Run test suite |
| 112 | success = suites.run() | 133 | success = suites.run() |
| 113 | 134 | ||
| 114 | - | ||
| 115 | - # Save test results | ||
| 116 | - suites.save("reports/ctools.xml") | 135 | + # If we have a non-installed version then save test results |
| 136 | + if not installed: | ||
| 137 | + suites.save("reports/ctools.xml") | ||
| 117 | 138 | ||
| 118 | # Set return code | 139 | # Set return code |
| 119 | if success: | 140 | if success: |
| @@ -121,5 +142,19 @@ if __name__ == '__main__': | @@ -121,5 +142,19 @@ if __name__ == '__main__': | ||
| 121 | else: | 142 | else: |
| 122 | rc = 1 | 143 | rc = 1 |
| 123 | 144 | ||
| 145 | + # Return | ||
| 146 | + return rc | ||
| 147 | + | ||
| 148 | + | ||
| 149 | +# ======================== # | ||
| 150 | +# Main routine entry point # | ||
| 151 | +# ======================== # | ||
| 152 | +if __name__ == '__main__': | ||
| 153 | + """ | ||
| 154 | + Perform unit testing for Python interface. | ||
| 155 | + """ | ||
| 156 | + # Run tests | ||
| 157 | + rc = test() | ||
| 158 | + | ||
| 124 | # Exit with return code | 159 | # Exit with return code |
| 125 | sys.exit(rc) | 160 | sys.exit(rc) |