mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-23 13:35:42 -04:00

*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
374 lines
17 KiB
Python
374 lines
17 KiB
Python
"""
|
|
Test the lldb command line completion mechanism.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
import os
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbplatform
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
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
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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>
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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)
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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-')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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.'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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.')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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.')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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'])
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="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 ')
|
|
|
|
@expectedFailureAll(hostoslist=["windows"], bugnumber="llvm.org/pr24679")
|
|
@expectedFailureAll(
|
|
oslist=lldbplatform.darwin_all,
|
|
bugnumber="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])
|