# # Check that terminal state changes made by # a program that does not exit properly don't stick # # Note that since cush uses readline (which changes # the terminal state while running) we must sample the state # when the shell is running a fg job. # from testutils import * import os, termios, sys, time c = setup_tests() expect_prompt() sendline('sleep 1') wait_for_fg_child() time.sleep(.5) attr_while_running_sleep = termios.tcgetattr(c.child_fd) expect_prompt() sendline('vim') wait_for_fg_child() time.sleep(.5) attr_while_running_vim = termios.tcgetattr(c.child_fd) assert attr_while_running_sleep != attr_while_running_vim # SIGKILL vim vim_pid = os.tcgetpgrp(c.child_fd) os.kill(vim_pid, 9) # the shell must not sample the state now. When the next cmd # is run, the original state from earlier should be used expect_prompt() sendline('sleep 1') wait_for_fg_child() time.sleep(.5) attr_while_running_sleep_again = termios.tcgetattr(c.child_fd) assert attr_while_running_sleep_again == attr_while_running_sleep expect_prompt() test_success()