[lldb] Explicitly test the template argument SB API
authorRaphael Isemann <teemperor@gmail.com>
Thu, 15 Oct 2020 07:56:53 +0000 (09:56 +0200)
committerRaphael Isemann <teemperor@gmail.com>
Thu, 15 Oct 2020 09:17:43 +0000 (11:17 +0200)
lldb/test/API/lang/cpp/template-arguments/Makefile [new file with mode: 0644]
lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py [new file with mode: 0644]
lldb/test/API/lang/cpp/template-arguments/main.cpp [new file with mode: 0644]

diff --git a/lldb/test/API/lang/cpp/template-arguments/Makefile b/lldb/test/API/lang/cpp/template-arguments/Makefile
new file mode 100644 (file)
index 0000000..99998b2
--- /dev/null
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py b/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
new file mode 100644 (file)
index 0000000..3ba86bc
--- /dev/null
@@ -0,0 +1,30 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @no_debug_info_test
+    def test(self):
+        self.build()
+        self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
+
+        value = self.expect_expr("temp1", result_type="C<int, 2>")
+        template_type = value.GetType()
+        self.assertEqual(template_type.GetNumberOfTemplateArguments(), 2)
+
+        # Check a type argument.
+        self.assertEqual(template_type.GetTemplateArgumentKind(0), lldb.eTemplateArgumentKindType)
+        self.assertEqual(template_type.GetTemplateArgumentType(0).GetName(), "int")
+
+        # Check a integral argument.
+        self.assertEqual(template_type.GetTemplateArgumentKind(1), lldb.eTemplateArgumentKindIntegral)
+        self.assertEqual(template_type.GetTemplateArgumentType(1).GetName(), "unsigned int")
+        #FIXME: There is no way to get the actual value of the parameter.
+
+        # Try to get an invalid template argument.
+        self.assertEqual(template_type.GetTemplateArgumentKind(2), lldb.eTemplateArgumentKindNull)
+        self.assertEqual(template_type.GetTemplateArgumentType(2).GetName(), "")
diff --git a/lldb/test/API/lang/cpp/template-arguments/main.cpp b/lldb/test/API/lang/cpp/template-arguments/main.cpp
new file mode 100644 (file)
index 0000000..728bd40
--- /dev/null
@@ -0,0 +1,8 @@
+template<typename T, unsigned value>
+struct C {
+  T member = value;
+};
+
+C<int, 2> temp1;
+
+int main() {}