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