New issue 739: triple quotes can mess up source code parsing
https://bitbucket.org/pytest-dev/pytest/issue/739/triple-quotes-can-mess-up-source-code

Tomi Pieviläinen:

There seems to be a weird corner case with triple quotes. With a test file

    def test_1_works():
        ('''
        ''').doesnt_exist()


    def test_2_works():
        ('''
    ''').lower()


    def test_3_works():
        '''
    '''.doesnt_exist()


    def test_1_fails():
        ('''
    ''').doesnt_exist()


    def test_2_fails():
        ('''

        ''').doesnt_exist()

py.test crashes with INTERNALERROR:

    $ py.test
    
============================================================================ 
test session starts 
============================================================================
    platform linux -- Python 3.4.3 -- py-1.4.27 -- pytest-2.7.0
    rootdir: /home/hukka/pytest-test, inifile: 
    collected 5 items 

    test_pytest.py F.F
    INTERNALERROR> Traceback (most recent call last):
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/main.py", line 
84, in wrap_session
    INTERNALERROR>     doit(config, session)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/main.py", line 
122, in _main
    INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
521, in __call__
    INTERNALERROR>     return self._docall(self.methods, kwargs)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
528, in _docall
    INTERNALERROR>     firstresult=self.firstresult).execute()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
394, in execute
    INTERNALERROR>     res = method(*args)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/main.py", line 
142, in pytest_runtestloop
    INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, 
nextitem=nextitem)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
521, in __call__
    INTERNALERROR>     return self._docall(self.methods, kwargs)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
528, in _docall
    INTERNALERROR>     firstresult=self.firstresult).execute()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
393, in execute
    INTERNALERROR>     return wrapped_call(method(*args), self.execute)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
113, in wrapped_call
    INTERNALERROR>     return call_outcome.get_result()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
137, in get_result
    INTERNALERROR>     raise ex[1].with_traceback(ex[2])
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
123, in __init__
    INTERNALERROR>     self.result = func()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
394, in execute
    INTERNALERROR>     res = method(*args)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/runner.py", line 
65, in pytest_runtest_protocol
    INTERNALERROR>     runtestprotocol(item, nextitem=nextitem)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/runner.py", line 
75, in runtestprotocol
    INTERNALERROR>     reports.append(call_and_report(item, "call", log))
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/runner.py", line 
121, in call_and_report
    INTERNALERROR>     report = hook.pytest_runtest_makereport(item=item, 
call=call)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
521, in __call__
    INTERNALERROR>     return self._docall(self.methods, kwargs)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
528, in _docall
    INTERNALERROR>     firstresult=self.firstresult).execute()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
393, in execute
    INTERNALERROR>     return wrapped_call(method(*args), self.execute)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
109, in wrapped_call
    INTERNALERROR>     wrap_controller.send(call_outcome)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/skipping.py", 
line 157, in pytest_runtest_makereport
    INTERNALERROR>     rep = outcome.get_result()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
137, in get_result
    INTERNALERROR>     raise ex[1].with_traceback(ex[2])
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
123, in __init__
    INTERNALERROR>     self.result = func()
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/core.py", line 
394, in execute
    INTERNALERROR>     res = method(*args)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/runner.py", line 
224, in pytest_runtest_makereport
    INTERNALERROR>     longrepr = item.repr_failure(excinfo)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/python.py", line 
625, in repr_failure
    INTERNALERROR>     return self._repr_failure_py(excinfo, style=style)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/python.py", line 
618, in _repr_failure_py
    INTERNALERROR>     style=style)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/_pytest/main.py", line 
410, in _repr_failure_py
    INTERNALERROR>     style=style, tbfilter=tbfilter)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/py/_code/code.py", line 
412, in getrepr
    INTERNALERROR>     return fmt.repr_excinfo(self)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/py/_code/code.py", line 
590, in repr_excinfo
    INTERNALERROR>     reprtraceback = self.repr_traceback(excinfo)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/py/_code/code.py", line 
582, in repr_traceback
    INTERNALERROR>     reprentry = self.repr_traceback_entry(entry, einfo)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/py/_code/code.py", line 
543, in repr_traceback_entry
    INTERNALERROR>     s = self.get_source(source, line_index, excinfo, 
short=short)
    INTERNALERROR>   File 
"/home/hukka/addressimport/lib/python3.4/site-packages/py/_code/code.py", line 
484, in get_source
    INTERNALERROR>     lines.append(self.flow_marker + "   " + 
source.lines[line_index])
    INTERNALERROR> IndexError: list index out of range

    ==================================================================== 2 
failed, 1 passed in 0.03 seconds 
====================================================================

The first three tests work fine on their own:

    $ py.test
    
============================================================================ 
test session starts 
============================================================================
    platform linux -- Python 3.4.3 -- py-1.4.27 -- pytest-2.7.0
    rootdir: /home/hukka/pytest-test, inifile: 
    collected 3 items 

    test_pytest.py F.F

    
=================================================================================
 FAILURES 
==================================================================================
    
_______________________________________________________________________________ 
test_1_works 
________________________________________________________________________________

        def test_1_works():
            ('''
    >       ''').doesnt_exist()
    E       AttributeError: 'str' object has no attribute 'doesnt_exist'

    test_pytest.py:3: AttributeError
    
_______________________________________________________________________________ 
test_3_works 
________________________________________________________________________________

        def test_3_works():
            '''
    >   '''.doesnt_exist()
    E   AttributeError: 'str' object has no attribute 'doesnt_exist'

    test_pytest.py:13: AttributeError
    ==================================================================== 2 
failed, 1 passed in 0.02 seconds 
====================================================================


 but either of the last two will cause this. Same thing happens also on 
python2.7.



_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to