diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/functionalities/completion | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/completion')
4 files changed, 344 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/functionalities/completion/.categories b/packages/Python/lldbsuite/test/functionalities/completion/.categories new file mode 100644 index 0000000000000..3a3f4df6416b9 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/completion/.categories @@ -0,0 +1 @@ +cmdline diff --git a/packages/Python/lldbsuite/test/functionalities/completion/Makefile b/packages/Python/lldbsuite/test/functionalities/completion/Makefile new file mode 100644 index 0000000000000..8a7102e347af2 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/completion/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py b/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py new file mode 100644 index 0000000000000..d7aab03c08300 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py @@ -0,0 +1,324 @@ +""" +Test the lldb command line completion mechanism. +""" + +from __future__ import print_function + + + +import os +import lldb +from lldbsuite.test.lldbtest import * + +class CommandLineCompletionTestCase(TestBase): + +    mydir = TestBase.compute_mydir(__file__) + +    @classmethod +    def classCleanup(cls): +        """Cleanup the test byproducts.""" +        try: +            os.remove("child_send.txt") +            os.remove("child_read.txt") +        except: +            pass + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_at(self): +        """Test that 'at' completes to 'attach '.""" +        self.complete_from_to('at', 'attach ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_de(self): +        """Test that 'de' completes to 'detach '.""" +        self.complete_from_to('de', 'detach ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_process_attach_dash_dash_con(self): +        """Test that 'process attach --con' completes to 'process attach --continue '.""" +        self.complete_from_to('process attach --con', 'process attach --continue ') + +    # <rdar://problem/11052829> +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_infinite_loop_while_completing(self): +        """Test that 'process print hello\' completes to itself and does not infinite loop.""" +        self.complete_from_to('process print hello\\', 'process print hello\\', +                              turn_off_re_match=True) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_co(self): +        """Test that 'watchpoint co' completes to 'watchpoint command '.""" +        self.complete_from_to('watchpoint co', 'watchpoint command ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_command_space(self): +        """Test that 'watchpoint command ' completes to ['Available completions:', 'add', 'delete', 'list'].""" +        self.complete_from_to('watchpoint command ', ['Available completions:', 'add', 'delete', 'list']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_command_a(self): +        """Test that 'watchpoint command a' completes to 'watchpoint command add '.""" +        self.complete_from_to('watchpoint command a', 'watchpoint command add ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_set_variable_dash_w(self): +        """Test that 'watchpoint set variable -w' completes to 'watchpoint set variable -w '.""" +        self.complete_from_to('watchpoint set variable -w', 'watchpoint set variable -w ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_set_variable_dash_w_space(self): +        """Test that 'watchpoint set variable -w ' completes to ['Available completions:', 'read', 'write', 'read_write'].""" +        self.complete_from_to('watchpoint set variable -w ', ['Available completions:', 'read', 'write', 'read_write']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_set_ex(self): +        """Test that 'watchpoint set ex' completes to 'watchpoint set expression '.""" +        self.complete_from_to('watchpoint set ex', 'watchpoint set expression ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_set_var(self): +        """Test that 'watchpoint set var' completes to 'watchpoint set variable '.""" +        self.complete_from_to('watchpoint set var', 'watchpoint set variable ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_watchpoint_set_variable_dash_w_read_underbar(self): +        """Test that 'watchpoint set variable -w read_' completes to 'watchpoint set variable -w read_write'.""" +        self.complete_from_to('watchpoint set variable -w read_', 'watchpoint set variable -w read_write') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_help_fi(self): +        """Test that 'help fi' completes to ['Available completions:', 'file', 'finish'].""" +        self.complete_from_to('help fi', ['Available completions:', 'file', 'finish']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_help_watchpoint_s(self): +        """Test that 'help watchpoint s' completes to 'help watchpoint set '.""" +        self.complete_from_to('help watchpoint s', 'help watchpoint set ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_append_target_er(self): +        """Test that 'settings append target.er' completes to 'settings append target.error-path'.""" +        self.complete_from_to('settings append target.er', 'settings append target.error-path') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_insert_after_target_en(self): +        """Test that 'settings insert-after target.env' completes to 'settings insert-after target.env-vars'.""" +        self.complete_from_to('settings insert-after target.env', 'settings insert-after target.env-vars') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_insert_before_target_en(self): +        """Test that 'settings insert-before target.env' completes to 'settings insert-before target.env-vars'.""" +        self.complete_from_to('settings insert-before target.env', 'settings insert-before target.env-vars') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_replace_target_ru(self): +        """Test that 'settings replace target.ru' completes to 'settings replace target.run-args'.""" +        self.complete_from_to('settings replace target.ru', 'settings replace target.run-args') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_s(self): +        """Test that 'settings s' completes to ['Available completions:', 'set', 'show'].""" +        self.complete_from_to('settings s', ['Available completions:', 'set', 'show']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_th(self): +        """Test that 'settings set th' completes to 'settings set thread-format'.""" +        self.complete_from_to('settings set th', 'settings set thread-format') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_s_dash(self): +        """Test that 'settings set -' completes to 'settings set -g'.""" +        self.complete_from_to('settings set -', 'settings set -g') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_clear_th(self): +        """Test that 'settings clear th' completes to 'settings clear thread-format'.""" +        self.complete_from_to('settings clear th', 'settings clear thread-format') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_ta(self): +        """Test that 'settings set ta' completes to 'settings set target.'.""" +        self.complete_from_to('settings set target.ma', 'settings set target.max-') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_target_exec(self): +        """Test that 'settings set target.exec' completes to 'settings set target.exec-search-paths '.""" +        self.complete_from_to('settings set target.exec', 'settings set target.exec-search-paths') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_target_pr(self): +        """Test that 'settings set target.pr' completes to ['Available completions:', +        'target.prefer-dynamic-value', 'target.process.'].""" +        self.complete_from_to('settings set target.pr', +                              ['Available completions:', +                               'target.prefer-dynamic-value', +                               'target.process.']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_target_process(self): +        """Test that 'settings set target.process' completes to 'settings set target.process.'.""" +        self.complete_from_to('settings set target.process', 'settings set target.process.') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_target_process_dot(self): +        """Test that 'settings set target.process.t' completes to 'settings set target.process.thread.'.""" +        self.complete_from_to('settings set target.process.t', 'settings set target.process.thread.') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_settings_set_target_process_thread_dot(self): +        """Test that 'settings set target.process.thread.' completes to ['Available completions:', +        'target.process.thread.step-avoid-regexp', 'target.process.thread.trace-thread'].""" +        self.complete_from_to('settings set target.process.thread.', +                              ['Available completions:', +                               'target.process.thread.step-avoid-regexp', +                               'target.process.thread.trace-thread']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_target_space(self): +        """Test that 'target ' completes to ['Available completions:', 'create', 'delete', 'list', +        'modules', 'select', 'stop-hook', 'variable'].""" +        self.complete_from_to('target ', +                              ['Available completions:', 'create', 'delete', 'list', +                               'modules', 'select', 'stop-hook', 'variable']) + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_target_create_dash_co(self): +        """Test that 'target create --co' completes to 'target variable --core '.""" +        self.complete_from_to('target create --co', 'target create --core ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @skipIfFreeBSD # timing out on the FreeBSD buildbot +    @no_debug_info_test +    def test_target_va(self): +        """Test that 'target va' completes to 'target variable '.""" +        self.complete_from_to('target va', 'target variable ') + +    @expectedFailureHostWindows("llvm.org/pr24679") +    @expectedFailureDarwin("llvm.org/pr25485") +    def test_symbol_name(self): +        self.build() +        self.complete_from_to('''file a.out +                                 breakpoint set -n Fo''', +                              'breakpoint set -n Foo::Bar(int,\\ int)', +                              turn_off_re_match=True) + +    def complete_from_to(self, str_input, patterns, turn_off_re_match=False): +        """Test that the completion mechanism completes str_input to patterns, +        where patterns could be a pattern-string or a list of pattern-strings""" +        import pexpect +        # Patterns should not be None in order to proceed. +        self.assertFalse(patterns is None) +        # And should be either a string or list of strings.  Check for list type +        # below, if not, make a list out of the singleton string.  If patterns +        # is not a string or not a list of strings, there'll be runtime errors +        # later on. +        if not isinstance(patterns, list): +            patterns = [patterns] +         +        # The default lldb prompt. +        prompt = "(lldb) " + +        # So that the child gets torn down after the test. +        self.child = pexpect.spawn(lldbtest_config.lldbExec, +                                   [self.lldbOption] + ['--no-use-colors']) +        child = self.child +        # Turn on logging for input/output to/from the child. +        with open('child_send.txt', 'w') as f_send: +            with open('child_read.txt', 'w') as f_read: +                child.logfile_send = f_send +                child.logfile_read = f_read + +                child.expect_exact(prompt) +                child.setecho(True) +                # Sends str_input and a Tab to invoke the completion machinery. +                child.send("%s\t" % str_input) +                child.sendline('') +                child.expect_exact(prompt) +                child.sendline('') +                child.expect_exact(prompt) + +        # Now that the necessary logging is done, restore logfile to None to +        # stop further logging. +        child.logfile_send = None +        child.logfile_read = None +         +        with open('child_send.txt', 'r') as fs: +            if self.TraceOn(): +                print("\n\nContents of child_send.txt:") +                print(fs.read()) +        with open('child_read.txt', 'r') as fr: +            from_child = fr.read() +            if self.TraceOn(): +                print("\n\nContents of child_read.txt:") +                print(from_child) + +            # The matching could be verbatim or using generic re pattern. +            for p in patterns: +                # Test that str_input completes to our patterns or substrings. +                # If each pattern/substring matches from_child, the completion mechanism works! +                if turn_off_re_match: +                    self.expect(from_child, msg=COMPLETION_MSG(str_input, p), exe=False, +                        substrs = [p]) +                else: +                    self.expect(from_child, msg=COMPLETION_MSG(str_input, p), exe=False, +                        patterns = [p]) diff --git a/packages/Python/lldbsuite/test/functionalities/completion/main.cpp b/packages/Python/lldbsuite/test/functionalities/completion/main.cpp new file mode 100644 index 0000000000000..b408720d2cdc6 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/completion/main.cpp @@ -0,0 +1,14 @@ +class Foo +{ +public: +    int Bar(int x, int y) +    { +        return x + y; +    } +}; + +int main() +{ +    Foo f; +    f.Bar(1, 2); +} | 
