##// END OF EJS Templates
Merge pull request #13232 from meeseeksmachine/auto-backport-of-pr-13231-on-7.x...
Merge pull request #13232 from meeseeksmachine/auto-backport-of-pr-13231-on-7.x Backport PR #13231 on branch 7.x (What's New 7.29)

File last commit:

r25167:79c601b9
r26976:69e67e78 merge
Show More
test_tokenutil.py
133 lines | 3.9 KiB | text/x-python | PythonLexer
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 """Tests for tokenutil"""
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
import nose.tools as nt
Doug Blank
TAB on empty line causes crash; with test
r18879 from IPython.utils.tokenutil import token_at_cursor, line_at_cursor
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578
MinRK
update completion_ and objection_info_request...
r16580 def expect_token(expected, cell, cursor_pos):
token = token_at_cursor(cell, cursor_pos)
offset = 0
for line in cell.splitlines():
if offset + len(line) >= cursor_pos:
break
else:
Matthias Bussonnier
Correctly count newline in tokenize....
r21655 offset += len(line)+1
MinRK
update completion_ and objection_info_request...
r16580 column = cursor_pos - offset
line_with_cursor = '%s|%s' % (line[:column], line[column:])
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 nt.assert_equal(token, expected,
MinRK
don't pick up tokens right of cursor...
r18453 "Expected %r, got %r in: %r (pos %i)" % (
expected, token, line_with_cursor, cursor_pos)
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 )
def test_simple():
cell = "foo"
for i in range(len(cell)):
expect_token("foo", cell, i)
def test_function():
cell = "foo(a=5, b='10')"
expected = 'foo'
MinRK
don't pick up tokens right of cursor...
r18453 # up to `foo(|a=`
for i in range(cell.find('a=') + 1):
expect_token("foo", cell, i)
# find foo after `=`
for i in [cell.find('=') + 1, cell.rfind('=') + 1]:
expect_token("foo", cell, i)
# in between `5,|` and `|b=`
for i in range(cell.find(','), cell.find('b=')):
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 expect_token("foo", cell, i)
def test_multiline():
cell = '\n'.join([
'a = 5',
'b = hello("string", there)'
])
expected = 'hello'
MinRK
don't pick up tokens right of cursor...
r18453 start = cell.index(expected) + 1
MinRK
update completion_ and objection_info_request...
r16580 for i in range(start, start + len(expected)):
expect_token(expected, cell, i)
Min RK
prioritize function token for inspection...
r20471 expected = 'hello'
MinRK
don't pick up tokens right of cursor...
r18453 start = cell.index(expected) + 1
MinRK
update completion_ and objection_info_request...
r16580 for i in range(start, start + len(expected)):
expect_token(expected, cell, i)
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578
Min RK
handle multi-line tokens in token_at_cursor...
r21701 def test_multiline_token():
cell = '\n'.join([
'"""\n\nxxxxxxxxxx\n\n"""',
'5, """',
'docstring',
'multiline token',
'""", [',
'2, 3, "complicated"]',
'b = hello("string", there)'
])
expected = 'hello'
start = cell.index(expected) + 1
for i in range(start, start + len(expected)):
expect_token(expected, cell, i)
expected = 'hello'
start = cell.index(expected) + 1
for i in range(start, start + len(expected)):
expect_token(expected, cell, i)
Min RK
prioritize function token for inspection...
r20471 def test_nested_call():
cell = "foo(bar(a=5), b=10)"
expected = 'foo'
start = cell.index('bar') + 1
for i in range(start, start + 3):
expect_token(expected, cell, i)
expected = 'bar'
start = cell.index('a=')
for i in range(start, start + 3):
expect_token(expected, cell, i)
expected = 'foo'
start = cell.index(')') + 1
for i in range(start, len(cell)-1):
expect_token(expected, cell, i)
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 def test_attrs():
Min RK
prioritize function token for inspection...
r20471 cell = "a = obj.attr.subattr"
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 expected = 'obj'
MinRK
don't pick up tokens right of cursor...
r18453 idx = cell.find('obj') + 1
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 for i in range(idx, idx + 3):
expect_token(expected, cell, i)
MinRK
don't pick up tokens right of cursor...
r18453 idx = cell.find('.attr') + 2
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 expected = 'obj.attr'
for i in range(idx, idx + 4):
expect_token(expected, cell, i)
MinRK
don't pick up tokens right of cursor...
r18453 idx = cell.find('.subattr') + 2
MinRK
add utils.tokenutil for getting the token at a cursor offset
r16578 expected = 'obj.attr.subattr'
for i in range(idx, len(cell)):
expect_token(expected, cell, i)
Doug Blank
TAB on empty line causes crash; with test
r18879
def test_line_at_cursor():
cell = ""
(line, offset) = line_at_cursor(cell, cursor_pos=11)
Thomas Kluyver
Fix line_at_cursor for end of last line without trailing newline
r23966 nt.assert_equal(line, "")
nt.assert_equal(offset, 0)
Matthias Bussonnier
Correctly count newline in tokenize....
r21655
Thomas Kluyver
Identify position after a newline as the start of the next line...
r23959 # The position after a newline should be the start of the following line.
cell = "One\nTwo\n"
(line, offset) = line_at_cursor(cell, cursor_pos=4)
nt.assert_equal(line, "Two\n")
nt.assert_equal(offset, 4)
Thomas Kluyver
Fix line_at_cursor for end of last line without trailing newline
r23966 # The end of a cell should be on the last line
cell = "pri\npri"
(line, offset) = line_at_cursor(cell, cursor_pos=7)
nt.assert_equal(line, "pri")
nt.assert_equal(offset, 4)
Min ho Kim
Fixed typos
r25167 def test_multiline_statement():
Matthias Bussonnier
Correctly count newline in tokenize....
r21655 cell = """a = (1,
3)
int()
map()
"""
for c in range(16, 22):
Matthias Bussonnier
Misc modifications for pytest comppatibility...
r25115 yield lambda cell, c: expect_token("int", cell, c), cell, c
Matthias Bussonnier
Correctly count newline in tokenize....
r21655 for c in range(22, 28):
Matthias Bussonnier
Misc modifications for pytest comppatibility...
r25115 yield lambda cell, c: expect_token("map", cell, c), cell, c