2020-01-04 09:00:26 -06:00
|
|
|
"""Test pycode.ast"""
|
|
|
|
|
2022-04-18 11:33:56 -05:00
|
|
|
import ast
|
2020-02-15 21:05:59 -06:00
|
|
|
|
2020-01-04 09:00:26 -06:00
|
|
|
import pytest
|
|
|
|
|
2022-04-18 11:33:56 -05:00
|
|
|
from sphinx.pycode.ast import unparse as ast_unparse
|
2020-01-04 09:00:26 -06:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('source,expected', [
|
2020-03-13 23:51:49 -05:00
|
|
|
("a + b", "a + b"), # Add
|
|
|
|
("a and b", "a and b"), # And
|
2020-01-04 09:00:26 -06:00
|
|
|
("os.path", "os.path"), # Attribute
|
2020-03-13 23:51:49 -05:00
|
|
|
("1 * 2", "1 * 2"), # BinOp
|
|
|
|
("a & b", "a & b"), # BitAnd
|
|
|
|
("a | b", "a | b"), # BitOr
|
|
|
|
("a ^ b", "a ^ b"), # BitXor
|
|
|
|
("a and b and c", "a and b and c"), # BoolOp
|
2020-01-04 09:00:26 -06:00
|
|
|
("b'bytes'", "b'bytes'"), # Bytes
|
|
|
|
("object()", "object()"), # Call
|
|
|
|
("1234", "1234"), # Constant
|
|
|
|
("{'key1': 'value1', 'key2': 'value2'}",
|
|
|
|
"{'key1': 'value1', 'key2': 'value2'}"), # Dict
|
2020-03-13 23:51:49 -05:00
|
|
|
("a / b", "a / b"), # Div
|
2020-01-04 09:00:26 -06:00
|
|
|
("...", "..."), # Ellipsis
|
2020-03-13 23:51:49 -05:00
|
|
|
("a // b", "a // b"), # FloorDiv
|
2020-01-04 09:00:26 -06:00
|
|
|
("Tuple[int, int]", "Tuple[int, int]"), # Index, Subscript
|
2022-06-14 03:46:12 -05:00
|
|
|
("~1", "~1"), # Invert
|
2020-01-04 09:00:26 -06:00
|
|
|
("lambda x, y: x + y",
|
2020-02-15 21:05:59 -06:00
|
|
|
"lambda x, y: ..."), # Lambda
|
2020-01-04 09:00:26 -06:00
|
|
|
("[1, 2, 3]", "[1, 2, 3]"), # List
|
2020-03-13 23:51:49 -05:00
|
|
|
("a << b", "a << b"), # LShift
|
|
|
|
("a @ b", "a @ b"), # MatMult
|
|
|
|
("a % b", "a % b"), # Mod
|
|
|
|
("a * b", "a * b"), # Mult
|
2020-01-04 09:00:26 -06:00
|
|
|
("sys", "sys"), # Name, NameConstant
|
|
|
|
("1234", "1234"), # Num
|
2020-03-13 23:51:49 -05:00
|
|
|
("not a", "not a"), # Not
|
|
|
|
("a or b", "a or b"), # Or
|
2022-06-15 04:15:53 -05:00
|
|
|
("a**b", "a**b"), # Pow
|
2020-03-13 23:51:49 -05:00
|
|
|
("a >> b", "a >> b"), # RShift
|
2020-01-04 09:00:26 -06:00
|
|
|
("{1, 2, 3}", "{1, 2, 3}"), # Set
|
2020-03-13 23:51:49 -05:00
|
|
|
("a - b", "a - b"), # Sub
|
2020-01-04 09:00:26 -06:00
|
|
|
("'str'", "'str'"), # Str
|
2022-06-14 03:46:12 -05:00
|
|
|
("+a", "+a"), # UAdd
|
|
|
|
("-1", "-1"), # UnaryOp
|
|
|
|
("-a", "-a"), # USub
|
2021-06-20 12:43:55 -05:00
|
|
|
("(1, 2, 3)", "(1, 2, 3)"), # Tuple
|
2020-04-11 23:00:04 -05:00
|
|
|
("()", "()"), # Tuple (empty)
|
2021-06-20 12:43:55 -05:00
|
|
|
("(1,)", "(1,)"), # Tuple (single item)
|
2022-04-18 11:33:56 -05:00
|
|
|
("lambda x=0, /, y=1, *args, z, **kwargs: x + y + z",
|
|
|
|
"lambda x=0, /, y=1, *args, z, **kwargs: ..."), # posonlyargs
|
|
|
|
("0x1234", "0x1234"), # Constant
|
|
|
|
("1_000_000", "1_000_000"), # Constant
|
2020-01-04 09:00:26 -06:00
|
|
|
])
|
|
|
|
def test_unparse(source, expected):
|
|
|
|
module = ast.parse(source)
|
2022-04-18 11:33:56 -05:00
|
|
|
assert ast_unparse(module.body[0].value, source) == expected
|
2020-01-04 09:00:26 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_unparse_None():
|
2022-04-18 11:33:56 -05:00
|
|
|
assert ast_unparse(None) is None
|