Mercurial > treepkg
view test/test_run.py @ 274:2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
The actual implementation in the derived classes is almost identical in
all cases so it's better to have as much of the implementation in the
base class. The update_version_numbers method is not called directly by
the base class code so is removed from the base class. OTOH,
prepare_sources_for_tarball has been added as a more general variant of
update_version_numbers that is actually called by the default
implementation of do_package.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Thu, 07 May 2009 15:19:15 +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")