Files
parso/test/test_prefix.py
Dave Halter 814b16cc6c Remove the remove_newline hack and build that stuff into error recovery instead.
Tests are passing except for diff parser tests.
2017-05-31 21:24:24 +02:00

52 lines
1.4 KiB
Python

import pytest
import parso
@pytest.mark.parametrize(('string', 'tokens'), [
('#', ['#']),
(' # ', [' ', '# ']),
(' # \n', [' ', '# ', '\n']),
(' # \f\n', [' ', '# ', '\f', '\n']),
(' \n', [' ', '\n']),
(' \n ', [' ', '\n', ' ']),
(' \f ', [' ', '\f', ' ']),
(' \f ', [' ', '\f', ' ']),
(' \r\n', [' ', '\r\n']),
('\\\n', ['\\\n']),
('\\\r\n', ['\\\r\n']),
('\t\t\n\t', ['\t\t', '\n', '\t']),
])
def test_simple_prefix_splitting(string, tokens):
tree = parso.parse(string)
leaf = tree.children[0]
assert leaf.type == 'endmarker'
parsed_tokens = list(leaf._split_prefix())
start_pos = (1, 0)
for pt, expected in zip(parsed_tokens, tokens):
assert pt.value == expected
# Calculate the estimated end_pos
if expected.endswith('\n'):
end_pos = start_pos[0] + 1, 0
else:
end_pos = start_pos[0], start_pos[1] + len(expected)
#assert start_pos == pt.start_pos
assert end_pos == pt.end_pos
start_pos = end_pos
@pytest.mark.parametrize(('string', 'types'), [
('# ', ['comment']),
('\r\n', ['newline']),
('\f', ['formfeed']),
('\\\n', ['backslash']),
])
def test_prefix_splitting_types(string, types):
tree = parso.parse(string)
leaf = tree.children[0]
assert leaf.type == 'endmarker'
parsed_tokens = list(leaf._split_prefix())
assert [t.type for t in parsed_tokens] == types