1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest that we can call C++ template fucntions.
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprechtimport lldb
5*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
6*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
7*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
8*99451b44SJordan Rupprecht
9*99451b44SJordan Rupprecht
10*99451b44SJordan Rupprechtclass TemplateFunctionsTestCase(TestBase):
11*99451b44SJordan Rupprecht
12*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
13*99451b44SJordan Rupprecht
14*99451b44SJordan Rupprecht    def do_test_template_function(self, add_cast):
15*99451b44SJordan Rupprecht        self.build()
16*99451b44SJordan Rupprecht        (_, _, thread, _) = lldbutil.run_to_name_breakpoint(self, "main")
17*99451b44SJordan Rupprecht        frame = thread.GetSelectedFrame()
18*99451b44SJordan Rupprecht        expr = "foo(42)"
19*99451b44SJordan Rupprecht        if add_cast:
20*99451b44SJordan Rupprecht            expr = "(int)" + expr
21*99451b44SJordan Rupprecht        expr_result = frame.EvaluateExpression(expr)
22*99451b44SJordan Rupprecht        self.assertTrue(expr_result.IsValid())
23*99451b44SJordan Rupprecht        self.assertEqual(expr_result.GetValue(), "42")
24*99451b44SJordan Rupprecht
25*99451b44SJordan Rupprecht    @skipIfWindows
26*99451b44SJordan Rupprecht    def test_template_function_with_cast(self):
27*99451b44SJordan Rupprecht        self.do_test_template_function(True)
28*99451b44SJordan Rupprecht
29*99451b44SJordan Rupprecht    @skipIfWindows
30*99451b44SJordan Rupprecht    @expectedFailureAll(debug_info=["dwarf", "gmodules", "dwo"])
31*99451b44SJordan Rupprecht    def test_template_function_without_cast(self):
32*99451b44SJordan Rupprecht        self.do_test_template_function(False)
33