Files
jedi/test/test_evaluate/test_literals.py
2017-11-26 17:48:00 +01:00

42 lines
1.1 KiB
Python

import pytest
import jedi
from jedi._compatibility import py_version, unicode
def _eval_literal(code):
def_, = jedi.Script(code).goto_definitions()
return def_._name._context.access._obj
@pytest.mark.skipif('sys.version_info[:2] < (3, 6)')
def test_f_strings():
"""
f literals are not really supported in Jedi. They just get ignored and an
empty string is returned.
"""
assert _eval_literal('f"asdf"') == ''
assert _eval_literal('f"{asdf}"') == ''
assert _eval_literal('F"{asdf}"') == ''
assert _eval_literal('rF"{asdf}"') == ''
def test_rb_strings():
assert _eval_literal('br"asdf"') == b'asdf'
obj = _eval_literal('rb"asdf"')
if py_version < 33:
# rb is not valid in Python 2. Due to error recovery we just get a
# string.
assert obj == 'asdf'
else:
assert obj == b'asdf'
@pytest.mark.skipif('sys.version_info[:2] < (3, 6)')
def test_thousand_separators():
assert _eval_literal('1_2_3') == 123
assert _eval_literal('123_456_789') == 123456789
assert _eval_literal('0x3_4') == 52
assert _eval_literal('0b1_0') == 2
assert _eval_literal('0o1_0') == 8