diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/terminal/TestSTTYBeforeAndAfter.py')
| -rw-r--r-- | packages/Python/lldbsuite/test/terminal/TestSTTYBeforeAndAfter.py | 121 | 
1 files changed, 121 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/terminal/TestSTTYBeforeAndAfter.py b/packages/Python/lldbsuite/test/terminal/TestSTTYBeforeAndAfter.py new file mode 100644 index 0000000000000..335042737d442 --- /dev/null +++ b/packages/Python/lldbsuite/test/terminal/TestSTTYBeforeAndAfter.py @@ -0,0 +1,121 @@ +""" +Test that 'stty -a' displays the same output before and after running the lldb command. +""" + +from __future__ import print_function + + + +import os +import lldb +from lldbsuite.test.lldbtest import * + +class TestSTTYBeforeAndAfter(TestBase): + +    mydir = TestBase.compute_mydir(__file__) + +    @classmethod +    def classCleanup(cls): +        """Cleanup the test byproducts.""" +        cls.RemoveTempFile("child_send1.txt") +        cls.RemoveTempFile("child_read1.txt") +        cls.RemoveTempFile("child_send2.txt") +        cls.RemoveTempFile("child_read2.txt") + +    @expectedFailureHostWindows("llvm.org/pr22274: need a pexpect replacement for windows") +    @no_debug_info_test +    def test_stty_dash_a_before_and_afetr_invoking_lldb_command(self): +        """Test that 'stty -a' displays the same output before and after running the lldb command.""" +        import pexpect +        if not which('expect'): +            self.skipTest("The 'expect' program cannot be located, skip the test") + +        # The expect prompt. +        expect_prompt = "expect[0-9.]+> " +        # The default lldb prompt. +        lldb_prompt = "(lldb) " + +        # So that the child gets torn down after the test. +        self.child = pexpect.spawn('expect') +        child = self.child + +        child.expect(expect_prompt) +        child.setecho(True) +        if self.TraceOn(): +            child.logfile = sys.stdout + +        if self.platformIsDarwin(): +            child.sendline('set env(TERM) xterm') +        else: +            child.sendline('set env(TERM) vt100') +        child.expect(expect_prompt) +        child.sendline('puts $env(TERM)') +        child.expect(expect_prompt) + +        # Turn on loggings for input/output to/from the child. +        with open('child_send1.txt', 'w') as f_send1: +            with open('child_read1.txt', 'w') as f_read1: +                child.logfile_send = f_send1 +                child.logfile_read = f_read1 + +                child.sendline('stty -a') +                child.expect(expect_prompt) + +        # Now that the stage1 logging is done, restore logfile to None to +        # stop further logging. +        child.logfile_send = None +        child.logfile_read = None + +        # Invoke the lldb command. +        child.sendline('%s %s' % (lldbtest_config.lldbExec, self.lldbOption)) +        child.expect_exact(lldb_prompt) + +        # Immediately quit. +        child.sendline('quit') +        child.expect(expect_prompt) + +        with open('child_send2.txt', 'w') as f_send2: +            with open('child_read2.txt', 'w') as f_read2: +                child.logfile_send = f_send2 +                child.logfile_read = f_read2 + +                child.sendline('stty -a') +                child.expect(expect_prompt) + +                child.sendline('exit') + +        # Now that the stage2 logging is done, restore logfile to None to +        # stop further logging. +        child.logfile_send = None +        child.logfile_read = None + +        with open('child_send1.txt', 'r') as fs: +            if self.TraceOn(): +                print("\n\nContents of child_send1.txt:") +                print(fs.read()) +        with open('child_read1.txt', 'r') as fr: +            from_child1 = fr.read() +            if self.TraceOn(): +                print("\n\nContents of child_read1.txt:") +                print(from_child1) + +        with open('child_send2.txt', 'r') as fs: +            if self.TraceOn(): +                print("\n\nContents of child_send2.txt:") +                print(fs.read()) +        with open('child_read2.txt', 'r') as fr: +            from_child2 = fr.read() +            if self.TraceOn(): +                print("\n\nContents of child_read2.txt:") +                print(from_child2) + +        stty_output1_lines = from_child1.splitlines() +        stty_output2_lines = from_child2.splitlines() +        zipped = list(zip(stty_output1_lines, stty_output2_lines)) +        for tuple in zipped: +            if self.TraceOn(): +                print("tuple->%s" % str(tuple)) +            # Every line should compare equal until the first blank line. +            if len(tuple[0]) == 0: +                break +            self.assertTrue(tuple[0] == tuple[1])  | 
