fa0e4d123984d7756e3d3d6a98928d2ffbf742f4
[openbsd] /
1 # coding=utf8
2 """
3 Test lldb data formatter subsystem.
4 """
5
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 StdStringDataFormatterTestCase(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 at.
22         self.line = line_number('main.cpp', '// Set break point at this line.')
23
24     @add_test_categories(["libstdcxx"])
25     def test_with_run_command(self):
26         """Test that that file and class static variables display correctly."""
27         self.build()
28         self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
29
30         lldbutil.run_break_set_by_file_and_line(
31             self, "main.cpp", self.line, num_expected_locations=-1)
32
33         self.runCmd("run", RUN_SUCCEEDED)
34
35         # The stop reason of the thread should be breakpoint.
36         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
37                     substrs=['stopped',
38                              'stop reason = breakpoint'])
39
40         # This is the function to remove the custom formats in order to have a
41         # clean slate for the next test case.
42         def cleanup():
43             self.runCmd('type format clear', check=False)
44             self.runCmd('type summary clear', check=False)
45             self.runCmd('type filter clear', check=False)
46             self.runCmd('type synth clear', check=False)
47             self.runCmd(
48                 "settings set target.max-children-count 256",
49                 check=False)
50
51         # Execute the cleanup function during test case tear down.
52         self.addTearDownHook(cleanup)
53
54         var_wempty = self.frame().FindVariable('wempty')
55         var_s = self.frame().FindVariable('s')
56         var_S = self.frame().FindVariable('S')
57         var_mazeltov = self.frame().FindVariable('mazeltov')
58         var_empty = self.frame().FindVariable('empty')
59         var_q = self.frame().FindVariable('q')
60         var_Q = self.frame().FindVariable('Q')
61         var_uchar = self.frame().FindVariable('uchar')
62
63         # TODO: This is currently broken
64         # self.assertEqual(var_wempty.GetSummary(), 'L""', "wempty summary wrong")
65         self.assertEqual(
66             var_s.GetSummary(), 'L"hello world! מזל טוב!"',
67             "s summary wrong")
68         self.assertEqual(var_S.GetSummary(), 'L"!!!!"', "S summary wrong")
69         self.assertEqual(
70             var_mazeltov.GetSummary(), 'L"מזל טוב"',
71             "mazeltov summary wrong")
72         self.assertEqual(var_empty.GetSummary(), '""', "empty summary wrong")
73         self.assertEqual(
74             var_q.GetSummary(), '"hello world"',
75             "q summary wrong")
76         self.assertEqual(
77             var_Q.GetSummary(), '"quite a long std::strin with lots of info inside it"',
78             "Q summary wrong")
79         self.assertEqual(var_uchar.GetSummary(), '"aaaaa"', "u summary wrong")
80
81         self.runCmd("next")
82
83         self.assertEqual(
84             var_S.GetSummary(), 'L"!!!!!"',
85             "new S summary wrong")