summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/Makefile3
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/TestFixIts.py71
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/main.cpp25
3 files changed, 99 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/Makefile
new file mode 100644
index 00000000000..99998b20bcb
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/TestFixIts.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/TestFixIts.py
new file mode 100644
index 00000000000..c93a05abe89
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/TestFixIts.py
@@ -0,0 +1,71 @@
+"""
+Test calling an expression with errors that a FixIt can fix.
+"""
+
+
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class ExprCommandWithFixits(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+
+ self.main_source = "main.cpp"
+ self.main_source_spec = lldb.SBFileSpec(self.main_source)
+
+ @skipUnlessDarwin
+ def test_with_target(self):
+ """Test calling expressions with errors that can be fixed by the FixIts."""
+ self.build()
+ self.try_expressions()
+
+ def test_with_dummy_target(self):
+ """Test calling expressions in the dummy target with errors that can be fixed by the FixIts."""
+ ret_val = lldb.SBCommandReturnObject()
+ result = self.dbg.GetCommandInterpreter().HandleCommand("expression ((1 << 16) - 1))", ret_val)
+ self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "The expression was successful.")
+ self.assertTrue("Fix-it applied" in ret_val.GetError(), "Found the applied FixIt.")
+
+ def try_expressions(self):
+ """Test calling expressions with errors that can be fixed by the FixIts."""
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ 'Stop here to evaluate expressions', self.main_source_spec)
+
+ options = lldb.SBExpressionOptions()
+ options.SetAutoApplyFixIts(True)
+
+ frame = self.thread.GetFrameAtIndex(0)
+
+ # Try with one error:
+ value = frame.EvaluateExpression("my_pointer.first", options)
+ self.assertTrue(value.IsValid())
+ self.assertTrue(value.GetError().Success())
+ self.assertTrue(value.GetValueAsUnsigned() == 10)
+
+ # Try with two errors:
+ two_error_expression = "my_pointer.second->a"
+ value = frame.EvaluateExpression(two_error_expression, options)
+ self.assertTrue(value.IsValid())
+ self.assertTrue(value.GetError().Success())
+ self.assertTrue(value.GetValueAsUnsigned() == 20)
+
+ # Now turn off the fixits, and the expression should fail:
+ options.SetAutoApplyFixIts(False)
+ value = frame.EvaluateExpression(two_error_expression, options)
+ self.assertTrue(value.IsValid())
+ self.assertTrue(value.GetError().Fail())
+ error_string = value.GetError().GetCString()
+ self.assertTrue(
+ error_string.find("fixed expression suggested:") != -1,
+ "Fix was suggested")
+ self.assertTrue(
+ error_string.find("my_pointer->second.a") != -1,
+ "Fix was right")
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/main.cpp
new file mode 100644
index 00000000000..371d8333763
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/expression/fixits/main.cpp
@@ -0,0 +1,25 @@
+#include <stdio.h>
+
+struct SubStruct
+{
+ int a;
+ int b;
+};
+
+struct MyStruct
+{
+ int first;
+ struct SubStruct second;
+};
+
+int
+main()
+{
+ struct MyStruct my_struct = {10, {20, 30}};
+ struct MyStruct *my_pointer = &my_struct;
+ printf ("Stop here to evaluate expressions: %d %d %p\n", my_pointer->first, my_pointer->second.a, my_pointer);
+ return 0;
+}
+
+
+