Skip to content

[lldb][testsuite] Refactor use of check_expression #7490

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,6 @@ class TestExpressionsInSwiftMethodsFromObjC(TestBase):

mydir = TestBase.compute_mydir(__file__)

def check_expression(self, expression, expected_result, use_summary=True):
value = self.frame().EvaluateExpression(expression)
self.assertTrue(value.IsValid(), expression + "returned a valid value")

if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
self.assertTrue(answer == expected_result, report_str)

@skipUnlessDarwin
@swiftTest
def test_swift_expressions_from_objc(self):
Expand All @@ -45,7 +33,6 @@ def test_swift_expressions_from_objc(self):
self, 'Stop here in NSObject derived class',
lldb.SBFileSpec('main.swift'))

self.check_expression("m_computed_ivar == 5", "true")
self.check_expression("m_ivar", "10", use_summary=False)
self.check_expression("self.m_ivar == 11", "false")

lldbutil.check_expression(self, self.frame(), "m_computed_ivar == 5", "true", use_summary=True)
lldbutil.check_expression(self, self.frame(), "m_ivar", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.m_ivar == 11", "false", use_summary=True)
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,13 @@ class TestExpressionsInSwiftMethodsPureSwift(TestBase):

mydir = TestBase.compute_mydir(__file__)

def check_expression(self, expression, expected_result, use_summary=True):
value = self.frame().EvaluateExpression(expression)
self.assertTrue(value.IsValid(), expression + "returned a valid value")

if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
self.assertTrue(answer == expected_result, report_str)

@swiftTest
def test_expressions_in_methods(self):
"""Tests that we can run simple Swift expressions correctly"""
self.build()
lldbutil.run_to_source_breakpoint(
self, 'Stop here in Pure Swift class', lldb.SBFileSpec('main.swift'))

self.check_expression("m_computed_ivar == 5", "true")
self.check_expression("m_ivar", "10", use_summary=False)
self.check_expression("self.m_ivar == 11", "false")

lldbutil.check_expression(self, self.frame(), "m_computed_ivar == 5", "true")
lldbutil.check_expression(self, self.frame(), "m_ivar", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.m_ivar == 11", "false")
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_basic_exclusivity_suppression(self):
frame = thread.frames[0]
self.assertTrue(frame, "Frame 0 is valid.")

self.check_expression(frame, "w.s.i", "8", use_summary=False)
lldbutil.check_expression(self, frame, "w.s.i", "8", use_summary=False)

# Test that we properly handle nested expression evaluations by:
# (1) Breaking at breakpoint 1
Expand All @@ -73,28 +73,14 @@ def test_exclusivity_suppression_for_concurrent_expressions(self):

# Evaluate w.s.i at breakpoint 2 to check that exclusivity checking
# is suppressed inside the nested expression
self.check_expression(thread.frames[0], "i", "8", use_summary=False)
lldbutil.check_expression(self, thread.frames[0], "i", "8", use_summary=False)

# Return to breakpoint 1 and evaluate w.s.i again to check that
# exclusivity checking is still suppressed
self.dbg.HandleCommand('thread ret -x')
self.check_expression(thread.frame[0], "w.s.i", "8", use_summary=False)
self.dbg.HandleCommand("thread ret -x")
lldbutil.check_expression(self, thread.frame[0], "w.s.i", "8", use_summary=False)

def setUp(self):
TestBase.setUp(self)
self.main_source = "main.swift"
self.main_source_spec = lldb.SBFileSpec(self.main_source)

def check_expression(self, frame, expression, expected_result, use_summary=True):
value = frame.EvaluateExpression(expression)
self.assertTrue(value.IsValid(), expression + " returned a valid value")
if self.TraceOn():
print(value.GetSummary())
print(value.GetValue())
if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
self.assertTrue(answer == expected_result, report_str)
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,6 @@ def test_ivars_in_generic_expressions(self):
self.build()
self.do_ivar_test()

def check_expression(self, expression, expected_result, use_summary=True):
opts = lldb.SBExpressionOptions()
opts.SetFetchDynamicValue(lldb.eDynamicCanRunTarget)
value = self.frame().EvaluateExpression(expression, opts)
self.assertTrue(value.IsValid(), expression + "returned a valid value")

self.assertSuccess(value.GetError(), "expression failed")
if self.TraceOn():
print(value.GetSummary())
print(value.GetValue())

if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "Use summary: %d %s expected: %s got: %s" % (
use_summary, expression, expected_result, answer)
self.assertTrue(answer == expected_result, report_str)

def do_test(self):
"""Test expressions in generic contexts"""
exe_name = "a.out"
Expand Down Expand Up @@ -91,7 +72,7 @@ def do_test(self):
process, breakpoints[i])

self.assertTrue(len(threads) == 1)
self.check_expression("i", str(i), use_summary=False)
lldbutil.check_expression(self, self.frame(), "i", str(i), use_summary=False)

self.runCmd("continue")

Expand Down Expand Up @@ -127,10 +108,8 @@ def do_ivar_test(self):
process, breakpoints[i])

