]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/expression_command/call-function/TestCallStdStringFunction.py
Vendor import of lldb trunk r321017:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / expression_command / call-function / TestCallStdStringFunction.py
1 """
2 Test calling std::String member functions.
3 """
4
5 from __future__ import print_function
6
7
8 import lldb
9 from lldbsuite.test.decorators import *
10 from lldbsuite.test.lldbtest import *
11 from lldbsuite.test import lldbutil
12
13
14 class ExprCommandCallFunctionTestCase(TestBase):
15
16     mydir = TestBase.compute_mydir(__file__)
17
18     def setUp(self):
19         # Call super's setUp().
20         TestBase.setUp(self)
21         # Find the line number to break for main.c.
22         self.line = line_number(
23             'main.cpp',
24             '// Please test these expressions while stopped at this line:')
25
26     @expectedFailureAll(
27         compiler="icc",
28         bugnumber="llvm.org/pr14437, fails with ICC 13.1")
29     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr21765")
30     def test_with(self):
31         """Test calling std::String member function."""
32         self.build()
33         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
34
35         # Some versions of GCC encode two locations for the 'return' statement
36         # in main.cpp
37         lldbutil.run_break_set_by_file_and_line(
38             self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True)
39
40         self.runCmd("run", RUN_SUCCEEDED)
41
42         self.expect("print str",
43                     substrs=['Hello world'])
44
45         # Calling this function now succeeds, but we follow the typedef return type through to
46         # const char *, and thus don't invoke the Summary formatter.
47
48         # clang's libstdc++ on ios arm64 inlines std::string::c_str() always; 
49         # skip this part of the test.
50         triple = self.dbg.GetSelectedPlatform().GetTriple()
51         do_cstr_test = True
52         if triple == "arm64-apple-ios" or triple == "arm64-apple-tvos" or triple == "armv7k-apple-watchos" or triple == "arm64-apple-bridgeos":
53             do_cstr_test = False
54         if do_cstr_test:
55             self.expect("print str.c_str()",
56                         substrs=['Hello world'])