[lldb/test] Allow indentation in inline tests

This makes it possible to use for loops (and other language constructs)
in inline tests.

Differential Revision: https://reviews.llvm.org/D112706
This commit is contained in:
Pavel Labath
2021-10-28 11:23:24 +02:00
parent e8535fa784
commit 349295fcf3
2 changed files with 37 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ from __future__ import absolute_import
# System modules
import os
import textwrap
# Third-party modules
import io
@@ -38,7 +39,7 @@ class CommandParser:
new_breakpoint = True
if len(parts) == 2:
command = parts[1].strip() # take off whitespace
command = parts[1].rstrip()
new_breakpoint = parts[0].strip() != ""
return (command, new_breakpoint)
@@ -68,6 +69,8 @@ class CommandParser:
else:
current_breakpoint['command'] = current_breakpoint[
'command'] + "\n" + command
for bkpt in self.breakpoints:
bkpt['command'] = textwrap.dedent(bkpt['command'])
def set_breakpoints(self, target):
for breakpoint in self.breakpoints:

View File

@@ -0,0 +1,33 @@
from lldbsuite.test.lldbinline import CommandParser
from lldbsuite.test.lldbtest import Base
import textwrap
class TestCommandParser(Base):
mydir = Base.compute_mydir(__file__)
def test_indentation(self):
"""Test indentation handling"""
filename = self.getBuildArtifact("test_file.cpp")
with open(filename, "w") as f:
f.write(textwrap.dedent("""\
int q;
int w; //% first break
int e;
int r; //% second break
//% continue second
//% continuing indented
//% not indented
int t; //% third break
"""))
p = CommandParser()
p.parse_source_files([filename])
def bkpt(line, cmd):
return {'file_name': filename, 'line_number': line, 'command': cmd}
self.assertEqual(
p.breakpoints, [
bkpt(2, 'first break'),
bkpt(4, 'second break\ncontinue second\n continuing indented\nnot indented'),
bkpt(8, "third break")])