self.assertTrue(len(threads) == 1)
self.check_expression(
"m_t", str(class_bkpts[i]), use_summary=False)
self.check_expression(
"m_s.m_s", str(class_bkpts[i]), use_summary=False)
lldbutil.check_expression(self, self.frame(), "m_t", str(class_bkpts[i]), use_summary=False)
lldbutil.check_expression(self, self.frame(), "m_s.m_s", str(class_bkpts[i]), use_summary=False)

self.runCmd("continue")

Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,6 @@ class TestDefiningOverloadedFunctions(TestBase):

mydir = TestBase.compute_mydir(__file__)

def check_expression(self, expression, expected_result, use_summary=True):
value = self.frame().EvaluateExpression(expression)
self.assertTrue(value.IsValid(), expression + "returned a valid value")
if self.TraceOn():
print(value.GetSummary())
print(value.GetValue())
if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
self.assertTrue(answer == expected_result, report_str)

@swiftTest
def test_simple_overload_expressions(self):
"""Test defining overloaded functions"""
Expand All @@ -51,14 +37,13 @@ def test_simple_overload_expressions(self):
error = value_obj.GetError()
self.assertSuccess(error)

self.check_expression("$overload(10)", "1", False)
lldbutil.check_expression(self, self.frame(), "$overload(10)", "1", use_summary=False)

# Here's the second function:
value_obj = self.frame().EvaluateExpression(
"func $overload(_ a: String) -> Int { return 2 } \n 1")
error = value_obj.GetError()
self.assertSuccess(error)

self.check_expression('$overload(10)', '1', False)
self.check_expression('$overload("some string")', '2', False)

lldbutil.check_expression(self, self.frame(), '$overload(10)', '1', use_summary=False)
lldbutil.check_expression(self, self.frame(), '$overload("some string")', '2', use_summary=False)
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,6 @@ class TestSwiftExprInProtocolExtension(TestBase):

mydir = TestBase.compute_mydir(__file__)

def check_expression(self, expression, expected_result, use_summary=True):
value = self.frame().EvaluateExpression(
expression, lldb.eDynamicCanRunTarget)
self.assertTrue(value.IsValid(), expression + "returned a valid value")
if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
if answer != expected_result:
print(report_str)
print(value.GetError())

self.assertTrue(answer == expected_result, report_str)

def continue_to_bkpt(self, process, bkpt):
threads = lldbutil.continue_to_breakpoint(process, bkpt)
self.assertTrue(len(threads) == 1)
Expand Down Expand Up @@ -83,9 +67,9 @@ def test_protocol_extension(self):

