diff options
Diffstat (limited to 'silx/app/view/test/test_launcher.py')
-rw-r--r-- | silx/app/view/test/test_launcher.py | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/silx/app/view/test/test_launcher.py b/silx/app/view/test/test_launcher.py index aabccf0..5f03de9 100644 --- a/silx/app/view/test/test_launcher.py +++ b/silx/app/view/test/test_launcher.py @@ -30,7 +30,9 @@ __date__ = "07/06/2018" import os +import shutil import sys +import tempfile import unittest import logging import subprocess @@ -74,38 +76,46 @@ class TestLauncher(unittest.TestCase): result = e.args[0] self.assertEqual(result, 0) - def executeCommandLine(self, command_line, env): + def executeAsScript(self, filename, *args): """Execute a command line. Log output as debug in case of bad return code. """ - _logger.info("Execute: %s", " ".join(command_line)) - p = subprocess.Popen(command_line, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=env) - out, err = p.communicate() - _logger.info("Return code: %d", p.returncode) - try: - out = out.decode('utf-8') - except UnicodeError: - pass - try: - err = err.decode('utf-8') - except UnicodeError: - pass - - if p.returncode != 0: - _logger.info("stdout:") - _logger.info("%s", out) - _logger.info("stderr:") - _logger.info("%s", err) - else: - _logger.debug("stdout:") - _logger.debug("%s", out) - _logger.debug("stderr:") - _logger.debug("%s", err) - self.assertEqual(p.returncode, 0) + env = self.createTestEnv() + + with tempfile.TemporaryDirectory() as tmpdir: + # Copy file to temporary dir to avoid import from current dir. + script = os.path.join(tmpdir, 'launcher.py') + shutil.copyfile(filename, script) + command_line = [sys.executable, script] + list(args) + + _logger.info("Execute: %s", " ".join(command_line)) + p = subprocess.Popen(command_line, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=env) + out, err = p.communicate() + _logger.info("Return code: %d", p.returncode) + try: + out = out.decode('utf-8') + except UnicodeError: + pass + try: + err = err.decode('utf-8') + except UnicodeError: + pass + + if p.returncode != 0: + _logger.info("stdout:") + _logger.info("%s", out) + _logger.info("stderr:") + _logger.info("%s", err) + else: + _logger.debug("stdout:") + _logger.debug("%s", out) + _logger.debug("stderr:") + _logger.debug("%s", err) + self.assertEqual(p.returncode, 0) def createTestEnv(self): """ @@ -120,18 +130,14 @@ class TestLauncher(unittest.TestCase): Uses subprocess to avoid to parasite the current environment. """ - env = self.createTestEnv() - commandLine = [sys.executable, main.__file__, "--help"] - self.executeCommandLine(commandLine, env) + self.executeAsScript(main.__file__, "--help") def testExecuteSilxViewHelp(self): """Test if the main module is well connected. Uses subprocess to avoid to parasite the current environment. """ - env = self.createTestEnv() - commandLine = [sys.executable, silx_main.__file__, "view", "--help"] - self.executeCommandLine(commandLine, env) + self.executeAsScript(silx_main.__file__, "view", "--help") def suite(): |