unit tests: Fix sdl2 failure test on macOS

Also ensure that the test's no-pkg-config codepath will always be run,
even on the CI where we always have pkg-config available.

This counts as a test case for #4728
pull/4790/head
Nirbheek Chauhan 6 years ago committed by Nirbheek Chauhan
parent 58852e6290
commit 3997e8762e
  1. 8
      run_tests.py
  2. 35
      run_unittests.py

@ -213,6 +213,13 @@ def run_mtest_inprocess(commandlist):
sys.stderr = old_stderr
return returncode, mystdout.getvalue(), mystderr.getvalue()
def clear_meson_configure_class_caches():
mesonbuild.compilers.CCompiler.library_dirs_cache = {}
mesonbuild.compilers.CCompiler.program_dirs_cache = {}
mesonbuild.compilers.CCompiler.find_library_cache = {}
mesonbuild.dependencies.PkgConfigDependency.pkgbin_cache = {}
mesonbuild.dependencies.PkgConfigDependency.class_pkgbin = mesonlib.PerMachine(None, None, None)
def run_configure_inprocess(commandlist):
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
@ -223,6 +230,7 @@ def run_configure_inprocess(commandlist):
finally:
sys.stdout = old_stdout
sys.stderr = old_stderr
clear_meson_configure_class_caches()
return returncode, mystdout.getvalue(), mystderr.getvalue()
def run_configure_external(full_command):

@ -230,6 +230,32 @@ def temp_filename():
except OSError:
pass
@contextmanager
def no_pkgconfig():
'''
A context manager that overrides shutil.which and ExternalProgram to force
them to return None for pkg-config to simulate it not existing.
'''
old_which = shutil.which
old_search = ExternalProgram._search
def new_search(self, name, search_dir):
if name == 'pkg-config':
return [None]
return old_search(self, name, search_dir)
def new_which(cmd, *kwargs):
if cmd == 'pkg-config':
return None
return old_which(cmd, *kwargs)
shutil.which = new_which
ExternalProgram._search = new_search
try:
yield
finally:
shutil.which = old_which
ExternalProgram._search = old_search
class PatchModule:
'''
@ -3412,7 +3438,7 @@ class FailureTests(BasePlatformTests):
and slows down testing.
'''
dnf = "[Dd]ependency.*not found(:.*)?"
nopkg = '[Pp]kg-config not found'
nopkg = '[Pp]kg-config.*not found'
def setUp(self):
super().setUp()
@ -3499,10 +3525,9 @@ class FailureTests(BasePlatformTests):
raise unittest.SkipTest('sdl2-config found')
self.assertMesonRaises("dependency('sdl2', method : 'sdlconfig')", self.dnf)
if shutil.which('pkg-config'):
errmsg = self.dnf
else:
errmsg = self.nopkg
self.assertMesonRaises("dependency('sdl2', method : 'pkg-config')", errmsg)
self.assertMesonRaises("dependency('sdl2', method : 'pkg-config')", self.dnf)
with no_pkgconfig():
self.assertMesonRaises("dependency('sdl2', method : 'pkg-config')", self.nopkg)
def test_gnustep_notfound_dependency(self):
# Want to test failure, so skip if available

Loading…
Cancel
Save