2 Test that the type of arguments to C++ template classes that have variadic
3 parameters can be enumerated.
6 from lldbsuite
.test
.decorators
import *
7 from lldbsuite
.test
.lldbtest
import *
8 from lldbsuite
.test
import lldbutil
11 class TemplatePackArgsTestCase(TestBase
):
12 def test_template_argument_pack(self
):
14 (_
, _
, thread
, _
) = lldbutil
.run_to_source_breakpoint(
15 self
, "breakpoint here", lldb
.SBFileSpec("main.cpp"), exe_name
="a.out"
17 frame
= thread
.GetSelectedFrame()
19 empty_pack
= frame
.FindVariable("emptyPack")
21 empty_pack
.IsValid(), "make sure we find the emptyPack variable"
24 only_pack
= frame
.FindVariable("onlyPack")
25 self
.assertTrue(only_pack
.IsValid(), "make sure we find the onlyPack variable")
26 self
.assertEqual(only_pack
.GetType().GetNumberOfTemplateArguments(), 4)
28 only_pack
.GetType().GetTemplateArgumentType(0).GetName(), "int"
31 only_pack
.GetType().GetTemplateArgumentType(1).GetName(), "char"
34 only_pack
.GetType().GetTemplateArgumentType(2).GetName(), "double"
36 # Access the C<double, 42> template parameter.
37 nested_template
= only_pack
.GetType().GetTemplateArgumentType(3)
38 self
.assertEqual(nested_template
.GetName(), "D<int, int, bool>")
39 self
.assertEqual(nested_template
.GetNumberOfTemplateArguments(), 3)
40 self
.assertEqual(nested_template
.GetTemplateArgumentType(0).GetName(), "int")
41 self
.assertEqual(nested_template
.GetTemplateArgumentType(1).GetName(), "int")
42 self
.assertEqual(nested_template
.GetTemplateArgumentType(2).GetName(), "bool")