|
|
"""Tests for tokenutil"""
|
|
|
# Copyright (c) IPython Development Team.
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
|
|
import nose.tools as nt
|
|
|
|
|
|
from IPython.utils.tokenutil import token_at_cursor
|
|
|
|
|
|
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:
|
|
|
offset += len(line)
|
|
|
column = cursor_pos - offset
|
|
|
line_with_cursor = '%s|%s' % (line[:column], line[column:])
|
|
|
line
|
|
|
nt.assert_equal(token, expected,
|
|
|
"Excpected %r, got %r in: %s" % (
|
|
|
expected, token, line_with_cursor)
|
|
|
)
|
|
|
|
|
|
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'
|
|
|
for i in (6,7,8,10,11,12):
|
|
|
expect_token("foo", cell, i)
|
|
|
|
|
|
def test_multiline():
|
|
|
cell = '\n'.join([
|
|
|
'a = 5',
|
|
|
'b = hello("string", there)'
|
|
|
])
|
|
|
expected = 'hello'
|
|
|
start = cell.index(expected)
|
|
|
for i in range(start, start + len(expected)):
|
|
|
expect_token(expected, cell, i)
|
|
|
expected = 'there'
|
|
|
start = cell.index(expected)
|
|
|
for i in range(start, start + len(expected)):
|
|
|
expect_token(expected, cell, i)
|
|
|
|
|
|
def test_attrs():
|
|
|
cell = "foo(a=obj.attr.subattr)"
|
|
|
expected = 'obj'
|
|
|
idx = cell.find('obj')
|
|
|
for i in range(idx, idx + 3):
|
|
|
expect_token(expected, cell, i)
|
|
|
idx = idx + 4
|
|
|
expected = 'obj.attr'
|
|
|
for i in range(idx, idx + 4):
|
|
|
expect_token(expected, cell, i)
|
|
|
idx = idx + 5
|
|
|
expected = 'obj.attr.subattr'
|
|
|
for i in range(idx, len(cell)):
|
|
|
expect_token(expected, cell, i)
|
|
|
|