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