Skip to content

Commit

Permalink
pytester: LineMatcher: assert Sequence when matching in order
Browse files Browse the repository at this point in the history
This can be helpful when passing a set accidentally.
  • Loading branch information
blueyed committed Mar 15, 2019
1 parent 33d4c96 commit b1bed1c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog/4931.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pytester's ``LineMatcher`` asserts that the passed lines are a sequence.
2 changes: 2 additions & 0 deletions src/_pytest/pytester.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from __future__ import print_function

import codecs
import collections
import gc
import os
import platform
Expand Down Expand Up @@ -1325,6 +1326,7 @@ def _match_lines(self, lines2, match_func, match_nickname):
will be logged to stdout when a match occurs
"""
assert isinstance(lines2, collections.abc.Sequence)
lines2 = self._getlines(lines2)
lines1 = self.lines[:]
nextline = None
Expand Down
13 changes: 13 additions & 0 deletions testing/test_pytester.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from _pytest.main import EXIT_TESTSFAILED
from _pytest.pytester import CwdSnapshot
from _pytest.pytester import HookRecorder
from _pytest.pytester import LineMatcher
from _pytest.pytester import SysModulesSnapshot
from _pytest.pytester import SysPathsSnapshot

Expand Down Expand Up @@ -453,3 +454,15 @@ def test_timeout():
)
with pytest.raises(testdir.TimeoutExpired):
testdir.runpytest_subprocess(testfile, timeout=1)


def test_linematcher_with_set():
"""Test LineMatcher with regard to passing in a set (accidentally)."""
lm = LineMatcher([])

with pytest.raises(AssertionError):
lm.fnmatch_lines({})
lm.fnmatch_lines([])
lm.fnmatch_lines(())

assert lm._getlines({}) == {}

0 comments on commit b1bed1c

Please sign in to comment.