diff options
author | jquast <contact@jeffquast.com> | 2014-06-07 21:25:20 -0700 |
---|---|---|
committer | Thomas Kluyver <takowl@gmail.com> | 2014-06-15 18:00:37 -0700 |
commit | 33375e861600051d0e98071192a08a5d7ccf6c87 (patch) | |
tree | 1fc58304130d46cd57affd8da41246fbf5b4fc8f | |
parent | 7f14d7cd7390816d96d2e511189bec22f6824d91 (diff) | |
download | pexpect-33375e861600051d0e98071192a08a5d7ccf6c87.tar.gz |
Improve EOF through test -> interact -> echo_prompt
-rw-r--r-- | tests/echo_w_prompt.py | 8 | ||||
-rwxr-xr-x | tests/interact.py | 4 | ||||
-rw-r--r-- | tests/interact_unicode.py | 5 | ||||
-rwxr-xr-x | tests/test_interact.py | 86 |
4 files changed, 65 insertions, 38 deletions
diff --git a/tests/echo_w_prompt.py b/tests/echo_w_prompt.py index 0706688..3c80553 100644 --- a/tests/echo_w_prompt.py +++ b/tests/echo_w_prompt.py @@ -7,5 +7,9 @@ except NameError: raw_input = input while True: - a = raw_input('<in >') - print('<out>', a, sep='')
\ No newline at end of file + try: + a = raw_input('<in >') + except EOFError: + print('<eof>') + break + print('<out>', a, sep='') diff --git a/tests/interact.py b/tests/interact.py index 60e48c9..9f8e672 100755 --- a/tests/interact.py +++ b/tests/interact.py @@ -29,8 +29,10 @@ from utils import no_coverage_env import pexpect import sys + def main(): - p = pexpect.spawn(sys.executable + ' echo_w_prompt.py', env=no_coverage_env()) + p = pexpect.spawn(sys.executable + ' echo_w_prompt.py', + env=no_coverage_env()) p.interact() print("Escaped interact") diff --git a/tests/interact_unicode.py b/tests/interact_unicode.py index 93426dc..f4c1f55 100644 --- a/tests/interact_unicode.py +++ b/tests/interact_unicode.py @@ -13,9 +13,12 @@ from utils import no_coverage_env import pexpect import sys + def main(): - p = pexpect.spawnu(sys.executable + ' echo_w_prompt.py', env=no_coverage_env()) + p = pexpect.spawnu(sys.executable + ' echo_w_prompt.py', + env=no_coverage_env()) p.interact() + print("Escaped interact") if __name__ == '__main__': main() diff --git a/tests/test_interact.py b/tests/test_interact.py index 623201b..4854ff1 100755 --- a/tests/test_interact.py +++ b/tests/test_interact.py @@ -27,49 +27,67 @@ import pexpect import unittest from . import PexpectTestCase + class InteractTestCase (PexpectTestCase.PexpectTestCase): def setUp(self): super(InteractTestCase, self).setUp() - self.env = os.environ.copy() - # Ensure that Pexpect is importable by the subprocesses. - self.env['PYTHONPATH'] = self.project_dir + os.pathsep + os.environ.get('PYTHONPATH', '') + self.save_pythonpath = os.getenv('PYTHONPATH') + + # Ensure 'import pexpect' works in subprocess interact*.py + if not self.save_pythonpath: + os.putenv('PYTHONPATH', self.project_dir) + else: + os.putenv('PYTHONPATH', os.pathsep.join((self.project_dir, + self.save_pythonpath))) + + self.interact_py = ' '.join((self.PYTHONBIN, + 'interact.py',)) + self.interact_ucs_py = ' '.join((self.PYTHONBIN, + 'interact_unicode.py',)) - def test_interact (self): - p = pexpect.spawn(str('%s interact.py' % (self.PYTHONBIN,)), env=self.env) + def tearDown(self): + os.putenv('PYTHONPATH', self.save_pythonpath or '') + + def test_interact_escape(self): + " Ensure `escape_character' value exits interactive mode. " + p = pexpect.spawn(self.interact_py, timeout=5) p.expect('<in >') - p.sendline (b'Hello') - p.sendline (b'there') - p.sendline (b'Mr. Python') - p.expect (b'<out>Hello') - p.expect (b'<out>there') - p.expect (b'<out>Mr. Python') - p.sendcontrol(']') + p.sendcontrol(']') # chr(29), the default `escape_character' + # value of pexpect.interact(). p.expect_exact('Escaped interact') - assert p.isalive() - p.sendeof () - p.expect (pexpect.EOF) + p.expect(pexpect.EOF) assert not p.isalive() - assert p.exitstatus == 0, (p.exitstatus, p.before) + assert p.exitstatus == 0 - def test_interact_unicode (self): - p = pexpect.spawnu(str('%s interact_unicode.py' % (self.PYTHONBIN,)), env=self.env) - try: - p.expect('<in >') - p.sendline ('Hello') - p.sendline ('theré') - p.sendline ('Mr. Pyþon') - p.expect ('<out>Hello') - p.expect ('<out>theré') - p.expect ('<out>Mr. Pyþon') - assert p.isalive() - p.sendeof () - p.expect (pexpect.EOF) - assert not p.isalive() - assert p.exitstatus == 0, (p.exitstatus, p.before) - except: - print(p.before) - raise + def test_interact_spawn_eof(self): + " Ensure subprocess receives EOF and exit. " + p = pexpect.spawn(self.interact_py, timeout=5) + p.expect('<in >') + p.sendline(b'alpha') + p.sendline(b'beta') + p.expect(b'<out>alpha') + p.expect(b'<out>beta') + p.sendeof() + p.expect_exact('<eof>') + p.expect_exact('Escaped interact') + p.expect(pexpect.EOF) + assert not p.isalive() + assert p.exitstatus == 0 + def test_interact_spawnu_eof(self): + " Ensure subprocess receives unicode, EOF, and exit. " + p = pexpect.spawnu(self.interact_ucs_py, timeout=5) + p.expect('<in >') + p.sendline(u'ɑlpha') + p.sendline(u'Βeta') + p.expect(u'<out>ɑlpha') + p.expect(u'<out>Βeta') + p.sendeof() + p.expect_exact('<eof>') + p.expect_exact('Escaped interact') + p.expect(pexpect.EOF) + assert not p.isalive() + assert p.exitstatus == 0 if __name__ == '__main__': unittest.main() |