Author: labath Date: Mon Jul 4 08:49:46 2016 New Revision: 274505 URL: http://llvm.org/viewvc/llvm-project?rev=274505&view=rev Log: Split TestTemplateIntegerArgs test into two
Summary: One of the tests there does not work with gcc, so I'm spinning that off into a separate test, so that we can XFAIL it with more granularity. I am also renaming the test to reflect the fact that it no longer tests only integer arguments. Reviewers: clayborg Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D21923 Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateArgs.py - copied, changed from r274500, lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py Removed: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py Copied: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateArgs.py (from r274500, lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py) URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateArgs.py?p2=lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateArgs.py&p1=lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py&r1=274500&r2=274505&rev=274505&view=diff ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateArgs.py Mon Jul 4 08:49:46 2016 @@ -1,26 +1,21 @@ """ -Tests that C++ templates work as expected +Test that C++ template classes that have integer parameters work correctly. + +We must reconstruct the types correctly so the template types are correct +and display correctly, and also make sure the expression parser works and +is able the find all needed functions when evaluating expressions """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil -class TemplateIntegerArgsTestCase(TestBase): +class TemplateArgsTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) - - @expectedFailureAll(bugnumber="llvm.org/pr28354", compiler="gcc", oslist=["linux"]) - def test_with_run_command(self): - """Test that C++ template classes that have integer parameters work correctly. - - We must reconstruct the types correctly so the template types are correct - and display correctly, and also make sure the expression parser works and - is able the find all needed functions when evaluating expressions""" + + def prepareProcess(self): self.build() - - # Set debugger into synchronous mode - self.dbg.SetAsync(False) # Create a target by the debugger. exe = os.path.join(os.getcwd(), "a.out") @@ -43,7 +38,10 @@ class TemplateIntegerArgsTestCase(TestBa thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) # Get frame for current thread - frame = thread.GetSelectedFrame() + return thread.GetSelectedFrame() + + def test_integer_args(self): + frame = self.prepareProcess() testpos = frame.FindVariable('testpos') self.assertTrue(testpos.IsValid(), 'make sure we find a local variabble named "testpos"') @@ -63,6 +61,11 @@ class TemplateIntegerArgsTestCase(TestBa self.assertTrue(expr_result.GetValue() == "-1", "testneg.getArg() == -1") self.assertTrue(expr_result.GetType().GetName() == "int", 'expr_result.GetType().GetName() == "int"') + # Gcc does not generate the necessary DWARF attribute for enum template parameters. + @expectedFailureAll(bugnumber="llvm.org/pr28354", compiler="gcc") + def test_enum_args(self): + frame = self.prepareProcess() + # Make sure "member" can be displayed and also used in an expression correctly member = frame.FindVariable('member') self.assertTrue(member.IsValid(), 'make sure we find a local variabble named "member"') Removed: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py?rev=274504&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/template/TestTemplateIntegerArgs.py (removed) @@ -1,84 +0,0 @@ -""" -Tests that C++ templates work as expected -""" -import lldb -from lldbsuite.test.decorators import * -from lldbsuite.test.lldbtest import * -from lldbsuite.test import lldbutil - -class TemplateIntegerArgsTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @expectedFailureAll(bugnumber="llvm.org/pr28354", compiler="gcc", oslist=["linux"]) - def test_with_run_command(self): - """Test that C++ template classes that have integer parameters work correctly. - - We must reconstruct the types correctly so the template types are correct - and display correctly, and also make sure the expression parser works and - is able the find all needed functions when evaluating expressions""" - self.build() - - # Set debugger into synchronous mode - self.dbg.SetAsync(False) - - # Create a target by the debugger. - exe = os.path.join(os.getcwd(), "a.out") - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - # Set breakpoints inside and outside methods that take pointers to the containing struct. - line = line_number('main.cpp', '// Breakpoint 1') - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", line, num_expected_locations=1, loc_exact=True) - - arguments = None - environment = None - - # Now launch the process, and do not stop at entry point. - process = target.LaunchSimple (arguments, environment, self.get_process_working_directory()) - self.assertTrue(process, PROCESS_IS_VALID) - - # Get the thread of the process - self.assertTrue(process.GetState() == lldb.eStateStopped, PROCESS_STOPPED) - thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) - - # Get frame for current thread - frame = thread.GetSelectedFrame() - - testpos = frame.FindVariable('testpos') - self.assertTrue(testpos.IsValid(), 'make sure we find a local variabble named "testpos"') - self.assertTrue(testpos.GetType().GetName() == 'TestObj<1>') - - expr_result = frame.EvaluateExpression("testpos.getArg()") - self.assertTrue(expr_result.IsValid(), 'got a valid expression result from expression "testpos.getArg()"'); - self.assertTrue(expr_result.GetValue() == "1", "testpos.getArg() == 1") - self.assertTrue(expr_result.GetType().GetName() == "int", 'expr_result.GetType().GetName() == "int"') - - testneg = frame.FindVariable('testneg') - self.assertTrue(testneg.IsValid(), 'make sure we find a local variabble named "testneg"') - self.assertTrue(testneg.GetType().GetName() == 'TestObj<-1>') - - expr_result = frame.EvaluateExpression("testneg.getArg()") - self.assertTrue(expr_result.IsValid(), 'got a valid expression result from expression "testneg.getArg()"'); - self.assertTrue(expr_result.GetValue() == "-1", "testneg.getArg() == -1") - self.assertTrue(expr_result.GetType().GetName() == "int", 'expr_result.GetType().GetName() == "int"') - - # Make sure "member" can be displayed and also used in an expression correctly - member = frame.FindVariable('member') - self.assertTrue(member.IsValid(), 'make sure we find a local variabble named "member"') - self.assertTrue(member.GetType().GetName() == 'EnumTemplate<EnumType::Member>') - - expr_result = frame.EvaluateExpression("member.getMember()") - self.assertTrue(expr_result.IsValid(), 'got a valid expression result from expression "member.getMember()"'); - self.assertTrue(expr_result.GetValue() == "123", "member.getMember() == 123") - self.assertTrue(expr_result.GetType().GetName() == "int", 'expr_result.GetType().GetName() == "int"') - - # Make sure "subclass" can be displayed and also used in an expression correctly - subclass = frame.FindVariable('subclass') - self.assertTrue(subclass.IsValid(), 'make sure we find a local variabble named "subclass"') - self.assertTrue(subclass.GetType().GetName() == 'EnumTemplate<EnumType::Subclass>') - - expr_result = frame.EvaluateExpression("subclass.getMember()") - self.assertTrue(expr_result.IsValid(), 'got a valid expression result from expression "subclass.getMember()"'); - self.assertTrue(expr_result.GetValue() == "246", "subclass.getMember() == 246") - self.assertTrue(expr_result.GetType().GetName() == "int", 'expr_result.GetType().GetName() == "int"') _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits