[dexter] Add keyword argument 'on_line' to DexLabel

Add optional keyword argument 'on_line' to DexLabel to label the specifed line
instead of the line the command is found on.

This will be helpful when used alongside DexDeclareFile (D99651).

Reviewed By: TWeaver

Differential Revision: https://reviews.llvm.org/D101055
This commit is contained in:
OCHyams
2021-04-23 12:00:16 +01:00
parent 2fdedf905a
commit 487ab53459
4 changed files with 41 additions and 5 deletions

View File

@@ -205,14 +205,17 @@ large test cases that would normally take much longer to complete.
----
## DexLabel
DexLabel(name)
DexLabel(name [, **on_line])
Args:
name (str): A unique name for this line.
Keyword args:
on_line (int): Specify a line number to label.
### Description
Name the line this command is found on. Line names can be referenced by other
commands expecting line number arguments.
Name the line this command is found on or 'on_line' if it is provided. Line
names can be referenced by other commands expecting line number arguments.
For example, `DexExpectWatchValues(..., on_line='my_line_name')`.
### Heuristic

View File

@@ -12,16 +12,27 @@ from dex.command.CommandBase import CommandBase
class DexLabel(CommandBase):
def __init__(self, label):
def __init__(self, label, **kwargs):
if not isinstance(label, str):
raise TypeError('invalid argument type')
try:
self.on_line = kwargs.pop('on_line')
except KeyError:
# We cannot use self.lineno because it hasn't been set yet.
pass
if kwargs:
raise TypeError(f'unexpected named args: {", ".join(kwargs)}')
self._label = label
super(DexLabel, self).__init__()
def get_line(self):
return getattr(self, 'on_line', self.lineno)
def get_as_pair(self):
return (self._label, self.lineno)
return (self._label, self.get_line())
@staticmethod
def get_name():

View File

@@ -0,0 +1,8 @@
// Purpose:
// Check that bad keyword args in \DexLabel are reported.
// Use --binary switch to trick dexter into skipping the build step.
//
// RUN: not %dexter_base test --binary %s --debugger 'lldb' -- %s | FileCheck %s
// CHECK: parser error:{{.*}}err_label_kwarg.cpp(8): unexpected named args: bad_arg
// DexLabel('test', bad_arg=0)

View File

@@ -0,0 +1,14 @@
// Purpose:
// Check that the optional keyword argument 'on_line' makes a \DexLabel label
// that line instead of the line the command is found on.
//
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: label_another_line.cpp: (1.0000)
int main() {
int result = 0;
return result;
}
// DexLabel('test', on_line=10)
// DexExpectWatchValue('result', '0', on_line='test')