brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · d1ede93 Raw
111 lines · python
1"""2Test lldb data formatter subsystem.3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class NSArraySyntheticTestCase(TestBase):13    def setUp(self):14        # Call super's setUp().15        TestBase.setUp(self)16        # Find the line number to break at.17        self.line = line_number("main.m", "// Set break point at this line.")18 19    @skipUnlessDarwin20    def test_rdar11086338_with_run_command(self):21        """Test that NSArray reports its synthetic children properly."""22        self.build()23        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)24 25        lldbutil.run_break_set_by_file_and_line(26            self, "main.m", self.line, num_expected_locations=1, loc_exact=True27        )28 29        self.runCmd("run", RUN_SUCCEEDED)30 31        # The stop reason of the thread should be breakpoint.32        self.expect(33            "thread list",34            STOPPED_DUE_TO_BREAKPOINT,35            substrs=["stopped", "stop reason = breakpoint"],36        )37 38        # This is the function to remove the custom formats in order to have a39        # clean slate for the next test case.40        def cleanup():41            self.runCmd("type format clear", check=False)42            self.runCmd("type summary clear", check=False)43            self.runCmd("type synth clear", check=False)44 45        # Execute the cleanup function during test case tear down.46        self.addTearDownHook(cleanup)47 48        # Now check that we are displaying Cocoa classes correctly49        self.expect("frame variable arr", substrs=['@"6 elements"'])50        self.expect("frame variable other_arr", substrs=['@"4 elements"'])51        self.expect("frame variable empty_arr", substrs=['@"0 elements"'])52        self.expect(53            "frame variable arr --ptr-depth 1",54            substrs=[55                '@"6 elements"',56                "[0] = 0x",57                "[1] = 0x",58                "[2] = 0x",59                "[3] = 0x",60                "[4] = 0x",61                "[5] = 0x",62            ],63        )64        self.expect(65            "frame variable other_arr --ptr-depth 1",66            substrs=['@"4 elements"', "[0] = 0x", "[1] = 0x", "[2] = 0x", "[3] = 0x"],67        )68        self.expect("frame variable empty_arr --ptr-depth 1", substrs=['@"0 elements"'])69        self.expect(70            "frame variable arr --ptr-depth 1",71            substrs=[72                '@"6 elements"',73                '@"hello"',74                '@"world"',75                '@"this"',76                '@"is"',77                '@"me"',78                '@"http://www.apple.com',79            ],80        )81        self.expect(82            "frame variable other_arr --ptr-depth 1",83            substrs=['@"4 elements"', "(int)5", '@"a string"', '@"6 elements"'],84        )85        self.expect(86            "frame variable other_arr --ptr-depth 2",87            substrs=[88                '@"4 elements"',89                '@"6 elements" {',90                '@"hello"',91                '@"world"',92                '@"this"',93                '@"is"',94                '@"me"',95                '@"http://www.apple.com',96            ],97        )98 99        self.assertTrue(100            self.frame().FindVariable("arr").MightHaveChildren(),101            "arr says it does not have children!",102        )103        self.assertTrue(104            self.frame().FindVariable("other_arr").MightHaveChildren(),105            "arr says it does not have children!",106        )107        self.assertFalse(108            self.frame().FindVariable("empty_arr").MightHaveChildren(),109            "arr says it does have children!",110        )111