xref: /llvm-project/lldb/test/API/lang/cpp/class-template-parameter-pack/TestTemplatePackArgs.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1b706f561SJonas Devlieghere"""
2b706f561SJonas DevlieghereTest that the type of arguments to C++ template classes that have variadic
3b706f561SJonas Devlieghereparameters can be enumerated.
4b706f561SJonas Devlieghere"""
5b706f561SJonas Devlieghereimport lldb
6b706f561SJonas Devliegherefrom lldbsuite.test.decorators import *
7b706f561SJonas Devliegherefrom lldbsuite.test.lldbtest import *
8b706f561SJonas Devliegherefrom lldbsuite.test import lldbutil
9b706f561SJonas Devlieghere
10b706f561SJonas Devlieghere
11b706f561SJonas Devlieghereclass TemplatePackArgsTestCase(TestBase):
12b706f561SJonas Devlieghere    def test_template_argument_pack(self):
13b706f561SJonas Devlieghere        self.build()
14*2238dcc3SJonas Devlieghere        (_, _, thread, _) = lldbutil.run_to_source_breakpoint(
15*2238dcc3SJonas Devlieghere            self, "breakpoint here", lldb.SBFileSpec("main.cpp"), exe_name="a.out"
16*2238dcc3SJonas Devlieghere        )
17b706f561SJonas Devlieghere        frame = thread.GetSelectedFrame()
18b706f561SJonas Devlieghere
19*2238dcc3SJonas Devlieghere        empty_pack = frame.FindVariable("emptyPack")
20*2238dcc3SJonas Devlieghere        self.assertTrue(
21*2238dcc3SJonas Devlieghere            empty_pack.IsValid(), "make sure we find the emptyPack variable"
22*2238dcc3SJonas Devlieghere        )
23b706f561SJonas Devlieghere
24*2238dcc3SJonas Devlieghere        only_pack = frame.FindVariable("onlyPack")
25*2238dcc3SJonas Devlieghere        self.assertTrue(only_pack.IsValid(), "make sure we find the onlyPack variable")
26b706f561SJonas Devlieghere        self.assertEqual(only_pack.GetType().GetNumberOfTemplateArguments(), 4)
27*2238dcc3SJonas Devlieghere        self.assertEqual(
28*2238dcc3SJonas Devlieghere            only_pack.GetType().GetTemplateArgumentType(0).GetName(), "int"
29*2238dcc3SJonas Devlieghere        )
30*2238dcc3SJonas Devlieghere        self.assertEqual(
31*2238dcc3SJonas Devlieghere            only_pack.GetType().GetTemplateArgumentType(1).GetName(), "char"
32*2238dcc3SJonas Devlieghere        )
33*2238dcc3SJonas Devlieghere        self.assertEqual(
34*2238dcc3SJonas Devlieghere            only_pack.GetType().GetTemplateArgumentType(2).GetName(), "double"
35*2238dcc3SJonas Devlieghere        )
36b706f561SJonas Devlieghere        # Access the C<double, 42> template parameter.
37b706f561SJonas Devlieghere        nested_template = only_pack.GetType().GetTemplateArgumentType(3)
38*2238dcc3SJonas Devlieghere        self.assertEqual(nested_template.GetName(), "D<int, int, bool>")
39b706f561SJonas Devlieghere        self.assertEqual(nested_template.GetNumberOfTemplateArguments(), 3)
40*2238dcc3SJonas Devlieghere        self.assertEqual(nested_template.GetTemplateArgumentType(0).GetName(), "int")
41*2238dcc3SJonas Devlieghere        self.assertEqual(nested_template.GetTemplateArgumentType(1).GetName(), "int")
42*2238dcc3SJonas Devlieghere        self.assertEqual(nested_template.GetTemplateArgumentType(2).GetName(), "bool")
43