unittests: Add Python unittest for limited API

This new unittest runs the existing Python limited API
test case, and checks that the resulting library was linked to
the correct library.
pull/13171/head
Andrew McNulty 9 months ago
parent d1abdce88f
commit 4023bbfc36
  1. 31
      unittests/pythontests.py

@ -11,7 +11,7 @@ from .allplatformstests import git_init
from .baseplatformtests import BasePlatformTests
from .helpers import *
from mesonbuild.mesonlib import MachineChoice, TemporaryDirectoryWinProof
from mesonbuild.mesonlib import MachineChoice, TemporaryDirectoryWinProof, is_windows
from mesonbuild.modules.python import PythonModule
class PythonTests(BasePlatformTests):
@ -86,3 +86,32 @@ python = pymod.find_installation('python3', required: true)
if shutil.which('python2') or PythonModule._get_win_pythonpath('python2'):
raise self.skipTest('python2 installed, already tested')
self._test_bytecompile()
def test_limited_api_linked_correct_lib(self):
if not is_windows():
return self.skipTest('Test only run on Windows.')
testdir = os.path.join(self.src_root, 'test cases', 'python', '9 extmodule limited api')
self.init(testdir)
self.build()
from importlib.machinery import EXTENSION_SUFFIXES
limited_suffix = EXTENSION_SUFFIXES[1]
limited_library_path = os.path.join(self.builddir, f'limited{limited_suffix}')
self.assertPathExists(limited_library_path)
limited_dep_name = 'python3.dll'
if shutil.which('dumpbin'):
# MSVC
output = subprocess.check_output(['dumpbin', '/DEPENDENTS', limited_library_path],
stderr=subprocess.STDOUT)
self.assertIn(limited_dep_name, output.decode())
elif shutil.which('objdump'):
# mingw
output = subprocess.check_output(['objdump', '-p', limited_library_path],
stderr=subprocess.STDOUT)
self.assertIn(limited_dep_name, output.decode())
else:
raise self.skipTest('Test needs either dumpbin(MSVC) or objdump(mingw).')

Loading…
Cancel
Save