@@ -0,0 +1,926 @@
+code = '''from __future__ import unicode_literals%0A%0Afrom webtest import Upload%0A%0A%0Adef test_create_break(testapp, session):%0A    sid = session%5B'id'%5D%0A%0A    resp = testapp.post(%0A        '/sessions/%7B%7D/files'.format(sid),%0A        dict(%0A            file=Upload('foobar.py', b'print 123'),%0A        ),%0A        status=201,%0A    )%0A    file_id = resp.json%5B'file'%5D%5B'id'%5D%0A%0A%0A    resp = testapp.post(%0A        '/sessions/%7B%7D/breaks'.format(sid),%0A        dict(%0A            lineno=123,%0A            file_id=file_id,%0A            # TODO: break types?%0A            # TODO: other info%0A        ),%0A        status=201,%0A    )%0A    assert resp.json%5B'id'%5D.startswith('BK')%0A    assert resp.json%5B'file'%5D%5B'id'%5D == file_id%0A    assert resp.json%5B'lineno'%5D == 123%0A'''%0A%0Aimport py%0Afrom py._code.source import getstatementrange_ast%0A%0Adef test_getstatementrange_ast():%0A    source = py.code.Source(code)%0A    _, _, end = getstatementrange_ast(19, source)%0A    assert end == 31%0A%0A

Add test to demonstrage the bug