17d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata"""
27d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico GranataTest lldb data formatter subsystem.
37d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata"""
47d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
57d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granataimport os, time
67d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granataimport unittest2
77d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granataimport lldb
87d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granatafrom lldbtest import *
9431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil
107d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1192f75728050db93bfaf3e73d86a4a8a3a75dad8aJohnny Chenclass SmartArrayDataFormatterTestCase(TestBase):
127d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
137d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    mydir = os.path.join("functionalities", "data-formatter", "data-formatter-smart-array")
147d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
157d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
16a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen    @dsym_test
177d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    def test_with_dsym_and_run_command(self):
187d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        """Test data formatter commands."""
197d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.buildDsym()
207d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.data_formatter_commands()
217d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
22a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen    @dwarf_test
237d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    def test_with_dwarf_and_run_command(self):
247d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        """Test data formatter commands."""
257d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.buildDwarf()
267d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.data_formatter_commands()
277d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
287d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    def setUp(self):
297d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # Call super's setUp().
307d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        TestBase.setUp(self)
317d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # Find the line number to break at.
327d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.line = line_number('main.cpp', '// Set break point at this line.')
337d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
347d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    def data_formatter_commands(self):
357d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        """Test that that file and class static variables display correctly."""
367d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
377d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
38431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham        lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True)
397d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
407d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.runCmd("run", RUN_SUCCEEDED)
417d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
427d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # The stop reason of the thread should be breakpoint.
437d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
447d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            substrs = ['stopped',
457d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                       'stop reason = breakpoint'])
467d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
477d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # This is the function to remove the custom formats in order to have a
487d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # clean slate for the next test case.
497d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        def cleanup():
507d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            self.runCmd('type format clear', check=False)
517d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            self.runCmd('type summary clear', check=False)
527d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
537d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        # Execute the cleanup function during test case tear down.
547d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.addTearDownHook(cleanup)
557d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
567d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# check that we are not looping here
57242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"${var%V}\" SomeData")
587d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
597d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable data",
601c61743af946076e988d88baf725382e99d905deEnrico Granata            substrs = ['invalid use of aggregate type'])
617d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# ${var%s}
62242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var%s}\" \"char *\"")
637d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
647d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr",
657d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            substrs = ['ptr = \"',
667d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                       'Hello world!'])
677d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
687d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr",
697d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            substrs = ['ptr = \"',
707d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                        'Nested Hello world!'])
717d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
72242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%s}\" -x \"char \\[[0-9]+\\]\"")
737d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
747d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strarr",
757d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
767d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
777d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
787d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strarr",
797d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
807d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
817d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
82915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strarr",
83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
85915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strarr",
87915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
88915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
89915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
907d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# ${var%c}
91242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var%c}\" \"char *\"")
927d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
937d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr",
947d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                substrs = ['ptr = \"',
957d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                           'Hello world!'])
967d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
977d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr",
987d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                substrs = ['ptr = \"',
997d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                           'Nested Hello world!'])
1007d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
101915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strptr",
102915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
103915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
104915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
105915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strptr",
106915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
107915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
108915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
109242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%c}\" -x \"char \\[[0-9]+\\]\"")
1107d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1117d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strarr",
1127d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
1137d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
1147d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1157d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strarr",
1167d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
1177d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
1187d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
119915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strarr",
120915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
121915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
122915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
123915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strarr",
124915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
125915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
126915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
1277d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# ${var%char[]}
128242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%char[]}\" -x \"char \\[[0-9]+\\]\"")
1297d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1307d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strarr",
1317d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
1327d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
1337d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1347d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strarr",
1357d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = ',
1367d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
1377d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
138915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strarr",
139915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
140915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
141915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
142915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strarr",
143915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = ',
144915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
145915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
146242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var%char[]}\" \"char *\"")
1477d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1487d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr",
1497d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            substrs = ['ptr = \"',
1507d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            'Hello world!'])
1517d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1527d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr",
1537d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            substrs = ['ptr = \"',
1547d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata            'Nested Hello world!'])
1557d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
156915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strptr",
157915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
158915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
159915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
160915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strptr",
161915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
162915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
163915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
1647d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# ${var%a}
165242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%a}\" -x \"char \\[[0-9]+\\]\"")
1667d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1677d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strarr",
1687d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = \"',
1697d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
1707d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1717d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strarr",
1727d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['arr = ',
1737d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
1747d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
175915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strarr",
176915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = \"',
177915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
178915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
179915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strarr",
180915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['arr = ',
181915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
182915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
183242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var%a}\" \"char *\"")
1847d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1857d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr",
1867d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = \"',
1877d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
1887d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
1897d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr",
1907d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = \"',
1917d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
1927d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
193915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strptr",
194915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
195915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
196915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
197915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strptr",
198915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
199915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
200915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
201242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var[]%char[]}\" \"char *\"")
2027d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2037d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# I do not know the size of the data, but you are asking for a full array slice..
2047d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# use the ${var%char[]} to obtain a string as result
2057d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr", matching=False,
2067d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = \"',
2077d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Hello world!'])
2087d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2097d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr", matching=False,
2107d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = \"',
2117d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               'Nested Hello world!'])
2127d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
213915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strptr", matching=False,
214915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
215915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Hello world!'])
216915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
217915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strptr", matching=False,
218915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = \"',
219915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               'Nested Hello world!'])
220915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
2217d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# You asked an array-style printout...
222242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"ptr = ${var[0-1]%char[]}\" \"char *\"")
2237d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2247d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable strptr",
2257d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = ',
2267d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '[{H},{e}]'])
2277d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2287d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.strptr",
2297d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['ptr = ',
2307d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '[{N},{e}]'])
2317d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
232915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p strptr",
233915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = ',
234915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               '[{H},{e}]'])
235915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
236915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        self.expect("p other.strptr",
237915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                    substrs = ['ptr = ',
238915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                               '[{N},{e}]'])
239915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
2407d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# using [] is required here
241242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%x}\" \"int [5]\"")
2427d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
24376fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata        self.expect("frame variable intarr",matching=False,
24476fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata                    substrs = ['0x00000001,0x00000001,0x00000002,0x00000003,0x00000005'])
24576fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata
24676fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata        self.expect("frame variable other.intarr", matching=False,
24776fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata                    substrs = ['0x00000009,0x00000008,0x00000007,0x00000006,0x00000005'])
24876fb323611cb6a51b6a44f6d38d32bb284a6aef9Enrico Granata
249242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var[]%x}\" \"int [5]\"")
2507d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2517d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intarr",
2527d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
2537d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '0x00000001,0x00000001,0x00000002,0x00000003,0x00000005'])
2547d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2557d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.intarr",
2567d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
2577d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '0x00000009,0x00000008,0x00000007,0x00000006,0x00000005'])
2587d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2597d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# printing each array item as an array
260242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var[]%uint32_t[]}\" \"int [5]\"")
2617d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2627d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intarr",
2637d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
2647d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '{0x00000001},{0x00000001},{0x00000002},{0x00000003},{0x00000005}'])
2657d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2667d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.intarr",
2677d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr = ',
2687d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '{0x00000009},{0x00000008},{0x00000007},{0x00000006},{0x00000005}'])
2697d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2707d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# printing full array as an array
271242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%uint32_t[]}\" \"int [5]\"")
2727d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2737d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intarr",
2747d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
2757d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '0x00000001,0x00000001,0x00000002,0x00000003,0x00000005'])
276242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata
2777d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.intarr",
2787d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
2797d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '0x00000009,0x00000008,0x00000007,0x00000006,0x00000005'])
2807d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2817d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# printing each array item as an array
282242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var[]%float32[]}\" \"float [7]\"")
2837d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2847d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable flarr",
2857d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
286a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '{78.5},{77.25},{78},{76.125},{76.75},{76.875},{77}'])
2877d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2887d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.flarr",
2897d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr = ',
290a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '{25.5},{25.25},{25.125},{26.75},{27.375},{27.5},{26.125}'])
2917d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2927d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# printing full array as an array
293242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%float32[]}\" \"float [7]\"")
2947d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2957d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable flarr",
2967d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
297a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '78.5,77.25,78,76.125,76.75,76.875,77'])
2987d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
2997d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.flarr",
3007d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
301a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '25.5,25.25,25.125,26.75,27.375,27.5,26.125'])
3027d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3037d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# using array smart summary strings for pointers should make no sense
304242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%float32[]}\" \"float *\"")
305242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%int32_t[]}\" \"int *\"")
3067d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3077d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable flptr", matching=False,
308a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                    substrs = ['78.5,77.25,78,76.125,76.75,76.875,77'])
3097d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3107d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intptr", matching=False,
3117d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['1,1,2,3,5'])
3127d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3137d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata# use y and Y
314242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%y}\" \"float [7]\"")
315242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%y}\" \"int [5]\"")
3167d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3177d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable flarr",
3187d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
319a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '00 00 9d 42,00 80 9a 42,00 00 9c 42,00 40 98 42,00 80 99 42,00 c0 99 42,00 00 9a 42'])
3207d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3217d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.flarr",
3227d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
323a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '00 00 cc 41,00 00 ca 41,00 00 c9 41,00 00 d6 41,00 00 db 41,00 00 dc 41,00 00 d1 41'])
3247d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3257d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intarr",
3267d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
3277d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '01 00 00 00,01 00 00 00,02 00 00 00,03 00 00 00,05 00 00 00'])
3287d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3297d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.intarr",
3307d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr = ',
3317d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '09 00 00 00,08 00 00 00,07 00 00 00,06 00 00 00,05 00 00 00'])
3327d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
333242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%Y}\" \"float [7]\"")
334242ffb80dd0c1c650c8a9f05656a3ba2f339993dEnrico Granata        self.runCmd("type summary add --summary-string \"arr = ${var%Y}\" \"int [5]\"")
3357d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3367d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable flarr",
3377d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
338a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '00 00 9d 42             ...B,00 80 9a 42             ...B,00 00 9c 42             ...B,00 40 98 42             .@.B,00 80 99 42             ...B,00 c0 99 42             ...B,00 00 9a 42             ...B'])
3397d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3407d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.flarr",
3417d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['flarr = arr =',
342a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton                               '00 00 cc 41             ...A,00 00 ca 41             ...A,00 00 c9 41             ...A,00 00 d6 41             ...A,00 00 db 41             ...A,00 00 dc 41             ...A,00 00 d1 41             ...A'])
3437d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3447d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable intarr",
3457d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr =',
3467d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '....,01 00 00 00',
3477d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '....,05 00 00 00'])
3487d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3497d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata        self.expect("frame variable other.intarr",
3507d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                    substrs = ['intarr = arr = ',
3517d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '09 00 00 00',
3527d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata                               '....,07 00 00 00'])
3537d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3547d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata
3557d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granataif __name__ == '__main__':
3567d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    import atexit
3577d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    lldb.SBDebugger.Initialize()
3587d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    atexit.register(lambda: lldb.SBDebugger.Terminate())
3597d8622c20f6c4f634961c3d88aaa2f0881785c00Enrico Granata    unittest2.main()
360