brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 27d18e5 Raw
173 lines · python
1"""2Test the format of API test suite assert failure messages3"""4 5 6import lldb7import lldbsuite.test.lldbutil as lldbutil8from lldbsuite.test.lldbtest import *9from lldbsuite.test.decorators import *10from textwrap import dedent11 12 13class AssertMessagesTestCase(TestBase):14    NO_DEBUG_INFO_TESTCASE = True15 16    def assert_expect_fails_with(self, cmd, expect_args, expected_msg):17        try:18            # This expect should fail19            self.expect(cmd, **expect_args)20        except AssertionError as e:21            # Then check message from previous expect22            self.expect(str(e), exe=False, substrs=[dedent(expected_msg)])23        else:24            self.fail("Initial expect should have raised AssertionError!")25 26    @expectedFailureAll(oslist=no_match(["linux"]), remote=True)27    def test_createTestTarget(self):28        try:29            self.createTestTarget("doesnt_exist")30        except AssertionError as e:31            self.assertIn(32                "Couldn't create target for path 'doesnt_exist': "33                "error: 'doesnt_exist' does not exist",34                str(e),35            )36 37    def test_expect(self):38        """Test format of messages produced by expect(...)"""39 40        # When an expect passes the messages are sent to the trace41        # file which we can't access here. So really, these only42        # check what failures look like, but it *should* be the same43        # content for the trace log too.44 45        # Will stop at startstr fail46        self.assert_expect_fails_with(47            "settings list prompt",48            dict(startstr="dog", endstr="cat"),49            """\50               Ran command:51               "settings list prompt"52 53               Got output:54                 prompt -- The debugger command line prompt displayed for the user.55 56               Expecting start string: "dog" (was not found)""",57        )58 59        # startstr passes, endstr fails60        # We see both reported61        self.assert_expect_fails_with(62            "settings list prompt",63            dict(startstr="  prompt -- ", endstr="foo"),64            """\65               Ran command:66               "settings list prompt"67 68               Got output:69                 prompt -- The debugger command line prompt displayed for the user.70 71               Expecting start string: "  prompt -- " (was found)72               Expecting end string: "foo" (was not found)""",73        )74 75        # Same thing for substrs, regex patterns ignored because of substr failure76        # Any substr after the first missing is also ignored77        self.assert_expect_fails_with(78            "abcdefg",79            dict(substrs=["abc", "ijk", "xyz"], patterns=["foo", "bar"], exe=False),80            """\81               Checking string:82               "abcdefg"83 84               Expecting sub string: "abc" (was found)85               Expecting sub string: "ijk" (was not found)""",86        )87 88        # Regex patterns also stop at first failure, subsequent patterns ignored89        # They are last in the chain so no other check gets skipped90        # Including the rest of the conditions here to prove they are run and shown91        self.assert_expect_fails_with(92            "0123456789",93            dict(94                startstr="012",95                endstr="789",96                substrs=["345", "678"],97                patterns=["[0-9]+", "[a-f]+", "a|b|c"],98                exe=False,99            ),100            """\101               Checking string:102               "0123456789"103 104               Expecting start string: "012" (was found)105               Expecting end string: "789" (was found)106               Expecting sub string: "345" (was found)107               Expecting sub string: "678" (was found)108               Expecting regex pattern: "[0-9]+" (was found, matched "0123456789")109               Expecting regex pattern: "[a-f]+" (was not found)""",110        )111 112        # This time we dont' want matches but we do get them113        self.assert_expect_fails_with(114            "the quick brown fox",115            # Note that the second pattern *will* match116            dict(117                patterns=["[0-9]+", "fox"],118                exe=False,119                matching=False,120                startstr="cat",121                endstr="rabbit",122                substrs=["abc", "def"],123            ),124            """\125               Checking string:126               "the quick brown fox"127 128               Not expecting start string: "cat" (was not found)129               Not expecting end string: "rabbit" (was not found)130               Not expecting sub string: "abc" (was not found)131               Not expecting sub string: "def" (was not found)132               Not expecting regex pattern: "[0-9]+" (was not found)133               Not expecting regex pattern: "fox" (was found, matched "fox")""",134        )135 136        # Extra assert messages are only printed when we get a failure137        # So I can't test that from here, just how it looks when it's printed138        self.assert_expect_fails_with(139            "mouse",140            dict(startstr="cat", exe=False, msg="Reason for check goes here!"),141            """\142               Checking string:143               "mouse"144 145               Expecting start string: "cat" (was not found)146               Reason for check goes here!""",147        )148 149        # Verify expect() preconditions.150        # Both `patterns` and `substrs` cannot be of type string.151        self.assert_expect_fails_with(152            "any command",153            dict(patterns="some substring"),154            "patterns must be a collection of strings",155        )156        self.assert_expect_fails_with(157            "any command",158            dict(substrs="some substring"),159            "substrs must be a collection of strings",160        )161        # Prevent `self.expect("cmd", "substr")`162        self.assert_expect_fails_with(163            "any command",164            dict(msg="some substring"),165            "expect() missing a matcher argument",166        )167        # Prevent `self.expect("cmd", "msg", "substr")`168        self.assert_expect_fails_with(169            "any command",170            dict(msg="a message", patterns="some substring"),171            "must be a collection of strings",172        )173