26
26
from enum import Enum
27
27
from glob import glob
28
28
from pathlib import Path
29
+ from unittest import mock
29
30
from mesonbuild import compilers
30
31
from mesonbuild import dependencies
31
32
from mesonbuild import mesonlib
@@ -255,16 +256,11 @@ def ensure_backend_detects_changes(backend):
255
256
time .sleep (1 )
256
257
257
258
def run_mtest_inprocess (commandlist ):
258
- old_stdout = sys .stdout
259
- sys .stdout = mystdout = StringIO ()
260
- old_stderr = sys .stderr
261
- sys .stderr = mystderr = StringIO ()
262
- try :
259
+ stderr = StringIO ()
260
+ stdout = StringIO ()
261
+ with mock .patch .object (sys , 'stdout' , stdout ), mock .patch .object (sys , 'stderr' , stderr ):
263
262
returncode = mtest .run_with_args (commandlist )
264
- finally :
265
- sys .stdout = old_stdout
266
- sys .stderr = old_stderr
267
- return returncode , mystdout .getvalue (), mystderr .getvalue ()
263
+ return returncode , stdout .getvalue (), stderr .getvalue ()
268
264
269
265
def clear_meson_configure_class_caches ():
270
266
compilers .CCompiler .library_dirs_cache = {}
@@ -275,22 +271,14 @@ def clear_meson_configure_class_caches():
275
271
dependencies .PkgConfigDependency .class_pkgbin = mesonlib .PerMachine (None , None )
276
272
277
273
def run_configure_inprocess (commandlist , env = None ):
278
- old_stdout = sys .stdout
279
- sys .stdout = mystdout = StringIO ()
280
- old_stderr = sys .stderr
281
- sys .stderr = mystderr = StringIO ()
282
- old_environ = os .environ .copy ()
283
- if env is not None :
284
- os .environ .update (env )
285
- try :
286
- returncode = mesonmain .run (commandlist , get_meson_script ())
287
- finally :
288
- sys .stdout = old_stdout
289
- sys .stderr = old_stderr
290
- clear_meson_configure_class_caches ()
291
- os .environ .clear ()
292
- os .environ .update (old_environ )
293
- return returncode , mystdout .getvalue (), mystderr .getvalue ()
274
+ stderr = StringIO ()
275
+ stdout = StringIO ()
276
+ with mock .patch .dict (os .environ , env or {}), mock .patch .object (sys , 'stdout' , stdout ), mock .patch .object (sys , 'stderr' , stderr ):
277
+ try :
278
+ returncode = mesonmain .run (commandlist , get_meson_script ())
279
+ finally :
280
+ clear_meson_configure_class_caches ()
281
+ return returncode , stdout .getvalue (), stderr .getvalue ()
294
282
295
283
def run_configure_external (full_command , env = None ):
296
284
pc , o , e = mesonlib .Popen_safe (full_command , env = env )
0 commit comments