Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Unified Diff: third_party/pexpect/tests/PexpectTestCase.py

Issue 1398903002: Add third_party/pexpect (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@end-to-end-test
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/pexpect/setup.py ('k') | third_party/pexpect/tests/README » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/pexpect/tests/PexpectTestCase.py
diff --git a/third_party/pexpect/tests/PexpectTestCase.py b/third_party/pexpect/tests/PexpectTestCase.py
new file mode 100644
index 0000000000000000000000000000000000000000..307437efad3c377cb00ea9cf09fef7098df64a76
--- /dev/null
+++ b/third_party/pexpect/tests/PexpectTestCase.py
@@ -0,0 +1,108 @@
+
+'''
+PEXPECT LICENSE
+
+ This license is approved by the OSI and FSF as GPL-compatible.
+ http://opensource.org/licenses/isc-license.txt
+
+ Copyright (c) 2012, Noah Spurrier <noah@noah.org>
+ PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
+ PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
+ COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+'''
+from __future__ import print_function
+
+import contextlib
+import unittest
+import signal
+import sys
+import os
+
+
+class PexpectTestCase(unittest.TestCase):
+ def setUp(self):
+ self.PYTHONBIN = sys.executable
+ self.original_path = os.getcwd()
+ tests_dir = os.path.dirname(__file__)
+ self.project_dir = project_dir = os.path.dirname(tests_dir)
+
+ # all tests are executed in this folder; there are many auxiliary
+ # programs in this folder executed by spawn().
+ os.chdir(tests_dir)
+
+ # If the pexpect raises an exception after fork(), but before
+ # exec(), our test runner *also* forks. We prevent this by
+ # storing our pid and asserting equality on tearDown.
+ self.pid = os.getpid()
+
+ coverage_rc = os.path.join(project_dir, '.coveragerc')
+ os.environ['COVERAGE_PROCESS_START'] = coverage_rc
+ os.environ['COVERAGE_FILE'] = os.path.join(project_dir, '.coverage')
+ print('\n', self.id(), end=' ')
+ sys.stdout.flush()
+
+ # some build agents will ignore SIGHUP and SIGINT, which python
+ # inherits. This causes some of the tests related to terminate()
+ # to fail. We set them to the default handlers that they should
+ # be, and restore them back to their SIG_IGN value on tearDown.
+ #
+ # I'm not entirely convinced they need to be restored, only our
+ # test runner is affected.
+ self.restore_ignored_signals = [
+ value for value in (signal.SIGHUP, signal.SIGINT,)
+ if signal.getsignal(value) == signal.SIG_IGN]
+ if signal.SIGHUP in self.restore_ignored_signals:
+ # sighup should be set to default handler
+ signal.signal(signal.SIGHUP, signal.SIG_DFL)
+ if signal.SIGINT in self.restore_ignored_signals:
+ # SIGINT should be set to signal.default_int_handler
+ signal.signal(signal.SIGINT, signal.default_int_handler)
+ unittest.TestCase.setUp(self)
+
+ def tearDown(self):
+ # restore original working folder
+ os.chdir(self.original_path)
+
+ if self.pid != os.getpid():
+ # The build server pattern-matches phrase 'Test runner has forked!'
+ print("Test runner has forked! This means a child process raised "
+ "an exception before exec() in a test case, the error is "
+ "more than likely found above this line in stderr.",
+ file=sys.stderr)
+ exit(1)
+
+ # restore signal handlers
+ for signal_value in self.restore_ignored_signals:
+ signal.signal(signal_value, signal.SIG_IGN)
+
+ if sys.version_info < (2, 7):
+ # We want to use these methods, which are new/improved in 2.7, but
+ # we are still supporting 2.6 for the moment. This section can be
+ # removed when we drop Python 2.6 support.
+ @contextlib.contextmanager
+ def assertRaises(self, excClass):
+ try:
+ yield
+ except Exception as e:
+ assert isinstance(e, excClass)
+ else:
+ raise AssertionError("%s was not raised" % excClass)
+
+ @contextlib.contextmanager
+ def assertRaisesRegexp(self, excClass, pattern):
+ import re
+ try:
+ yield
+ except Exception as e:
+ assert isinstance(e, excClass)
+ assert re.match(pattern, str(e))
+ else:
+ raise AssertionError("%s was not raised" % excClass)
« no previous file with comments | « third_party/pexpect/setup.py ('k') | third_party/pexpect/tests/README » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698