diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-07-24 18:31:45 -0400 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2021-07-26 15:19:13 -0400 |
commit | 7eb4c231561dfc5a322814e587b9b89969745367 (patch) | |
tree | 75b078a932ebb1726dadb9cb56ab2f6f8d1dd9e4 /unittests/pythontests.py | |
parent | dbf2ace6ca1ce39aa01497f815b65856079cc581 (diff) | |
download | meson-7eb4c231561dfc5a322814e587b9b89969745367.zip meson-7eb4c231561dfc5a322814e587b9b89969745367.tar.gz meson-7eb4c231561dfc5a322814e587b9b89969745367.tar.bz2 |
Split run_unittests.py file
Diffstat (limited to 'unittests/pythontests.py')
-rw-r--r-- | unittests/pythontests.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/unittests/pythontests.py b/unittests/pythontests.py new file mode 100644 index 0000000..7a709f0 --- /dev/null +++ b/unittests/pythontests.py @@ -0,0 +1,83 @@ +# Copyright 2016-2021 The Meson development team + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import unittest + +from run_tests import ( + Backend +) + +from .baseplatformtests import BasePlatformTests + +class PythonTests(BasePlatformTests): + ''' + Tests that verify compilation of python extension modules + ''' + + def test_versions(self): + if self.backend is not Backend.ninja: + raise unittest.SkipTest(f'Skipping python tests with {self.backend.name} backend') + + testdir = os.path.join(self.src_root, 'test cases', 'unit', '39 python extmodule') + + # No python version specified, this will use meson's python + self.init(testdir) + self.build() + self.run_tests() + self.wipe() + + # When specifying a known name, (python2 / python3) the module + # will also try 'python' as a fallback and use it if the major + # version matches + try: + self.init(testdir, extra_args=['-Dpython=python2']) + self.build() + self.run_tests() + except unittest.SkipTest: + # python2 is not necessarily installed on the test machine, + # if it is not, or the python headers can't be found, the test + # will raise MESON_SKIP_TEST, we could check beforehand what version + # of python is available, but it's a bit of a chicken and egg situation, + # as that is the job of the module, so we just ask for forgiveness rather + # than permission. + pass + + self.wipe() + + for py in ('pypy', 'pypy3'): + try: + self.init(testdir, extra_args=['-Dpython=%s' % py]) + except unittest.SkipTest: + # Same as above, pypy2 and pypy3 are not expected to be present + # on the test system, the test project only raises in these cases + continue + + # We have a pypy, this is expected to work + self.build() + self.run_tests() + self.wipe() + + # The test is configured to error out with MESON_SKIP_TEST + # in case it could not find python + with self.assertRaises(unittest.SkipTest): + self.init(testdir, extra_args=['-Dpython=not-python']) + self.wipe() + + # While dir is an external command on both Windows and Linux, + # it certainly isn't python + with self.assertRaises(unittest.SkipTest): + self.init(testdir, extra_args=['-Dpython=dir']) + self.wipe() + |