Mercurial > treepkg
view test/test_run.py @ 346:9cb4ed04434f
catch OSErrors if some programs are not installed
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Mon, 26 Apr 2010 10:12:35 +0000 |
parents | e3ab8aca2b08 |
children |
line wrap: on
line source
# Copyright (C) 2008 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. """Tests for treepkg.run""" import sys import os import unittest from filesupport import FileTestMixin from treepkg.run import call, capture_output, SubprocessError class TestCall(unittest.TestCase): def test_call_defaults(self): call([sys.executable, "-c", "pass"]) def test_call_error(self): """Test call with a subprocess that exits with a non-zero exit code""" try: call([sys.executable, "-c", "import sys; sys.exit(1)"]) except SubprocessError, exc: self.assertEquals(exc.returncode, 1) else: self.fail("call did not raise an exception") def test_call_extra_env(self): """Test call with the extra_env parameter""" subprocess_cmd = [sys.executable, "-c", "import sys, os;" "value = os.environ.get('TREEPKG_TEST');" "sys.exit(int(value != 'xyzzy'))" ] # sanity check that the extra environment variable we use for # the test is not set yet self.assertRaises(SubprocessError, call, subprocess_cmd) # the actual test try: call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy")) except SubprocessError, exc: self.fail("the extra_env variables were not set properly") else: # test OK pass def test_call_inputdata(self): """Test call with inputdata passed to the subprocesses stdin""" # FIXME: If the feature being tested is not implemented # properly, it's likely that the subprocess will wait # indefinitely waiting for input. data = "1" subprocess_cmd = [sys.executable, "-c", "import sys; sys.exit(int(raw_input("")))"] try: call(subprocess_cmd, inputdata=data) except SubprocessError, exc: self.assertEquals(exc.returncode, 1) class TestRunWithLogging(unittest.TestCase, FileTestMixin): def test_run_with_logfile(self): logfilename = self.temp_file_name("logfile") call([sys.executable, "-c", "print \"I'm a lumber jack and I'm OK\""], logfile=logfilename) self.check_file_contents(logfilename, "I'm a lumber jack and I'm OK\n") class TestCaptureOutput(unittest.TestCase): def test_capture_output_stdout(self): text = "explicit is better than implicit" self.assertEquals(capture_output([sys.executable, "-c", "print %r" % text]), text + "\n") def test_capture_output_stderr(self): self.assertEquals(capture_output([sys.executable, "-c", "import sys;" "print 'on stdout';" " sys.stdout.flush();" "print >>sys.stderr, 'on stderr'"]), "on stdout\non stderr\n") def test_capture_output_exception(self): try: capture_output([sys.executable, "-c", "import sys;" "print 'Beautiful is better than ugly';" " sys.exit(1)"]) except SubprocessError, exc: self.assertEquals(exc.returncode, 1) self.assertEquals(exc.output, "Beautiful is better than ugly\n")