summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjquast <contact@jeffquast.com>2014-06-07 21:25:20 -0700
committerThomas Kluyver <takowl@gmail.com>2014-06-15 18:00:37 -0700
commit33375e861600051d0e98071192a08a5d7ccf6c87 (patch)
tree1fc58304130d46cd57affd8da41246fbf5b4fc8f
parent7f14d7cd7390816d96d2e511189bec22f6824d91 (diff)
downloadpexpect-33375e861600051d0e98071192a08a5d7ccf6c87.tar.gz
Improve EOF through test -> interact -> echo_prompt
-rw-r--r--tests/echo_w_prompt.py8
-rwxr-xr-xtests/interact.py4
-rw-r--r--tests/interact_unicode.py5
-rwxr-xr-xtests/test_interact.py86
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()