mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
74 lines
3.4 KiB
Python
74 lines
3.4 KiB
Python
"""Test pycode.ast"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import ast
|
|
|
|
import pytest
|
|
|
|
from sphinx.pycode.ast import unparse as ast_unparse
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('source', 'expected'),
|
|
[
|
|
('a + b', 'a + b'), # Add
|
|
('a and b', 'a and b'), # And
|
|
('os.path', 'os.path'), # Attribute
|
|
('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
|
|
("b'bytes'", "b'bytes'"), # Bytes
|
|
('object()', 'object()'), # Call
|
|
('1234', '1234'), # Constant, Num
|
|
("{'key1': 'value1', 'key2': 'value2'}",
|
|
"{'key1': 'value1', 'key2': 'value2'}"), # Dict
|
|
('a / b', 'a / b'), # Div
|
|
('...', '...'), # Ellipsis
|
|
('a // b', 'a // b'), # FloorDiv
|
|
('Tuple[int, int]', 'Tuple[int, int]'), # Index, Subscript
|
|
('~1', '~1'), # Invert
|
|
('lambda x, y: x + y',
|
|
'lambda x, y: ...'), # Lambda
|
|
('[1, 2, 3]', '[1, 2, 3]'), # List
|
|
('a << b', 'a << b'), # LShift
|
|
('a @ b', 'a @ b'), # MatMult
|
|
('a % b', 'a % b'), # Mod
|
|
('a * b', 'a * b'), # Mult
|
|
('sys', 'sys'), # Name, NameConstant
|
|
('not a', 'not a'), # Not
|
|
('a or b', 'a or b'), # Or
|
|
('a**b', 'a**b'), # Pow
|
|
('a >> b', 'a >> b'), # RShift
|
|
('{1, 2, 3}', '{1, 2, 3}'), # Set
|
|
('a - b', 'a - b'), # Sub
|
|
("'str'", "'str'"), # Str
|
|
('+a', '+a'), # UAdd
|
|
('-1', '-1'), # UnaryOp
|
|
('-a', '-a'), # USub
|
|
('(1, 2, 3)', '(1, 2, 3)'), # Tuple
|
|
('()', '()'), # Tuple (empty)
|
|
('(1,)', '(1,)'), # Tuple (single item)
|
|
('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
|
|
('Tuple[:,:]', 'Tuple[:, :]'), # Index, Subscript, 2x Slice
|
|
('Tuple[1:2]', 'Tuple[1:2]'), # Index, Subscript, Slice(no-step)
|
|
('Tuple[1:2:3]', 'Tuple[1:2:3]'), # Index, Subscript, Slice
|
|
('x[:, np.newaxis, :, :]',
|
|
'x[:, np.newaxis, :, :]'), # Index, Subscript, numpy extended syntax
|
|
('y[:, 1:3][np.array([0, 2, 4]), :]',
|
|
'y[:, 1:3][np.array([0, 2, 4]), :]'), # Index, 2x Subscript, numpy extended syntax
|
|
],
|
|
) # fmt: skip
|
|
def test_unparse(source, expected):
|
|
module = ast.parse(source)
|
|
assert ast_unparse(module.body[0].value, source) == expected
|
|
|
|
|
|
def test_unparse_None():
|
|
assert ast_unparse(None) is None
|