| 1 | #!/usr/bin/env python3
|
| 2 | """
|
| 3 | interactive.py
|
| 4 | """
|
| 5 | from __future__ import print_function
|
| 6 |
|
| 7 | import sys
|
| 8 | import time
|
| 9 |
|
| 10 | import harness
|
| 11 | from harness import register, expect_prompt
|
| 12 |
|
| 13 |
|
| 14 | @register()
|
| 15 | def syntax_error(sh):
|
| 16 | 'syntax error makes status=2'
|
| 17 |
|
| 18 | sh.sendline('syntax ) error')
|
| 19 |
|
| 20 | #time.sleep(0.1)
|
| 21 |
|
| 22 | expect_prompt(sh)
|
| 23 |
|
| 24 | sh.sendline('echo status=$?')
|
| 25 |
|
| 26 | if sh.shell_label == 'mksh':
|
| 27 | # mksh gives status=1, and zsh doesn't give anything?
|
| 28 | sh.expect('status=1')
|
| 29 | else:
|
| 30 | sh.expect('status=2') # osh, bash, dash
|
| 31 |
|
| 32 |
|
| 33 | @register()
|
| 34 | def bg_proc_notify(sh):
|
| 35 | 'notification about background process (issue 1093)'
|
| 36 |
|
| 37 | expect_prompt(sh)
|
| 38 |
|
| 39 | sh.sendline('sleep 0.1 &')
|
| 40 | if sh.shell_label == 'bash':
|
| 41 | # e.g. [1] 12345
|
| 42 | # not using trailing + because pexpect doc warns about that case
|
| 43 | # dash doesn't print this
|
| 44 | sh.expect(r'\[\d+\]')
|
| 45 |
|
| 46 | sh.sendline('sleep 0.2 &')
|
| 47 | if sh.shell_label == 'bash':
|
| 48 | # e.g. [1] 12345
|
| 49 | # not using trailing + because pexpect doc warns about that case
|
| 50 | # dash doesn't print this
|
| 51 | sh.expect(r'\[\d+\]')
|
| 52 |
|
| 53 | expect_prompt(sh)
|
| 54 |
|
| 55 | # Wait until after it stops and then hit enter
|
| 56 | time.sleep(0.4)
|
| 57 | sh.sendline('')
|
| 58 | sh.expect(r'.*Done.*Done.*')
|
| 59 |
|
| 60 | sh.sendline('echo status=$?')
|
| 61 | sh.expect('status=0')
|
| 62 |
|
| 63 |
|
| 64 | @register()
|
| 65 | def bg_pipeline_notify(sh):
|
| 66 | 'notification about background pipeline (issue 1093)'
|
| 67 |
|
| 68 | expect_prompt(sh)
|
| 69 |
|
| 70 | sh.sendline('sleep 0.1 | cat &')
|
| 71 |
|
| 72 | if sh.shell_label == 'bash':
|
| 73 | # e.g. [1] 12345
|
| 74 | # not using trailing + because pexpect doc warns about that case
|
| 75 | # dash doesn't print this
|
| 76 | sh.expect(r'\[\d+\]')
|
| 77 |
|
| 78 | expect_prompt(sh)
|
| 79 |
|
| 80 | time.sleep(0.2)
|
| 81 | sh.sendline('')
|
| 82 |
|
| 83 | sh.expect(r'.*Done.*')
|
| 84 |
|
| 85 | sh.sendline('echo status=$?')
|
| 86 | sh.expect('status=0')
|
| 87 |
|
| 88 |
|
| 89 | if __name__ == '__main__':
|
| 90 | try:
|
| 91 | sys.exit(harness.main(sys.argv))
|
| 92 | except RuntimeError as e:
|
| 93 | print('FATAL: %s' % e, file=sys.stderr)
|
| 94 | sys.exit(1)
|