[lldb] Also Catch invalid calls to TestPExpectTest's expect()

This is a follow up to D88792 which found an issue in a call to PExpectTest's
expect function that allows passing a string to the `substrs` parameter. However
this issue was found by just grepping and TestPExpect's expect function is still
accepting a single string as a value to `substrs`.

This patch adds the same sanity check that D88792 added to the PExpectTest's
implementation of `expect` and also adds a small test for it.

Reviewed By: kastiglione, JDevlieghere

Differential Revision: https://reviews.llvm.org/D89302
This commit is contained in:
Raphael Isemann 2020-11-05 13:41:26 +01:00
parent a7bcb3b9eb
commit 2f84b59a4c
2 changed files with 33 additions and 0 deletions

View File

@ -54,6 +54,10 @@ class PExpectTest(TestBase):
def expect(self, cmd, substrs=None):
self.assertNotIn('\n', cmd)
self.child.sendline(cmd)
# If 'substrs' is a string then this code would just check that every
# character of the string is in the output.
assert not isinstance(substrs, six.string_types), \
"substrs must be a collection of strings"
if substrs is not None:
for s in substrs:
self.child.expect_exact(s)

View File

@ -0,0 +1,29 @@
"""
Test the PExpectTest test functions.
"""
import lldb
import lldbsuite.test.lldbutil as lldbutil
from lldbsuite.test.lldbtest import *
from textwrap import dedent
class TestPExpectTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
def assert_expect_fails_with(self, cmd, expect_args, expected_msg):
try:
self.expect(cmd, **expect_args)
except AssertionError as e:
self.assertIn(expected_msg, str(e))
else:
self.fail("expect should have raised AssertionError!")
def test_expect(self):
# Test that passing a string to the 'substrs' argument is rejected.
self.assert_expect_fails_with("settings list prompt",
dict(substrs="some substring"),
"substrs must be a collection of strings")