# Check that we can evaluate expressions correctly in the struct
# method.
self.check_expression("self.x", "10", False)
self.check_expression("self.y", '"Hello world"', True)
self.check_expression("local_var", "111", False)
lldbutil.check_expression(self, self.frame(), "self.x", "10", False)
lldbutil.check_expression(self, self.frame(), "self.y", '"Hello world"', True)
lldbutil.check_expression(self, self.frame(), "local_var", "111", False)

# And check that we got the type of self right:
self_var = self.frame().EvaluateExpression(
Expand All @@ -98,16 +82,16 @@ def test_protocol_extension(self):
# Now continue to the static method and check things there:
self.continue_to_bkpt(process, static_bkpt)

self.check_expression("self.cvar", "333", False)
self.check_expression("local_var", "222", False)
lldbutil.check_expression(self, self.frame(), "self.cvar", "333", False)
lldbutil.check_expression(self, self.frame(), "local_var", "222", False)

# This continues to the class version:
self.continue_to_bkpt(process, method_bkpt)
# Check that we can evaluate expressions correctly in the struct
# method.
self.check_expression("self.x", "10", False)
self.check_expression("self.y", '"Hello world"', True)
self.check_expression("local_var", "111", False)
lldbutil.check_expression(self, self.frame(), "self.x", "10", False)
lldbutil.check_expression(self, self.frame(), "self.y", '"Hello world"', True)
lldbutil.check_expression(self, self.frame(), "local_var", "111", False)

# And check that we got the type of self right:
self_var = self.frame().EvaluateExpression(
Expand All @@ -120,16 +104,16 @@ def test_protocol_extension(self):
# Now continue to the static method and check things there:
self.continue_to_bkpt(process, static_bkpt)

self.check_expression("self.cvar", "333", False)
self.check_expression("local_var", "222", False)
lldbutil.check_expression(self, self.frame(), "self.cvar", "333", False)
lldbutil.check_expression(self, self.frame(), "local_var", "222", False)

# This continues to the enum version:
self.continue_to_bkpt(process, method_bkpt)
# Check that we can evaluate expressions correctly in the struct
# method.
self.check_expression("self.x", "10", False)
self.check_expression("self.y", '"Hello world"', True)
self.check_expression("local_var", "111", False)
lldbutil.check_expression(self, self.frame(), "self.x", "10", False)
lldbutil.check_expression(self, self.frame(), "self.y", '"Hello world"', True)
lldbutil.check_expression(self, self.frame(), "local_var", "111", False)

# And check that we got the type of self right:
self_var = self.frame().EvaluateExpression(
Expand All @@ -142,7 +126,5 @@ def test_protocol_extension(self):
# Now continue to the static method and check things there:
self.continue_to_bkpt(process, static_bkpt)

self.check_expression("self.cvar", "333", False)
self.check_expression("local_var", "222", False)


lldbutil.check_expression(self, self.frame(), "self.cvar", "333", False)
lldbutil.check_expression(self, self.frame(), "local_var", "222", False)
48 changes: 16 additions & 32 deletions lldb/test/API/lang/swift/expression/scopes/TestExpressionScopes.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,6 @@ def setUp(self):
self.main_source = "main.swift"
self.main_source_spec = lldb.SBFileSpec(self.main_source)

def check_expression(self, expression, expected_result, use_summary=True):
value = self.frame().EvaluateExpression(expression)
self.assertTrue(value.IsValid(), expression + "returned a valid value")
if use_summary:
answer = value.GetSummary()
else:
answer = value.GetValue()
report_str = "%s expected: %s got: %s" % (
expression, expected_result, answer)
if answer != expected_result:
print(report_str)
print(value.GetError())

self.assertTrue(answer == expected_result, report_str)

def continue_to_bkpt(self, process, bkpt):
threads = lldbutil.continue_to_breakpoint(process, bkpt)
self.assertTrue(len(threads) == 1)
Expand Down Expand Up @@ -92,19 +77,19 @@ def do_test(self):

self.assertTrue(len(threads) == 1)

self.check_expression("in_class_a", "20", use_summary=False)
self.check_expression("self.in_class_a", "20", use_summary=False)
lldbutil.check_expression(self, self.frame(), "in_class_a", "20", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.in_class_a", "20", use_summary=False)

# Disable the init breakpoint so we don't have to hit it again:
init_bkpt.SetEnabled(False)

# Now continue to shadowed_in_a:
self.continue_to_bkpt(process, shadow_a_bkpt)

self.check_expression("in_class_a", "10", use_summary=False)
self.check_expression("self.in_class_a", "20", use_summary=False)
self.check_expression("self.also_in_a", "21", use_summary=False)
self.check_expression("also_in_a", "21", use_summary=False)
lldbutil.check_expression(self, self.frame(), "in_class_a", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.in_class_a", "20", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.also_in_a", "21", use_summary=False)
lldbutil.check_expression(self, self.frame(), "also_in_a", "21", use_summary=False)

shadow_a_bkpt.SetEnabled(False)

Expand All @@ -115,10 +100,10 @@ def do_test(self):

self.continue_to_bkpt(process, static_bkpt)

self.check_expression("input", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "input", "10", use_summary=False)
# This test fails on Bryce. The self metatype doesn't generate a valid
# type.
self.check_expression("self.return_ten()", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.return_ten()", "10", use_summary=False)
static_bkpt.SetEnabled(False)

# Now run into the setters & getters:
Expand All @@ -127,23 +112,23 @@ def do_test(self):
self.assertTrue(set_bkpt.GetNumLocations() > 0, VALID_BREAKPOINT)

self.continue_to_bkpt(process, set_bkpt)
self.check_expression("self.backing_int", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.backing_int", "10", use_summary=False)
set_bkpt.SetEnabled(False)

get_bkpt = target.BreakpointCreateBySourceRegex(
'In get.', self.main_source_spec)
self.assertTrue(get_bkpt.GetNumLocations() > 0, VALID_BREAKPOINT)

self.continue_to_bkpt(process, get_bkpt)
self.check_expression("self.backing_int", "41", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.backing_int", "41", use_summary=False)
get_bkpt.SetEnabled(False)

deinit_bkpt = target.BreakpointCreateBySourceRegex(
'In deinit.', self.main_source_spec)
self.assertTrue(deinit_bkpt.GetNumLocations() > 0, VALID_BREAKPOINT)

self.continue_to_bkpt(process, deinit_bkpt)
self.check_expression("self.backing_int", "41", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.backing_int", "41", use_summary=False)
deinit_bkpt.SetEnabled(False)

# Now let's try the subscript getter & make sure that that works:
Expand All @@ -155,7 +140,7 @@ def do_test(self):
VALID_BREAKPOINT)

self.continue_to_bkpt(process, str_sub_get_bkpt)
self.check_expression("self.backing_int", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "self.backing_int", "10", use_summary=False)

str_sub_get_bkpt.SetEnabled(False)

Expand All @@ -166,11 +151,10 @@ def do_test(self):
self.assertTrue(closure_bkpt.GetNumLocations() > 0, VALID_BREAKPOINT)

self.continue_to_bkpt(process, closure_bkpt)
self.check_expression("self.backing_int", "10", use_summary=False)
self.check_expression("a_string", '"abcde"', use_summary=True)
lldbutil.check_expression(self, self.frame(), "self.backing_int", "10", use_summary=False)
lldbutil.check_expression(self, self.frame(), "a_string", '"abcde"', use_summary=True)

# Now set a breakpoint in the struct method and run to there:
self.continue_by_pattern('Break here in struct')
self.check_expression("a", "\"foo\"", use_summary=True)
self.check_expression("self.b", "5", use_summary=False)

lldbutil.check_expression(self, self.frame(), "a", "\"foo\"", use_summary=True)
lldbutil.check_expression(self, self.frame(), "self.b", "5", use_summary=False)
Loading