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