mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

Summary: As discussed on lldb-dev, this patch moves some LLDB tests into a hierarchy that more closely resembles the commands we use in the LLDB interpreter. This patch should only move tests that use the command interpreter and shouldn't touch any tests that primarily test the SB API. Reviewers: #lldb, jfb, JDevlieghere Reviewed By: #lldb, JDevlieghere Subscribers: dexonsmith, arphaman, JDevlieghere, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D67033 llvm-svn: 370605
146 lines
4.7 KiB
Python
146 lines
4.7 KiB
Python
"""
|
|
Tests expression evaluation in context of an object.
|
|
"""
|
|
|
|
import lldb
|
|
import lldbsuite.test.lldbutil as lldbutil
|
|
from lldbsuite.test.lldbtest import *
|
|
|
|
class ContextObjectTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def test_context_object(self):
|
|
"""Tests expression evaluation in context of an object."""
|
|
self.build()
|
|
|
|
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self, '// Break here', self.main_source_spec)
|
|
frame = thread.GetFrameAtIndex(0)
|
|
|
|
#
|
|
# Test C++ struct variable
|
|
#
|
|
|
|
obj_val = frame.FindVariable("cpp_struct")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an empty expression evaluation
|
|
value = obj_val.EvaluateExpression("")
|
|
self.assertFalse(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
# Test retrieveing of a field (not a local with the same name)
|
|
value = obj_val.EvaluateExpression("field")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 1111)
|
|
|
|
# Test functions evaluation
|
|
value = obj_val.EvaluateExpression("function()")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 2222)
|
|
|
|
# Test that we retrieve the right global
|
|
value = obj_val.EvaluateExpression("global.field")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 1111)
|
|
|
|
#
|
|
# Test C++ union variable
|
|
#
|
|
|
|
obj_val = frame.FindVariable("cpp_union")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test retrieveing of a field
|
|
value = obj_val.EvaluateExpression("field_int")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 5555)
|
|
|
|
#
|
|
# Test C++ scalar
|
|
#
|
|
|
|
obj_val = frame.FindVariable("cpp_scalar")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an expression evaluation
|
|
value = obj_val.EvaluateExpression("1")
|
|
self.assertFalse(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
#
|
|
# Test C++ array
|
|
#
|
|
|
|
obj_val = frame.FindVariable("cpp_array")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an expression evaluation
|
|
value = obj_val.EvaluateExpression("1")
|
|
self.assertFalse(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
# Test retrieveing of an element's field
|
|
value = obj_val.GetValueForExpressionPath("[7]").EvaluateExpression("field")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 1111)
|
|
|
|
#
|
|
# Test C++ pointer
|
|
#
|
|
|
|
obj_val = frame.FindVariable("cpp_pointer")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an expression evaluation
|
|
value = obj_val.EvaluateExpression("1")
|
|
self.assertFalse(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
# Test retrieveing of a dereferenced object's field
|
|
value = obj_val.Dereference().EvaluateExpression("field")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 1111)
|
|
|
|
#
|
|
# Test C++ computation result
|
|
#
|
|
|
|
obj_val = frame.EvaluateExpression("cpp_namespace::GetCppStruct()")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an expression evaluation
|
|
value = obj_val.EvaluateExpression("1")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
#
|
|
# Test C++ computation result located in debuggee memory
|
|
#
|
|
|
|
obj_val = frame.EvaluateExpression("cpp_namespace::GetCppStructPtr()")
|
|
self.assertTrue(obj_val.IsValid())
|
|
|
|
# Test an expression evaluation
|
|
value = obj_val.EvaluateExpression("1")
|
|
self.assertFalse(value.IsValid())
|
|
self.assertFalse(value.GetError().Success())
|
|
|
|
# Test retrieveing of a dereferenced object's field
|
|
value = obj_val.Dereference().EvaluateExpression("field")
|
|
self.assertTrue(value.IsValid())
|
|
self.assertTrue(value.GetError().Success())
|
|
self.assertEqual(value.GetValueAsSigned(), 1111)
|
|
|
|
def setUp(self):
|
|
TestBase.setUp(self)
|
|
|
|
self.main_source = "main.cpp"
|
|
self.main_source_spec = lldb.SBFileSpec(self.main_source)
|