xonsh/tests/test_parser.py

1831 lines
44 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2015-04-02 19:42:38 -05:00
"""Tests the xonsh parser."""
2015-01-24 12:27:31 -06:00
import os
import sys
2015-01-24 19:17:15 -06:00
import ast
2016-07-01 17:50:01 +03:00
import builtins
2015-01-24 12:27:31 -06:00
2016-06-22 17:32:02 -04:00
import pytest
2015-01-24 12:27:31 -06:00
2016-01-31 23:13:01 -05:00
from xonsh.ast import pdump
2015-01-24 12:27:31 -06:00
from xonsh.parser import Parser
2016-07-01 17:50:01 +03:00
from tools import VER_FULL, skip_if_py34
2015-01-24 20:19:10 -06:00
# a lot of col_offset data changed from Py v3.5.0 -> v3.5.1
2016-02-03 01:29:06 -05:00
INC_ATTRS = (3, 5, 1) <= VER_FULL
2016-07-01 17:50:01 +03:00
@pytest.fixture(autouse=True)
def xonsh_builtins_autouse(xonsh_builtins):
return xonsh_builtins
PARSER = Parser(lexer_optimize=False, yacc_optimize=False, yacc_debug=True,
lexer_table='lexer_test_table',
yacc_table='parser_test_table')
# def nodes_equal(x, y):
# __tracebackhide__ = True
# if type(x) != type(y):
# return False
# if isinstance(x, (ast.Expr, ast.FunctionDef, ast.ClassDef)):
# if x.lineno != y.lineno:
# return False
# if x.col_offset != y.col_offset:
# return False
# for (xname, xval), (yname, yval) in zip(ast.iter_fields(x),
# ast.iter_fields(y)):
# if xname != yname:
# return False
# if xval != yval:
# return False
# for xchild, ychild in zip(ast.iter_child_nodes(x),
# ast.iter_child_nodes(y)):
# if not nodes_equal(xchild, ychild):
# return False
# return True
2015-01-24 20:19:10 -06:00
2015-01-24 19:17:15 -06:00
def nodes_equal(x, y):
__tracebackhide__ = True
2016-07-01 17:50:01 +03:00
assert type(x) == type(y)
2016-01-31 20:32:28 -05:00
if isinstance(x, (ast.Expr, ast.FunctionDef, ast.ClassDef)):
2016-07-01 17:50:01 +03:00
assert x.lineno == y.lineno
assert x.col_offset == y.col_offset
2015-07-29 23:58:25 +02:00
for (xname, xval), (yname, yval) in zip(ast.iter_fields(x),
2015-01-24 19:17:15 -06:00
ast.iter_fields(y)):
2016-07-01 17:50:01 +03:00
assert xname == yname
if not isinstance(xval, ast.AST):
assert xval == yval
2015-07-29 23:58:25 +02:00
for xchild, ychild in zip(ast.iter_child_nodes(x),
2015-01-24 19:17:15 -06:00
ast.iter_child_nodes(y)):
2016-07-01 17:50:01 +03:00
assert nodes_equal(xchild, ychild)
return True
2015-01-24 19:17:15 -06:00
2016-07-01 17:50:01 +03:00
# def assert_nodes_equal(x, y, include_attributes=True):
# __tracebackhide__ = True
# if nodes_equal(x, y):
# return True
# error_msg = 'x:\n=={}\ny:\n=={}\n'.format(
# pdump(x, include_attributes=include_attributes),
# pdump(y, include_attributes=include_attributes))
# pytest.fail(error_msg)
2015-01-24 19:17:15 -06:00
2015-04-02 19:42:38 -05:00
def check_ast(inp, run=True, mode='eval'):
__tracebackhide__ = True
2015-01-24 20:19:10 -06:00
# expect a Python AST
2015-04-02 19:42:38 -05:00
exp = ast.parse(inp, mode=mode)
2015-01-24 20:19:10 -06:00
# observe something from xonsh
2016-07-01 17:50:01 +03:00
obs = PARSER.parse(inp, debug_level=0)
2015-01-24 20:19:10 -06:00
# Check that they are equal
2016-07-01 17:50:01 +03:00
assert nodes_equal(exp, obs)
2015-01-24 20:19:10 -06:00
# round trip by running xonsh AST via Python
2016-07-01 17:50:01 +03:00
source = compile(obs, '<test-ast>', mode)
2015-01-25 19:43:23 -06:00
if run:
2016-07-01 17:50:01 +03:00
exec(source)
2015-01-24 12:27:31 -06:00
2015-04-02 19:42:38 -05:00
def check_stmts(inp, run=True, mode='exec'):
__tracebackhide__ = True
2015-04-02 19:42:38 -05:00
if not inp.endswith('\n'):
inp += '\n'
check_ast(inp, run=run, mode=mode)
2015-01-25 18:22:43 -06:00
2015-04-02 19:42:38 -05:00
def check_xonsh_ast(xenv, inp, run=True, mode='eval'):
__tracebackhide__ = True
2016-07-01 17:50:01 +03:00
builtins.__xonsh_env__ = xenv
obs = PARSER.parse(inp)
if obs is None:
return # comment only
bytecode = compile(obs, '<test-xonsh-ast>', mode)
if run:
exec(bytecode)
return True
2015-07-29 23:58:25 +02:00
2015-04-02 19:42:38 -05:00
def check_xonsh(xenv, inp, run=True, mode='exec'):
__tracebackhide__ = True
2015-04-02 19:42:38 -05:00
if not inp.endswith('\n'):
inp += '\n'
check_xonsh_ast(xenv, inp, run=run, mode=mode)
2015-01-31 18:24:12 -06:00
2015-01-25 18:22:43 -06:00
#
# Tests
#
2015-01-24 12:27:31 -06:00
2015-01-27 21:52:47 -06:00
#
# expressions
#
2015-01-24 12:27:31 -06:00
def test_int_literal():
check_ast('42')
2015-01-24 12:27:31 -06:00
2015-01-24 20:19:10 -06:00
def test_float_literal():
check_ast('42.0')
2015-01-24 20:19:10 -06:00
2015-03-21 19:10:57 -04:00
def test_imag_literal():
check_ast('42j')
2015-03-21 19:10:57 -04:00
def test_float_imag_literal():
check_ast('42.0j')
2015-03-21 19:10:57 -04:00
def test_complex():
check_ast('42+84j')
2015-03-21 19:10:57 -04:00
2015-01-24 20:19:10 -06:00
def test_str_literal():
check_ast('"hello"')
2015-01-24 20:19:10 -06:00
def test_bytes_literal():
check_ast('b"hello"')
2015-01-24 20:19:10 -06:00
2015-01-24 20:33:21 -06:00
def test_unary_plus():
check_ast('+1')
2015-01-24 20:33:21 -06:00
def test_unary_minus():
check_ast('-1')
2015-01-24 20:33:21 -06:00
def test_unary_invert():
check_ast('~1')
2015-01-24 20:33:21 -06:00
2015-01-24 20:46:05 -06:00
def test_binop_plus():
check_ast('42 + 65')
2015-01-24 20:46:05 -06:00
def test_binop_minus():
check_ast('42 - 65')
2015-01-24 20:46:05 -06:00
def test_binop_times():
check_ast('42 * 65')
2015-01-24 20:46:05 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:54:12 -04:00
def test_binop_matmult():
2016-06-22 18:51:56 -04:00
check_ast('x @ y', False)
2015-09-26 22:54:12 -04:00
2015-01-24 20:46:05 -06:00
def test_binop_div():
check_ast('42 / 65')
2015-01-24 20:46:05 -06:00
def test_binop_mod():
check_ast('42 % 65')
2015-01-24 20:46:05 -06:00
def test_binop_floordiv():
check_ast('42 // 65')
2015-01-24 20:46:05 -06:00
2015-01-24 21:56:22 -06:00
def test_binop_pow():
check_ast('2 ** 2')
2015-01-24 21:56:22 -06:00
2015-01-24 22:19:57 -06:00
def test_plus_pow():
check_ast('42 + 2 ** 2')
2015-01-24 20:46:05 -06:00
2015-01-24 22:19:57 -06:00
def test_plus_plus():
check_ast('42 + 65 + 6')
2015-01-24 20:33:21 -06:00
2015-01-24 22:19:57 -06:00
def test_plus_minus():
check_ast('42 + 65 - 6')
2015-01-24 20:33:21 -06:00
2015-01-24 22:19:57 -06:00
def test_minus_plus():
check_ast('42 - 65 + 6')
2015-01-24 20:33:21 -06:00
2015-01-24 22:19:57 -06:00
def test_minus_minus():
check_ast('42 - 65 - 6')
2015-01-24 22:19:57 -06:00
def test_minus_plus_minus():
check_ast('42 - 65 + 6 - 28')
2015-01-24 22:19:57 -06:00
def test_times_plus():
check_ast('42 * 65 + 6')
2015-01-24 22:19:57 -06:00
def test_plus_times():
check_ast('42 + 65 * 6')
2015-01-24 22:19:57 -06:00
def test_times_times():
check_ast('42 * 65 * 6')
2015-01-24 22:19:57 -06:00
def test_times_div():
check_ast('42 * 65 / 6')
2015-01-24 22:19:57 -06:00
def test_times_div_mod():
check_ast('42 * 65 / 6 % 28')
2015-01-24 22:19:57 -06:00
def test_times_div_mod_floor():
check_ast('42 * 65 / 6 % 28 // 13')
2015-01-24 22:19:57 -06:00
2015-01-24 22:27:36 -06:00
def test_str_str():
check_ast('"hello" \'mom\'')
2015-01-24 22:27:36 -06:00
2016-02-02 00:19:37 -05:00
def test_str_str_str():
check_ast('"hello" \'mom\' "wow"')
2016-02-02 00:19:37 -05:00
2015-01-24 22:27:36 -06:00
def test_str_plus_str():
check_ast('"hello" + \'mom\'')
2015-01-24 22:27:36 -06:00
def test_str_times_int():
check_ast('"hello" * 20')
2015-01-24 22:27:36 -06:00
def test_int_times_str():
check_ast('2*"hello"')
2015-01-24 22:19:57 -06:00
2015-01-24 22:43:01 -06:00
def test_group_plus_times():
check_ast('(42 + 65) * 20')
2015-01-24 22:43:01 -06:00
def test_plus_group_times():
check_ast('42 + (65 * 20)')
2015-01-24 22:43:01 -06:00
def test_group():
check_ast('(42)')
2015-01-24 22:43:01 -06:00
2015-01-24 23:02:15 -06:00
def test_lt():
check_ast('42 < 65')
2015-01-24 23:02:15 -06:00
def test_gt():
check_ast('42 > 65')
2015-01-24 23:02:15 -06:00
def test_eq():
check_ast('42 == 65')
2015-01-24 23:02:15 -06:00
def test_le():
check_ast('42 <= 65')
2015-01-24 23:02:15 -06:00
def test_ge():
check_ast('42 >= 65')
2015-01-24 23:02:15 -06:00
def test_ne():
check_ast('42 != 65')
2015-01-24 23:02:15 -06:00
def test_in():
check_ast('"4" in "65"')
2015-01-24 23:02:15 -06:00
def test_is():
check_ast('42 is 65')
2015-01-24 23:02:15 -06:00
def test_not_in():
check_ast('"4" not in "65"')
2015-01-24 23:02:15 -06:00
def test_is_not():
check_ast('42 is not 65')
2015-01-24 23:02:15 -06:00
def test_lt_lt():
check_ast('42 < 65 < 105')
2015-01-24 23:02:15 -06:00
def test_lt_lt_lt():
check_ast('42 < 65 < 105 < 77')
2015-01-24 23:02:15 -06:00
2015-01-24 23:20:49 -06:00
def test_not():
check_ast('not 0')
2015-01-24 23:20:49 -06:00
def test_or():
check_ast('1 or 0')
2015-01-24 23:20:49 -06:00
def test_or_or():
check_ast('1 or 0 or 42')
2015-01-24 23:20:49 -06:00
def test_and():
check_ast('1 and 0')
2015-01-24 23:20:49 -06:00
def test_and_and():
check_ast('1 and 0 and 2')
2015-01-24 23:20:49 -06:00
def test_and_or():
check_ast('1 and 0 or 2')
2015-01-24 23:20:49 -06:00
def test_or_and():
check_ast('1 or 0 and 2')
2015-01-24 23:20:49 -06:00
2015-01-24 23:54:32 -06:00
def test_group_and_and():
check_ast('(1 and 0) and 2')
2015-01-24 23:54:32 -06:00
def test_group_and_or():
check_ast('(1 and 0) or 2')
2015-01-24 23:54:32 -06:00
2015-01-27 20:49:11 -06:00
def test_if_else_expr():
check_ast('42 if True else 65')
2015-01-27 20:49:11 -06:00
2015-04-02 19:42:38 -05:00
def test_if_else_expr_expr():
check_ast('42+5 if 1 == 2 else 65-5')
2015-01-27 20:49:11 -06:00
2015-01-24 23:54:32 -06:00
def test_str_idx():
check_ast('"hello"[0]')
2015-01-24 23:54:32 -06:00
def test_str_slice():
check_ast('"hello"[0:3]')
2015-01-24 23:54:32 -06:00
def test_str_step():
check_ast('"hello"[0:3:1]')
2015-01-24 23:54:32 -06:00
def test_str_slice_all():
check_ast('"hello"[:]')
2015-01-24 23:54:32 -06:00
def test_str_slice_upper():
check_ast('"hello"[5:]')
2015-01-24 23:54:32 -06:00
def test_str_slice_lower():
check_ast('"hello"[:3]')
2015-01-24 23:54:32 -06:00
def test_str_slice_other():
check_ast('"hello"[::2]')
2015-01-24 23:54:32 -06:00
def test_str_slice_lower_other():
check_ast('"hello"[:3:2]')
2015-01-24 23:54:32 -06:00
def test_str_slice_upper_other():
check_ast('"hello"[3::2]')
2015-01-24 23:54:32 -06:00
2016-03-17 12:27:12 -04:00
def test_str_2slice():
check_ast('"hello"[0:3,0:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_2step():
check_ast('"hello"[0:3:1,0:4:2]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_all():
check_ast('"hello"[:,:]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_upper():
check_ast('"hello"[5:,5:]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_lower():
check_ast('"hello"[:3,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_lowerupper():
check_ast('"hello"[5:,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_other():
check_ast('"hello"[::2,::2]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_lower_other():
check_ast('"hello"[:3:2,:3:2]', False)
2016-03-17 12:27:12 -04:00
def test_str_2slice_upper_other():
check_ast('"hello"[3::2,3::2]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice():
check_ast('"hello"[0:3,0:3,0:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3step():
check_ast('"hello"[0:3:1,0:4:2,1:3:2]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_all():
check_ast('"hello"[:,:,:]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_upper():
check_ast('"hello"[5:,5:,5:]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_lower():
check_ast('"hello"[:3,:3,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_lowerlowerupper():
check_ast('"hello"[:3,:3,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_lowerupperlower():
check_ast('"hello"[:3,5:,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_lowerupperupper():
check_ast('"hello"[:3,5:,5:]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_upperlowerlower():
check_ast('"hello"[5:,5:,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_upperlowerupper():
check_ast('"hello"[5:,:3,5:]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_upperupperlower():
check_ast('"hello"[5:,5:,:3]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_other():
check_ast('"hello"[::2,::2,::2]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_lower_other():
check_ast('"hello"[:3:2,:3:2,:3:2]', False)
2016-03-17 12:27:12 -04:00
def test_str_3slice_upper_other():
check_ast('"hello"[3::2,3::2,3::2]', False)
2016-03-17 12:27:12 -04:00
2016-03-18 12:20:13 -04:00
def test_str_slice_true():
check_ast('"hello"[0:3,True]', False)
2016-03-18 12:20:13 -04:00
def test_str_true_slice():
check_ast('"hello"[True,0:3]', False)
2016-03-18 12:20:13 -04:00
2015-01-25 00:20:47 -06:00
def test_list_empty():
check_ast('[]')
2015-01-25 00:20:47 -06:00
def test_list_one():
check_ast('[1]')
2015-01-25 00:20:47 -06:00
2015-01-25 00:58:25 -06:00
def test_list_one_comma():
check_ast('[1,]')
2015-01-25 00:58:25 -06:00
2015-01-25 01:10:46 -06:00
def test_list_two():
check_ast('[1, 42]')
2015-01-25 01:10:46 -06:00
2015-01-25 02:08:48 -06:00
def test_list_three():
check_ast('[1, 42, 65]')
2015-01-25 02:08:48 -06:00
2015-03-18 21:55:10 -05:00
def test_list_three_comma():
check_ast('[1, 42, 65,]')
2015-01-25 02:08:48 -06:00
2015-03-18 21:55:10 -05:00
def test_list_one_nested():
check_ast('[[1]]')
2015-03-18 21:55:10 -05:00
2015-03-21 19:04:30 -05:00
def test_list_list_four_nested():
check_ast('[[1], [2], [3], [4]]')
2015-03-21 19:04:30 -05:00
def test_list_tuple_three_nested():
check_ast('[(1,), (2,), (3,)]')
2015-03-21 19:04:30 -05:00
def test_list_set_tuple_three_nested():
check_ast('[{(1,)}, {(2,)}, {(3,)}]')
2015-03-21 19:04:30 -05:00
2015-03-18 21:55:10 -05:00
def test_list_tuple_one_nested():
check_ast('[(1,)]')
2015-03-18 21:55:10 -05:00
def test_tuple_tuple_one_nested():
check_ast('((1,),)')
2015-03-18 21:55:10 -05:00
def test_dict_list_one_nested():
check_ast('{1: [2]}')
2015-03-18 21:55:10 -05:00
2015-03-18 23:32:35 -05:00
def test_dict_list_one_nested_comma():
check_ast('{1: [2],}')
2015-03-18 23:32:35 -05:00
def test_dict_tuple_one_nested():
check_ast('{1: (2,)}')
2015-03-18 23:32:35 -05:00
def test_dict_tuple_one_nested_comma():
check_ast('{1: (2,),}')
2015-03-18 23:32:35 -05:00
2015-03-18 23:48:00 -05:00
def test_dict_list_two_nested():
check_ast('{1: [2], 3: [4]}')
2015-03-18 23:48:00 -05:00
def test_set_tuple_one_nested():
check_ast('{(1,)}')
2015-03-18 23:48:00 -05:00
def test_set_tuple_two_nested():
check_ast('{(1,), (2,)}')
2015-03-18 23:48:00 -05:00
2015-01-25 02:08:48 -06:00
def test_tuple_empty():
check_ast('()')
2015-01-25 02:08:48 -06:00
2015-01-25 11:19:11 -06:00
def test_tuple_one_bare():
check_ast('1,')
2015-01-25 02:08:48 -06:00
2015-01-25 11:19:11 -06:00
def test_tuple_two_bare():
check_ast('1, 42')
2015-01-25 11:19:11 -06:00
def test_tuple_three_bare():
check_ast('1, 42, 65')
2015-01-25 11:19:11 -06:00
def test_tuple_three_bare_comma():
check_ast('1, 42, 65,')
2015-01-25 11:19:11 -06:00
2015-01-25 02:08:48 -06:00
def test_tuple_one_comma():
check_ast('(1,)')
2015-01-25 02:08:48 -06:00
2015-01-25 11:19:11 -06:00
def test_tuple_two():
check_ast('(1, 42)')
2015-01-25 11:19:11 -06:00
def test_tuple_three():
check_ast('(1, 42, 65)')
2015-01-25 11:19:11 -06:00
2015-04-02 19:42:38 -05:00
def test_tuple_three_comma():
check_ast('(1, 42, 65,)')
2015-01-25 01:10:46 -06:00
2015-01-25 11:34:40 -06:00
def test_set_one():
check_ast('{42}')
2015-01-25 15:05:38 -06:00
def test_set_one_comma():
check_ast('{42,}')
2015-01-25 15:05:38 -06:00
def test_set_two():
check_ast('{42, 65}')
2015-01-25 15:05:38 -06:00
def test_set_two_comma():
check_ast('{42, 65,}')
2015-01-25 15:05:38 -06:00
def test_set_three():
check_ast('{42, 65, 45}')
2015-01-25 15:05:38 -06:00
2015-01-25 15:35:06 -06:00
def test_dict_empty():
check_ast('{}')
2015-01-25 15:35:06 -06:00
def test_dict_one():
check_ast('{42: 65}')
2015-01-25 15:35:06 -06:00
def test_dict_one_comma():
check_ast('{42: 65,}')
2015-01-25 15:35:06 -06:00
def test_dict_two():
check_ast('{42: 65, 6: 28}')
2015-01-25 15:35:06 -06:00
def test_dict_two_comma():
check_ast('{42: 65, 6: 28,}')
2015-01-25 15:35:06 -06:00
def test_dict_three():
check_ast('{42: 65, 6: 28, 1: 2}')
2015-01-25 15:35:06 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 20:32:26 -04:00
def test_dict_from_dict_two_xy():
2016-06-22 18:51:56 -04:00
check_ast('{"x": 1, **{"y": 2}}')
2015-09-26 20:32:26 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 20:30:44 -04:00
def test_dict_from_dict_two_x_first():
2016-06-22 18:51:56 -04:00
check_ast('{"x": 1, **{"x": 2}}')
2015-09-26 20:30:44 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 20:30:44 -04:00
def test_dict_from_dict_two_x_second():
2016-06-22 18:51:56 -04:00
check_ast('{**{"x": 2}, "x": 1}')
2015-09-26 20:30:44 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:27:36 -04:00
def test_unpack_range_tuple():
2016-06-22 18:51:56 -04:00
check_stmts('*range(4),')
2015-09-26 22:27:36 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:27:36 -04:00
def test_unpack_range_tuple_4():
2016-06-22 18:51:56 -04:00
check_stmts('*range(4), 4')
2015-09-26 22:27:36 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:27:36 -04:00
def test_unpack_range_tuple_parens():
2016-06-22 18:51:56 -04:00
check_ast('(*range(4),)')
2015-09-26 22:27:36 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:27:36 -04:00
def test_unpack_range_tuple_parens_4():
2016-06-22 18:51:56 -04:00
check_ast('(*range(4), 4)')
2015-09-26 22:27:36 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:27:36 -04:00
def test_unpack_range_list():
2016-06-22 18:51:56 -04:00
check_ast('[*range(4)]')
2015-09-26 22:27:36 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 21:27:49 -04:00
def test_unpack_range_list_4():
2016-06-22 18:51:56 -04:00
check_ast('[*range(4), 4]')
2015-09-26 21:13:03 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 21:13:03 -04:00
def test_unpack_range_set():
2016-06-22 18:51:56 -04:00
check_ast('{*range(4)}')
2015-09-26 21:27:49 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 21:27:49 -04:00
def test_unpack_range_set_4():
2016-06-22 18:51:56 -04:00
check_ast('{*range(4), 4}')
2015-09-26 21:13:03 -04:00
2015-01-25 15:59:06 -06:00
def test_true():
check_ast('True')
2015-01-25 15:59:06 -06:00
def test_false():
check_ast('False')
2015-01-25 15:59:06 -06:00
def test_none():
check_ast('None')
2015-01-25 15:59:06 -06:00
def test_elipssis():
check_ast('...')
2015-01-25 15:59:06 -06:00
def test_not_implemented_name():
check_ast('NotImplemented')
2015-01-25 15:59:06 -06:00
2015-01-25 16:23:47 -06:00
def test_genexpr():
check_ast('(x for x in "mom")')
2015-01-25 16:23:47 -06:00
2015-01-25 17:07:10 -06:00
def test_genexpr_if():
check_ast('(x for x in "mom" if True)')
2015-01-25 17:07:10 -06:00
def test_genexpr_if_and():
check_ast('(x for x in "mom" if True and x == "m")')
2015-01-25 17:07:10 -06:00
def test_dbl_genexpr():
check_ast('(x+y for x in "mom" for y in "dad")')
2015-01-25 17:07:10 -06:00
def test_genexpr_if_genexpr():
check_ast('(x+y for x in "mom" if True for y in "dad")')
2015-01-25 16:23:47 -06:00
2015-01-25 17:17:34 -06:00
def test_genexpr_if_genexpr_if():
check_ast('(x+y for x in "mom" if True for y in "dad" if y == "d")')
2015-01-25 17:17:34 -06:00
def test_listcomp():
check_ast('[x for x in "mom"]')
2015-01-25 17:17:34 -06:00
2015-01-25 17:19:36 -06:00
def test_listcomp_if():
check_ast('[x for x in "mom" if True]')
2015-01-25 17:19:36 -06:00
def test_listcomp_if_and():
check_ast('[x for x in "mom" if True and x == "m"]')
2015-01-25 17:19:36 -06:00
def test_dbl_listcomp():
check_ast('[x+y for x in "mom" for y in "dad"]')
2015-01-25 17:19:36 -06:00
def test_listcomp_if_listcomp():
check_ast('[x+y for x in "mom" if True for y in "dad"]')
2015-01-25 17:19:36 -06:00
def test_listcomp_if_listcomp_if():
check_ast('[x+y for x in "mom" if True for y in "dad" if y == "d"]')
2015-01-25 15:59:06 -06:00
2015-01-25 17:25:10 -06:00
def test_setcomp():
check_ast('{x for x in "mom"}')
2015-01-25 15:59:06 -06:00
2015-01-25 17:25:10 -06:00
def test_setcomp_if():
check_ast('{x for x in "mom" if True}')
2015-01-25 17:25:10 -06:00
def test_setcomp_if_and():
check_ast('{x for x in "mom" if True and x == "m"}')
2015-01-25 17:25:10 -06:00
def test_dbl_setcomp():
check_ast('{x+y for x in "mom" for y in "dad"}')
2015-01-25 17:25:10 -06:00
def test_setcomp_if_setcomp():
check_ast('{x+y for x in "mom" if True for y in "dad"}')
2015-01-25 17:25:10 -06:00
def test_setcomp_if_setcomp_if():
check_ast('{x+y for x in "mom" if True for y in "dad" if y == "d"}')
2015-01-25 15:59:06 -06:00
2015-01-25 17:30:43 -06:00
def test_dictcomp():
check_ast('{x: x for x in "mom"}')
2015-01-25 17:30:43 -06:00
2015-04-16 19:07:24 -05:00
def test_dictcomp_unpack_parens():
check_ast('{k: v for (k, v) in {"x": 42}.items()}')
2015-04-16 19:07:24 -05:00
def test_dictcomp_unpack_no_parens():
check_ast('{k: v for k, v in {"x": 42}.items()}')
2015-04-16 19:07:24 -05:00
2015-01-25 17:30:43 -06:00
def test_dictcomp_if():
check_ast('{x: x for x in "mom" if True}')
2015-01-25 17:30:43 -06:00
def test_dictcomp_if_and():
check_ast('{x: x for x in "mom" if True and x == "m"}')
2015-01-25 17:30:43 -06:00
def test_dbl_dictcomp():
check_ast('{x: y for x in "mom" for y in "dad"}')
2015-01-25 17:30:43 -06:00
def test_dictcomp_if_dictcomp():
check_ast('{x: y for x in "mom" if True for y in "dad"}')
2015-01-25 17:30:43 -06:00
def test_dictcomp_if_dictcomp_if():
check_ast('{x: y for x in "mom" if True for y in "dad" if y == "d"}')
2015-01-25 17:30:43 -06:00
2015-01-27 21:52:47 -06:00
def test_lambda():
check_ast('lambda: 42')
2015-01-27 21:52:47 -06:00
def test_lambda_x():
check_ast('lambda x: x')
2015-01-27 21:52:47 -06:00
def test_lambda_kwx():
check_ast('lambda x=42: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_y():
check_ast('lambda x, y: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_y_z():
check_ast('lambda x, y, z: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_kwy():
check_ast('lambda x, y=42: x')
2015-01-27 21:52:47 -06:00
def test_lambda_kwx_kwy():
check_ast('lambda x=65, y=42: x')
2015-01-27 21:52:47 -06:00
def test_lambda_kwx_kwy_kwz():
check_ast('lambda x=65, y=42, z=1: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_comma():
check_ast('lambda x,: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_y_comma():
check_ast('lambda x, y,: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_y_z_comma():
check_ast('lambda x, y, z,: x')
2015-01-27 21:52:47 -06:00
def test_lambda_x_kwy_comma():
check_ast('lambda x, y=42,: x')
2015-01-27 21:52:47 -06:00
def test_lambda_kwx_kwy_comma():
check_ast('lambda x=65, y=42,: x')
2015-01-27 21:52:47 -06:00
def test_lambda_kwx_kwy_kwz_comma():
check_ast('lambda x=65, y=42, z=1,: x')
2015-01-27 21:52:47 -06:00
2015-01-27 22:19:27 -06:00
def test_lambda_args():
check_ast('lambda *args: 42')
2015-01-27 22:19:27 -06:00
def test_lambda_args_x():
check_ast('lambda *args, x: 42')
2015-01-27 22:19:27 -06:00
def test_lambda_args_x_y():
check_ast('lambda *args, x, y: 42')
2015-01-27 22:19:27 -06:00
def test_lambda_args_x_kwy():
check_ast('lambda *args, x, y=10: 42')
2015-01-27 22:19:27 -06:00
def test_lambda_args_kwx_y():
check_ast('lambda *args, x=10, y: 42')
2015-01-27 22:19:27 -06:00
def test_lambda_args_kwx_kwy():
check_ast('lambda *args, x=42, y=65: 42')
2015-01-27 22:19:27 -06:00
2015-01-27 22:44:58 -06:00
def test_lambda_x_args():
check_ast('lambda x, *args: 42')
2015-01-27 22:44:58 -06:00
2015-01-27 22:50:29 -06:00
def test_lambda_x_args_y():
check_ast('lambda x, *args, y: 42')
2015-01-27 22:50:29 -06:00
def test_lambda_x_args_y_z():
check_ast('lambda x, *args, y, z: 42')
2015-01-27 22:50:29 -06:00
def test_lambda_kwargs():
check_ast('lambda **kwargs: 42')
2015-01-27 22:50:29 -06:00
2015-01-27 23:40:19 -06:00
def test_lambda_x_kwargs():
check_ast('lambda x, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_y_kwargs():
check_ast('lambda x, y, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_kwy_kwargs():
check_ast('lambda x, y=42, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_args_kwargs():
check_ast('lambda *args, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_args_kwargs():
check_ast('lambda x, *args, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_y_args_kwargs():
check_ast('lambda x, y, *args, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_kwx_args_kwargs():
check_ast('lambda x=10, *args, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_kwy_args_kwargs():
check_ast('lambda x, y=42, *args, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_args_y_kwargs():
check_ast('lambda x, *args, y, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_x_args_kwy_kwargs():
check_ast('lambda x, *args, y=42, **kwargs: 42')
2015-01-27 23:40:19 -06:00
def test_lambda_args_y_kwargs():
check_ast('lambda *args, y, **kwargs: 42')
2015-01-27 23:40:19 -06:00
2015-01-27 23:52:35 -06:00
def test_lambda_star_x():
check_ast('lambda *, x: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_star_x_y():
check_ast('lambda *, x, y: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_star_x_kwargs():
check_ast('lambda *, x, **kwargs: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_star_kwx_kwargs():
check_ast('lambda *, x=42, **kwargs: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_x_star_y():
check_ast('lambda x, *, y: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_x_y_star_z():
check_ast('lambda x, y, *, z: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_x_kwy_star_y():
check_ast('lambda x, y=42, *, z: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_x_kwy_star_kwy():
check_ast('lambda x, y=42, *, z=65: 42')
2015-01-27 23:52:35 -06:00
def test_lambda_x_star_y_kwargs():
check_ast('lambda x, *, y, **kwargs: 42')
2015-01-27 23:52:35 -06:00
2015-01-28 01:17:25 -06:00
def test_call_range():
check_ast('range(6)')
2015-01-27 23:52:35 -06:00
2015-01-28 01:17:25 -06:00
def test_call_range_comma():
check_ast('range(6,)')
2015-01-27 23:52:35 -06:00
2015-01-28 01:17:25 -06:00
def test_call_range_x_y():
check_ast('range(6, 10)')
2015-01-27 23:52:35 -06:00
2015-01-28 01:17:25 -06:00
def test_call_range_x_y_comma():
check_ast('range(6, 10,)')
2015-01-28 01:17:25 -06:00
def test_call_range_x_y_z():
check_ast('range(6, 10, 2)')
2015-01-28 01:17:25 -06:00
def test_call_dict_kwx():
check_ast('dict(start=10)')
2015-01-28 01:17:25 -06:00
def test_call_dict_kwx_comma():
check_ast('dict(start=10,)')
2015-01-28 01:17:25 -06:00
def test_call_dict_kwx_kwy():
check_ast('dict(start=10, stop=42)')
2015-01-28 01:17:25 -06:00
def test_call_tuple_gen():
check_ast('tuple(x for x in [1, 2, 3])')
2015-01-28 01:17:25 -06:00
def test_call_tuple_genifs():
check_ast('tuple(x for x in [1, 2, 3] if x < 3)')
2015-01-27 23:40:19 -06:00
2015-01-28 01:45:29 -06:00
def test_call_range_star():
check_ast('range(*[1, 2, 3])')
2015-01-28 01:45:29 -06:00
def test_call_range_x_star():
check_ast('range(1, *[2, 3])')
2015-01-28 01:45:29 -06:00
def test_call_int():
check_ast('int(*["42"], base=8)')
2015-01-28 01:45:29 -06:00
2015-01-28 23:44:55 -06:00
def test_call_int_base_dict():
check_ast('int(*["42"], **{"base": 8})')
2015-01-28 23:44:55 -06:00
def test_call_dict_kwargs():
check_ast('dict(**{"base": 8})')
2015-01-28 23:44:55 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
def test_call_list_many_star_args():
check_ast('min(*[1, 2], 3, *[4, 5])')
2015-09-24 19:27:19 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
def test_call_list_many_starstar_args():
check_ast('dict(**{"a": 2}, v=3, **{"c": 5})')
2015-09-24 19:27:19 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
def test_call_list_many_star_and_starstar_args():
check_ast('x(*[("a", 2)], *[("v", 3)], **{"c": 5})', False)
2015-09-24 19:27:19 -04:00
2015-01-28 23:44:55 -06:00
def test_call_alot():
check_ast('x(1, *args, **kwargs)', False)
2015-01-28 23:44:55 -06:00
def test_call_alot_next():
check_ast('x(x=1, *args, **kwargs)', False)
2015-01-28 23:44:55 -06:00
def test_call_alot_next_next():
check_ast('x(x=1, *args, y=42, **kwargs)', False)
2015-01-28 23:44:55 -06:00
2015-01-29 00:06:05 -06:00
def test_getattr():
check_ast('list.append')
2015-01-29 00:06:05 -06:00
def test_getattr_getattr():
check_ast('list.append.__str__')
2015-01-29 00:06:05 -06:00
2015-01-30 21:26:56 -06:00
def test_dict_tuple_key():
check_ast('{(42, 1): 65}')
2015-01-30 21:26:56 -06:00
def test_dict_tuple_key_get():
check_ast('{(42, 1): 65}[42, 1]')
2015-01-30 21:26:56 -06:00
def test_dict_tuple_key_get_3():
check_ast('{(42, 1, 3): 65}[42, 1, 3]')
2015-01-28 01:45:29 -06:00
2015-01-31 13:52:49 -06:00
def test_pipe_op():
check_ast('{42} | {65}')
2015-01-31 13:52:49 -06:00
def test_pipe_op_two():
check_ast('{42} | {65} | {1}')
2015-01-27 23:40:19 -06:00
2015-01-31 13:54:03 -06:00
def test_pipe_op_three():
check_ast('{42} | {65} | {1} | {7}')
2015-01-31 13:54:03 -06:00
2015-01-31 14:06:20 -06:00
def test_xor_op():
check_ast('{42} ^ {65}')
2015-01-31 14:06:20 -06:00
def test_xor_op_two():
check_ast('{42} ^ {65} ^ {1}')
2015-01-31 14:06:20 -06:00
def test_xor_op_three():
check_ast('{42} ^ {65} ^ {1} ^ {7}')
2015-01-31 14:06:20 -06:00
def test_xor_pipe():
check_ast('{42} ^ {65} | {1}')
2015-01-31 14:06:20 -06:00
def test_amp_op():
check_ast('{42} & {65}')
2015-01-31 14:06:20 -06:00
def test_amp_op_two():
check_ast('{42} & {65} & {1}')
2015-01-31 14:06:20 -06:00
def test_amp_op_three():
check_ast('{42} & {65} & {1} & {7}')
2015-01-31 14:06:20 -06:00
def test_lshift_op():
check_ast('42 << 65')
2015-01-31 14:06:20 -06:00
def test_lshift_op_two():
check_ast('42 << 65 << 1')
2015-01-31 14:06:20 -06:00
def test_lshift_op_three():
check_ast('42 << 65 << 1 << 7')
2015-01-31 14:06:20 -06:00
def test_rshift_op():
check_ast('42 >> 65')
2015-01-31 14:06:20 -06:00
def test_rshift_op_two():
check_ast('42 >> 65 >> 1')
2015-01-31 14:06:20 -06:00
def test_rshift_op_three():
check_ast('42 >> 65 >> 1 >> 7')
2015-01-31 14:06:20 -06:00
2015-01-27 21:52:47 -06:00
#
# statements
#
2015-01-25 18:22:43 -06:00
def test_equals():
check_stmts('x = 42')
2015-01-25 18:22:43 -06:00
2015-01-25 18:34:30 -06:00
def test_equals_semi():
check_stmts('x = 42;')
2015-01-25 18:34:30 -06:00
2015-03-26 00:51:31 -05:00
def test_x_y_equals_semi():
check_stmts('x = y = 42')
2015-03-26 00:51:31 -05:00
2015-01-25 18:34:30 -06:00
def test_equals_two():
check_stmts('x = 42; y = 65')
2015-01-25 18:34:30 -06:00
def test_equals_two_semi():
check_stmts('x = 42; y = 65;')
2015-01-25 18:34:30 -06:00
def test_equals_three():
check_stmts('x = 42; y = 65; z = 6')
2015-01-25 18:34:30 -06:00
def test_equals_three_semi():
check_stmts('x = 42; y = 65; z = 6;')
2015-01-25 18:34:30 -06:00
2015-01-25 18:55:33 -06:00
def test_plus_eq():
check_stmts('x = 42; x += 65')
2015-01-25 18:55:33 -06:00
def test_sub_eq():
check_stmts('x = 42; x -= 2')
2015-01-25 18:55:33 -06:00
def test_times_eq():
check_stmts('x = 42; x *= 2')
2015-01-25 18:55:33 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 22:54:12 -04:00
def test_matmult_eq():
2016-06-22 18:51:56 -04:00
check_stmts('x @= y', False)
2015-09-26 22:54:12 -04:00
2015-01-25 18:55:33 -06:00
def test_div_eq():
check_stmts('x = 42; x /= 2')
2015-01-25 18:55:33 -06:00
def test_floordiv_eq():
check_stmts('x = 42; x //= 2')
2015-01-25 18:55:33 -06:00
def test_pow_eq():
check_stmts('x = 42; x **= 2')
2015-01-25 18:55:33 -06:00
def test_mod_eq():
check_stmts('x = 42; x %= 2')
2015-01-25 18:55:33 -06:00
def test_xor_eq():
check_stmts('x = 42; x ^= 2')
2015-01-25 18:55:33 -06:00
def test_ampersand_eq():
check_stmts('x = 42; x &= 2')
2015-01-25 18:55:33 -06:00
def test_bitor_eq():
check_stmts('x = 42; x |= 2')
2015-01-25 18:55:33 -06:00
def test_lshift_eq():
check_stmts('x = 42; x <<= 2')
2015-01-25 18:55:33 -06:00
def test_rshift_eq():
check_stmts('x = 42; x >>= 2')
2015-01-25 18:55:33 -06:00
2015-03-25 23:53:15 -05:00
def test_bare_unpack():
check_stmts('x, y = 42, 65')
2015-03-25 23:53:15 -05:00
def test_lhand_group_unpack():
check_stmts('(x, y) = 42, 65')
2015-03-25 23:53:15 -05:00
def test_rhand_group_unpack():
check_stmts('x, y = (42, 65)')
2015-03-25 23:53:15 -05:00
def test_grouped_unpack():
check_stmts('(x, y) = (42, 65)')
2015-03-25 23:53:15 -05:00
2015-03-26 00:51:31 -05:00
def test_double_grouped_unpack():
check_stmts('(x, y) = (z, a) = (7, 8)')
2015-03-26 00:51:31 -05:00
def test_double_ungrouped_unpack():
check_stmts('x, y = z, a = 7, 8')
2015-03-26 00:51:31 -05:00
2015-01-30 22:52:26 -06:00
def test_stary_eq():
check_stmts('*y, = [1, 2, 3]')
2015-01-25 15:35:06 -06:00
2015-01-30 22:52:26 -06:00
def test_stary_x():
check_stmts('*y, x = [1, 2, 3]')
2015-07-29 23:58:25 +02:00
2015-01-31 00:49:53 -06:00
def test_tuple_x_stary():
check_stmts('(x, *y) = [1, 2, 3]')
2015-07-29 23:58:25 +02:00
2015-01-31 00:49:53 -06:00
def test_list_x_stary():
check_stmts('[x, *y] = [1, 2, 3]')
2015-01-31 00:49:53 -06:00
2015-01-31 11:34:18 -06:00
def test_bare_x_stary():
check_stmts('x, *y = [1, 2, 3]')
2015-01-31 11:34:18 -06:00
2015-01-31 11:43:15 -06:00
def test_bare_x_stary_z():
check_stmts('x, *y, z = [1, 2, 2, 3]')
2015-01-31 11:43:15 -06:00
2015-01-31 17:15:54 -06:00
def test_equals_list():
check_stmts('x = [42]; x[0] = 65')
2015-01-31 17:15:54 -06:00
def test_equals_dict():
check_stmts('x = {42: 65}; x[42] = 3')
2015-01-31 17:15:54 -06:00
def test_equals_attr():
check_stmts('class X(object):\n pass\nx = X()\nx.a = 65')
2015-01-31 17:15:54 -06:00
def test_dict_keys():
check_stmts('x = {"x": 1}\nx.keys()')
2015-01-25 19:04:50 -06:00
def test_assert_msg():
check_stmts('assert True, "wow mom"')
2015-01-25 15:35:06 -06:00
2015-01-25 19:18:24 -06:00
def test_assert():
check_stmts('assert True')
2015-01-25 19:18:24 -06:00
def test_pass():
check_stmts('pass')
2015-01-25 19:18:24 -06:00
def test_del():
check_stmts('x = 42; del x')
2015-01-25 19:18:24 -06:00
2015-01-25 19:34:31 -06:00
def test_del_comma():
check_stmts('x = 42; del x,')
2015-01-25 19:34:31 -06:00
def test_del_two():
check_stmts('x = 42; y = 65; del x, y')
2015-01-25 19:34:31 -06:00
def test_del_two_comma():
check_stmts('x = 42; y = 65; del x, y,')
2015-01-25 19:34:31 -06:00
2015-01-25 19:43:23 -06:00
def test_raise():
check_stmts('raise', False)
2015-07-29 23:58:25 +02:00
2015-01-26 01:42:23 -06:00
def test_raise_x():
check_stmts('raise TypeError', False)
2015-07-29 23:58:25 +02:00
2015-01-26 01:42:23 -06:00
def test_raise_x_from():
check_stmts('raise TypeError from x', False)
2015-01-26 02:33:51 -06:00
def test_import_x():
check_stmts('import x', False)
2015-01-26 02:33:51 -06:00
def test_import_xy():
check_stmts('import x.y', False)
2015-01-26 02:33:51 -06:00
def test_import_xyz():
check_stmts('import x.y.z', False)
2015-01-26 02:33:51 -06:00
def test_from_x_import_y():
check_stmts('from x import y', False)
2015-07-29 23:58:25 +02:00
2015-01-26 02:33:51 -06:00
def test_from_dot_import_y():
check_stmts('from . import y', False)
2015-07-29 23:58:25 +02:00
2015-01-26 02:33:51 -06:00
def test_from_dotx_import_y():
check_stmts('from .x import y', False)
2015-07-29 23:58:25 +02:00
2015-01-26 02:33:51 -06:00
def test_from_dotdotx_import_y():
check_stmts('from ..x import y', False)
2015-01-26 02:33:51 -06:00
def test_from_dotdotdotx_import_y():
check_stmts('from ...x import y', False)
2015-01-26 02:33:51 -06:00
def test_from_dotdotdotdotx_import_y():
check_stmts('from ....x import y', False)
2015-01-26 02:33:51 -06:00
def test_from_import_x_y():
check_stmts('import x, y', False)
2015-01-26 02:33:51 -06:00
def test_from_import_x_y_z():
check_stmts('import x, y, z', False)
2015-01-26 02:33:51 -06:00
def test_from_dot_import_x_y():
check_stmts('from . import x, y', False)
2015-07-29 23:58:25 +02:00
2015-01-26 02:33:51 -06:00
def test_from_dot_import_x_y_z():
check_stmts('from . import x, y, z', False)
2015-01-26 02:33:51 -06:00
def test_from_dot_import_group_x_y():
check_stmts('from . import (x, y)', False)
2015-01-26 02:33:51 -06:00
def test_import_x_as_y():
check_stmts('import x as y', False)
2015-01-26 02:33:51 -06:00
def test_import_xy_as_z():
check_stmts('import x.y as z', False)
2015-01-26 02:33:51 -06:00
def test_import_x_y_as_z():
check_stmts('import x, y as z', False)
2015-01-26 02:33:51 -06:00
def test_import_x_as_y_z():
check_stmts('import x as y, z', False)
2015-01-26 02:33:51 -06:00
def test_import_x_as_y_z_as_a():
check_stmts('import x as y, z as a', False)
2015-01-26 02:33:51 -06:00
def test_from_dot_import_x_as_y():
check_stmts('from . import x as y', False)
2015-01-26 02:33:51 -06:00
2015-03-28 09:12:10 -05:00
def test_from_x_import_star():
check_stmts('from x import *', False)
2015-03-28 09:12:10 -05:00
2015-01-26 02:33:51 -06:00
def test_from_x_import_y_as_z():
check_stmts('from x import y as z', False)
2015-01-26 02:33:51 -06:00
def test_from_x_import_y_as_z_a_as_b():
check_stmts('from x import y as z, a as b', False)
2015-01-26 02:33:51 -06:00
def test_from_dotx_import_y_as_z_a_as_b_c_as_d():
check_stmts('from .x import y as z, a as b, c as d', False)
2015-01-26 02:33:51 -06:00
2015-01-26 21:43:20 -06:00
def test_continue():
check_stmts('continue', False)
2015-01-26 21:43:20 -06:00
def test_break():
check_stmts('break', False)
2015-01-26 21:43:20 -06:00
2015-01-29 00:14:16 -06:00
def test_global():
check_stmts('global x', False)
2015-01-29 00:14:16 -06:00
def test_global_xy():
check_stmts('global x, y', False)
2015-01-29 00:14:16 -06:00
def test_nonlocal_x():
check_stmts('nonlocal x', False)
2015-01-29 00:14:16 -06:00
def test_nonlocal_xy():
check_stmts('nonlocal x, y', False)
2015-01-29 00:14:16 -06:00
2015-01-26 21:43:20 -06:00
def test_yield():
check_stmts('yield', False)
2015-01-26 21:43:20 -06:00
def test_yield_x():
check_stmts('yield x', False)
2015-01-26 21:43:20 -06:00
def test_yield_x_comma():
check_stmts('yield x,', False)
2015-01-26 21:43:20 -06:00
def test_yield_x_y():
check_stmts('yield x, y', False)
2015-01-26 21:43:20 -06:00
def test_yield_from_x():
check_stmts('yield from x', False)
2015-01-26 21:43:20 -06:00
2015-01-26 21:49:04 -06:00
def test_return():
check_stmts('return', False)
2015-01-26 21:49:04 -06:00
def test_return_x():
check_stmts('return x', False)
2015-01-26 21:49:04 -06:00
def test_return_x_comma():
check_stmts('return x,', False)
2015-01-26 21:49:04 -06:00
def test_return_x_y():
check_stmts('return x, y', False)
2015-01-26 21:49:04 -06:00
2015-01-29 20:26:43 -06:00
def test_if_true():
check_stmts('if True:\n pass')
2015-01-26 21:43:20 -06:00
2015-01-29 21:48:29 -06:00
def test_if_true_twolines():
check_stmts('if True:\n pass\n pass')
2015-01-29 21:48:29 -06:00
2015-01-29 21:51:41 -06:00
def test_if_true_twolines_deindent():
check_stmts('if True:\n pass\n pass\npass')
2015-01-29 21:51:41 -06:00
2015-01-30 01:37:08 -06:00
def test_if_true_else():
check_stmts('if True:\n pass\nelse: \n pass')
2015-01-30 01:37:08 -06:00
def test_if_true_x():
check_stmts('if True:\n x = 42')
2015-01-30 01:37:08 -06:00
def test_if_switch():
check_stmts('x = 42\nif x == 1:\n pass')
2015-01-30 01:37:08 -06:00
def test_if_switch_elif1_else():
check_stmts('x = 42\nif x == 1:\n pass\n'
'elif x == 2:\n pass\nelse:\n pass')
2015-01-30 01:37:08 -06:00
def test_if_switch_elif2_else():
check_stmts('x = 42\nif x == 1:\n pass\n'
'elif x == 2:\n pass\n'
'elif x == 3:\n pass\n'
'elif x == 4:\n pass\n'
'else:\n pass')
2015-01-30 01:37:08 -06:00
2015-01-30 02:15:18 -06:00
def test_if_nested():
check_stmts('x = 42\nif x == 1:\n pass\n if x == 4:\n pass')
2015-01-30 01:37:08 -06:00
2015-01-30 02:15:18 -06:00
def test_while():
check_stmts('while False:\n pass')
2015-01-30 01:37:08 -06:00
2015-01-30 02:16:47 -06:00
def test_while_else():
check_stmts('while False:\n pass\nelse:\n pass')
2015-01-30 02:16:47 -06:00
2015-01-30 18:41:51 -06:00
def test_for():
check_stmts('for x in range(6):\n pass')
2015-01-30 18:41:51 -06:00
def test_for_zip():
check_stmts('for x, y in zip(range(6), "123456"):\n pass')
2015-01-30 18:41:51 -06:00
def test_for_idx():
check_stmts('x = [42]\nfor x[0] in range(3):\n pass')
2015-01-30 18:41:51 -06:00
def test_for_zip_idx():
check_stmts('x = [42]\nfor x[0], y in zip(range(6), "123456"):\n'
' pass')
2015-01-30 18:41:51 -06:00
def test_for_attr():
check_stmts('for x.a in range(3):\n pass', False)
2015-01-30 18:41:51 -06:00
def test_for_zip_attr():
check_stmts('for x.a, y in zip(range(6), "123456"):\n pass', False)
2015-01-30 18:41:51 -06:00
def test_for_else():
check_stmts('for x in range(6):\n pass\nelse: pass')
2015-01-30 01:37:08 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-27 00:30:49 -04:00
def test_async_for():
2016-06-22 18:51:56 -04:00
check_stmts("async def f():\n async for x in y:\n pass\n", False)
2015-09-27 00:30:49 -04:00
2015-01-30 18:55:12 -06:00
def test_with():
check_stmts('with x:\n pass', False)
2015-01-30 18:55:12 -06:00
def test_with_as():
check_stmts('with x as y:\n pass', False)
2015-01-30 18:55:12 -06:00
def test_with_xy():
check_stmts('with x, y:\n pass', False)
2015-01-30 18:55:12 -06:00
def test_with_x_as_y_z():
check_stmts('with x as y, z:\n pass', False)
2015-01-30 18:55:12 -06:00
def test_with_x_as_y_a_as_b():
check_stmts('with x as y, a as b:\n pass', False)
2015-01-30 18:55:12 -06:00
2016-02-02 21:19:56 -05:00
def test_with_in_func():
check_stmts("def f():\n with x:\n pass\n")
2016-02-02 21:19:56 -05:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-27 00:24:40 -04:00
def test_async_with():
2016-06-22 18:51:56 -04:00
check_stmts("async def f():\n async with x as y:\n pass\n", False)
2015-09-27 00:24:40 -04:00
2015-01-30 19:09:02 -06:00
def test_try():
check_stmts('try:\n pass\nexcept:\n pass', False)
2015-01-30 19:09:02 -06:00
2015-01-30 19:19:44 -06:00
def test_try_except_t():
check_stmts('try:\n pass\nexcept TypeError:\n pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_t_as_e():
check_stmts('try:\n pass\nexcept TypeError as e:\n pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_t_u():
check_stmts('try:\n pass\nexcept (TypeError, SyntaxError):\n pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_t_u_as_e():
check_stmts('try:\n pass\nexcept (TypeError, SyntaxError) as e:\n pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_t_except_u():
check_stmts('try:\n pass\nexcept TypeError:\n pass\n'
'except SyntaxError as f:\n pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_else():
check_stmts('try:\n pass\nexcept:\n pass\nelse: pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_finally():
check_stmts('try:\n pass\nexcept:\n pass\nfinally: pass', False)
2015-01-30 19:19:44 -06:00
def test_try_except_else_finally():
check_stmts('try:\n pass\nexcept:\n pass\nelse:\n pass'
'\nfinally: pass', False)
2015-01-30 19:19:44 -06:00
def test_try_finally():
check_stmts('try:\n pass\nfinally: pass', False)
2015-01-30 19:19:44 -06:00
2015-01-30 19:33:02 -06:00
def test_func():
check_stmts('def f():\n pass')
2015-01-30 19:33:02 -06:00
def test_func_ret():
check_stmts('def f():\n return')
2015-01-30 19:33:02 -06:00
def test_func_ret_42():
check_stmts('def f():\n return 42')
2015-01-30 19:33:02 -06:00
def test_func_ret_42_65():
check_stmts('def f():\n return 42, 65')
2015-01-30 19:33:02 -06:00
def test_func_rarrow():
check_stmts('def f() -> int:\n pass')
2015-01-30 19:33:02 -06:00
2015-01-30 20:06:51 -06:00
def test_func_x():
check_stmts('def f(x):\n return x')
2015-01-30 19:19:44 -06:00
2015-01-30 20:06:51 -06:00
def test_func_kwx():
check_stmts('def f(x=42):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_y():
check_stmts('def f(x, y):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_y_z():
check_stmts('def f(x, y, z):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy():
check_stmts('def f(x, y=42):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_kwx_kwy():
check_stmts('def f(x=65, y=42):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_kwx_kwy_kwz():
check_stmts('def f(x=65, y=42, z=1):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_comma():
check_stmts('def f(x,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_y_comma():
check_stmts('def f(x, y,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_y_z_comma():
check_stmts('def f(x, y, z,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy_comma():
check_stmts('def f(x, y=42,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_kwx_kwy_comma():
check_stmts('def f(x=65, y=42,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_kwx_kwy_kwz_comma():
check_stmts('def f(x=65, y=42, z=1,):\n return x')
2015-01-30 20:06:51 -06:00
def test_func_args():
check_stmts('def f(*args):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_x():
check_stmts('def f(*args, x):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_x_y():
check_stmts('def f(*args, x, y):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_x_kwy():
check_stmts('def f(*args, x, y=10):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_kwx_y():
check_stmts('def f(*args, x=10, y):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_kwx_kwy():
check_stmts('def f(*args, x=42, y=65):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args():
check_stmts('def f(x, *args):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args_y():
check_stmts('def f(x, *args, y):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args_y_z():
check_stmts('def f(x, *args, y, z):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_kwargs():
check_stmts('def f(**kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_kwargs():
check_stmts('def f(x, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_y_kwargs():
check_stmts('def f(x, y, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy_kwargs():
check_stmts('def f(x, y=42, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_kwargs():
check_stmts('def f(*args, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args_kwargs():
check_stmts('def f(x, *args, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_y_args_kwargs():
check_stmts('def f(x, y, *args, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_kwx_args_kwargs():
check_stmts('def f(x=10, *args, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy_args_kwargs():
check_stmts('def f(x, y=42, *args, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args_y_kwargs():
check_stmts('def f(x, *args, y, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_args_kwy_kwargs():
check_stmts('def f(x, *args, y=42, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_args_y_kwargs():
check_stmts('def f(*args, y, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_star_x():
check_stmts('def f(*, x):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_star_x_y():
check_stmts('def f(*, x, y):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_star_x_kwargs():
check_stmts('def f(*, x, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_star_kwx_kwargs():
check_stmts('def f(*, x=42, **kwargs):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_star_y():
check_stmts('def f(x, *, y):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_y_star_z():
check_stmts('def f(x, y, *, z):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy_star_y():
check_stmts('def f(x, y=42, *, z):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_kwy_star_kwy():
check_stmts('def f(x, y=42, *, z=65):\n return 42')
2015-01-30 20:06:51 -06:00
def test_func_x_star_y_kwargs():
check_stmts('def f(x, *, y, **kwargs):\n return 42')
2015-01-30 20:10:31 -06:00
2015-01-30 20:12:17 -06:00
def test_func_tx():
check_stmts('def f(x:int):\n return x')
2015-01-30 20:12:17 -06:00
def test_func_txy():
check_stmts('def f(x:int, y:float=10.0):\n return x')
2015-01-30 20:12:17 -06:00
2015-01-30 20:30:45 -06:00
def test_class():
check_stmts('class X:\n pass')
2015-01-30 20:30:45 -06:00
def test_class_obj():
check_stmts('class X(object):\n pass')
2015-01-30 20:30:45 -06:00
def test_class_int_flt():
check_stmts('class X(int, object):\n pass')
2015-01-30 20:30:45 -06:00
2015-04-02 19:42:38 -05:00
def test_class_obj_kw():
2015-01-30 20:30:45 -06:00
# technically valid syntax, though it will fail to compile
check_stmts('class X(object=5):\n pass', False)
2015-01-30 20:30:45 -06:00
2015-01-30 21:12:50 -06:00
def test_decorator():
check_stmts('@g\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
def test_decorator_2():
check_stmts('@h\n@g\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
def test_decorator_call():
check_stmts('@g()\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
def test_decorator_call_args():
check_stmts('@g(x, y=10)\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
def test_decorator_dot_call_args():
check_stmts('@h.g(x, y=10)\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
def test_decorator_dot_dot_call_args():
check_stmts('@i.h.g(x, y=10)\ndef f():\n pass', False)
2015-01-30 21:12:50 -06:00
2015-03-10 21:38:11 -05:00
def test_broken_prompt_func():
code = ('def prompt():\n'
" return '{user}'.format(\n"
" user='me')\n")
check_stmts(code, False)
2015-03-10 21:38:11 -05:00
2015-04-02 19:42:38 -05:00
def test_class_with_methods():
code = ('class Test:\n'
' def __init__(self):\n'
' self.msg("hello world")\n'
' def msg(self, m):\n'
' print(m)\n')
check_stmts(code, False)
def test_nested_functions():
code = ('def test(x):\n'
' def test2(y):\n'
' return y+x\n'
' return test2\n')
check_stmts(code, False)
def test_function_blank_line():
code = ('def foo():\n'
' ascii_art = [\n'
' "(╯°□°)╯︵ ┻━┻",\n'
2015-03-26 01:36:56 -05:00
' "¯\\_(ツ)_/¯",\n'
' "┻━┻︵ \\(°□°)/ ︵ ┻━┻",\n'
' ]\n'
'\n'
' import random\n'
' i = random.randint(0,len(ascii_art)) - 1\n'
' print(" Get to work!")\n'
' print(ascii_art[i])\n')
check_stmts(code, False)
2015-01-30 01:37:08 -06:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 23:52:31 -04:00
def test_async_func():
2016-06-22 18:51:56 -04:00
check_stmts('async def f():\n pass\n')
2015-09-26 23:52:31 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-26 23:52:31 -04:00
def test_async_decorator():
2016-06-22 18:51:56 -04:00
check_stmts('@g\nasync def f():\n pass', False)
2015-09-26 23:52:31 -04:00
2016-06-23 14:46:15 +02:00
@skip_if_py34
2015-09-27 01:09:28 -04:00
def test_async_await():
2016-06-22 18:51:56 -04:00
check_stmts("async def f():\n await fut\n", False)
2015-09-27 01:09:28 -04:00
2015-01-31 18:24:12 -06:00
#
# Xonsh specific syntax
#
2016-07-01 12:43:32 +03:00
def test_dollar_name():
check_xonsh_ast({'WAKKA': 42}, '$WAKKA')
2015-01-31 18:37:17 -06:00
2016-07-01 12:43:32 +03:00
def test_dollar_py():
check_xonsh({'WAKKA': 42}, 'x = "WAKKA"; y = ${x}')
2015-01-31 18:37:17 -06:00
2016-07-01 12:43:32 +03:00
def test_dollar_py_test():
check_xonsh_ast({'WAKKA': 42}, '${None or "WAKKA"}')
2015-01-31 18:37:17 -06:00
2016-07-01 12:43:32 +03:00
def test_dollar_py_recursive_name():
check_xonsh_ast({'WAKKA': 42, 'JAWAKA': 'WAKKA'}, '${$JAWAKA}')
2015-01-31 18:37:17 -06:00
2016-07-01 12:43:32 +03:00
def test_dollar_py_test_recursive_name():
check_xonsh_ast({'WAKKA': 42, 'JAWAKA': 'WAKKA'}, '${None or $JAWAKA}')
2015-01-31 18:37:17 -06:00
2016-07-01 12:43:32 +03:00
def test_dollar_py_test_recursive_test():
check_xonsh_ast({'WAKKA': 42, 'JAWAKA': 'WAKKA'},
'${${"JAWA" + $JAWAKA[-2:]}}')
2015-01-31 18:24:12 -06:00
2015-01-31 18:41:56 -06:00
def test_dollar_name_set():
check_xonsh({'WAKKA': 42}, '$WAKKA = 42')
2015-01-31 18:41:56 -06:00
def test_dollar_py_set():
check_xonsh({'WAKKA': 42}, 'x = "WAKKA"; ${x} = 65')
2015-01-31 18:41:56 -06:00
2015-01-31 19:13:08 -06:00
def test_dollar_sub():
check_xonsh_ast({}, '$(ls)', False)
2015-01-31 18:41:56 -06:00
2015-02-01 18:38:12 -06:00
def test_dollar_sub_space():
check_xonsh_ast({}, '$(ls )', False)
2015-02-01 18:38:12 -06:00
2015-02-01 17:53:53 -06:00
def test_ls_dot():
check_xonsh_ast({}, '$(ls .)', False)
2015-02-01 17:53:53 -06:00
2016-06-11 21:02:28 -04:00
def test_lambda_in_atparens():
check_xonsh_ast({}, '$(echo hello | @(lambda a, s=None: "hey!") foo bar baz)', False)
2016-06-11 21:02:28 -04:00
def test_nested_madness():
check_xonsh_ast({}, '$(@$(which echo) ls | @(lambda a, s=None: $(@(s.strip()) @(a[1]))) foo -la baz)', False)
2016-06-11 21:02:28 -04:00
2015-02-01 19:01:02 -06:00
def test_ls_dot_nesting():
check_xonsh_ast({}, '$(ls @(None or "."))', False)
2015-02-01 19:01:02 -06:00
2016-07-01 12:43:32 +03:00
def test_ls_dot_nesting_var():
check_xonsh({}, 'x = "."; $(ls @(None or x))', False)
2015-02-01 19:32:20 -06:00
def test_ls_dot_str():
check_xonsh_ast({}, '$(ls ".")', False)
2015-01-31 18:41:56 -06:00
2015-02-01 21:38:58 -06:00
def test_ls_nest_ls():
check_xonsh_ast({}, '$(ls $(ls))', False)
2015-02-01 21:38:58 -06:00
def test_ls_nest_ls_dashl():
check_xonsh_ast({}, '$(ls $(ls) -l)', False)
2015-02-01 21:38:58 -06:00
2015-02-02 01:34:20 -06:00
def test_ls_envvar_strval():
check_xonsh_ast({'WAKKA': '.'}, '$(ls $WAKKA)', False)
2015-02-02 01:34:20 -06:00
def test_ls_envvar_listval():
check_xonsh_ast({'WAKKA': ['.', '.']}, '$(ls $WAKKA)', False)
2015-02-01 21:38:58 -06:00
def test_bang_sub():
check_xonsh_ast({}, '!(ls)', False)
2015-02-02 01:34:20 -06:00
def test_bang_sub_space():
check_xonsh_ast({}, '!(ls )', False)
def test_bang_ls_dot():
check_xonsh_ast({}, '!(ls .)', False)
def test_bang_ls_dot_nesting():
check_xonsh_ast({}, '!(ls @(None or "."))', False)
2016-07-01 12:43:32 +03:00
def test_bang_ls_dot_nesting_var():
check_xonsh({}, 'x = "."; !(ls @(None or x))', False)
def test_bang_ls_dot_str():
check_xonsh_ast({}, '!(ls ".")', False)
def test_bang_ls_nest_ls():
check_xonsh_ast({}, '!(ls $(ls))', False)
def test_bang_ls_nest_ls_dashl():
check_xonsh_ast({}, '!(ls $(ls) -l)', False)
def test_bang_ls_envvar_strval():
check_xonsh_ast({'WAKKA': '.'}, '!(ls $WAKKA)', False)
def test_bang_ls_envvar_listval():
check_xonsh_ast({'WAKKA': ['.', '.']}, '!(ls $WAKKA)', False)
2015-02-01 21:38:58 -06:00
2016-07-01 12:43:32 +03:00
def test_question():
check_xonsh_ast({}, 'range?')
def test_dobquestion():
check_xonsh_ast({}, 'range??')
def test_question_chain():
check_xonsh_ast({}, 'range?.index?')
2015-02-02 03:07:08 -06:00
def test_ls_regex():
check_xonsh_ast({}, '$(ls `[Ff]+i*LE` -l)', False)
2015-02-02 03:07:08 -06:00
2015-02-23 00:33:11 -06:00
def test_backtick():
check_xonsh_ast({}, 'print(`.*`)', False)
2015-02-23 00:33:11 -06:00
2016-05-19 19:23:42 -04:00
def test_ls_regex_octothorpe():
check_xonsh_ast({}, '$(ls `#[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_ls_explicitregex():
check_xonsh_ast({}, '$(ls r`[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_rbacktick():
check_xonsh_ast({}, 'print(r`.*`)', False)
2016-06-16 00:55:41 -04:00
def test_ls_explicitregex_octothorpe():
check_xonsh_ast({}, '$(ls r`#[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_ls_glob():
check_xonsh_ast({}, '$(ls g`[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_gbacktick():
check_xonsh_ast({}, 'print(g`.*`)', False)
2016-06-16 00:55:41 -04:00
def test_ls_glob_octothorpe():
check_xonsh_ast({}, '$(ls g`#[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_ls_customsearch():
check_xonsh_ast({}, '$(ls @foo`[Ff]+i*LE` -l)', False)
2016-06-16 00:55:41 -04:00
def test_custombacktick():
check_xonsh_ast({}, 'print(@foo`.*`)', False)
2016-06-16 00:55:41 -04:00
def test_ls_customsearch_octothorpe():
check_xonsh_ast({}, '$(ls @foo`#[Ff]+i*LE` -l)', False)
2016-05-19 19:23:42 -04:00
2016-05-20 19:46:46 -04:00
def test_injection():
check_xonsh_ast({}, '$[@$(which python)]', False)
2016-05-20 19:46:46 -04:00
def test_rhs_nested_injection():
check_xonsh_ast({}, '$[ls @$(dirname @$(which python))]', False)
2016-05-20 19:46:46 -04:00
2016-05-19 19:23:42 -04:00
def test_backtick_octothorpe():
check_xonsh_ast({}, 'print(`#.*`)', False)
2016-05-19 19:23:42 -04:00
2015-02-24 20:43:41 -06:00
def test_uncaptured_sub():
check_xonsh_ast({}, '$[ls]', False)
2015-02-23 00:33:11 -06:00
def test_hiddenobj_sub():
check_xonsh_ast({}, '![ls]', False)
def test_bang_two_cmds_one_pipe():
check_xonsh_ast({}, '!(ls | grep wakka)', False)
def test_bang_three_cmds_two_pipes():
check_xonsh_ast({}, '!(ls | grep wakka | grep jawaka)', False)
def test_bang_one_cmd_write():
check_xonsh_ast({}, '!(ls > x.py)', False)
def test_bang_one_cmd_append():
check_xonsh_ast({}, '!(ls >> x.py)', False)
def test_bang_two_cmds_write():
check_xonsh_ast({}, '!(ls | grep wakka > x.py)', False)
def test_bang_two_cmds_append():
check_xonsh_ast({}, '!(ls | grep wakka >> x.py)', False)
def test_bang_cmd_background():
check_xonsh_ast({}, '!(emacs ugggh &)', False)
def test_bang_cmd_background_nospace():
check_xonsh_ast({}, '!(emacs ugggh&)', False)
def test_bang_git_quotes_no_space():
check_xonsh_ast({}, '![git commit -am "wakka"]', False)
def test_bang_git_quotes_space():
check_xonsh_ast({}, '![git commit -am "wakka jawaka"]', False)
2016-07-01 12:43:32 +03:00
def test_bang_git_two_quotes_space():
check_xonsh({}, '![git commit -am "wakka jawaka"]\n'
'![git commit -am "flock jawaka"]\n', False)
def test_bang_git_two_quotes_space_space():
check_xonsh({}, '![git commit -am "wakka jawaka" ]\n'
'![git commit -am "flock jawaka milwaka" ]\n', False)
def test_bang_ls_quotes_3_space():
check_xonsh_ast({}, '![ls "wakka jawaka baraka"]', False)
2015-02-25 21:01:21 -06:00
def test_two_cmds_one_pipe():
check_xonsh_ast({}, '$(ls | grep wakka)', False)
2015-02-25 21:01:21 -06:00
def test_three_cmds_two_pipes():
check_xonsh_ast({}, '$(ls | grep wakka | grep jawaka)', False)
2015-02-25 21:01:21 -06:00
2016-04-01 01:52:41 -04:00
def test_two_cmds_one_and_brackets():
check_xonsh_ast({}, '![ls me] and ![grep wakka]', False)
2016-02-09 00:31:15 -05:00
def test_three_cmds_two_ands():
check_xonsh_ast({}, '![ls] and ![grep wakka] and ![grep jawaka]', False)
2016-02-09 00:31:15 -05:00
def test_two_cmds_one_doubleamps():
check_xonsh_ast({}, '![ls] && ![grep wakka]', False)
2016-02-09 00:31:15 -05:00
def test_three_cmds_two_doubleamps():
check_xonsh_ast({}, '![ls] && ![grep wakka] && ![grep jawaka]', False)
2016-02-09 00:31:15 -05:00
2016-02-09 00:47:48 -05:00
def test_two_cmds_one_or():
check_xonsh_ast({}, '![ls] or ![grep wakka]', False)
2016-02-09 00:47:48 -05:00
def test_three_cmds_two_ors():
check_xonsh_ast({}, '![ls] or ![grep wakka] or ![grep jawaka]', False)
2016-02-09 00:47:48 -05:00
def test_two_cmds_one_doublepipe():
check_xonsh_ast({}, '![ls] || ![grep wakka]', False)
2016-02-09 00:47:48 -05:00
def test_three_cmds_two_doublepipe():
check_xonsh_ast({}, '![ls] || ![grep wakka] || ![grep jawaka]', False)
2016-02-09 00:47:48 -05:00
def test_one_cmd_write():
check_xonsh_ast({}, '$(ls > x.py)', False)
def test_one_cmd_append():
check_xonsh_ast({}, '$(ls >> x.py)', False)
def test_two_cmds_write():
check_xonsh_ast({}, '$(ls | grep wakka > x.py)', False)
def test_two_cmds_append():
check_xonsh_ast({}, '$(ls | grep wakka >> x.py)', False)
2015-02-25 23:22:10 -06:00
def test_cmd_background():
check_xonsh_ast({}, '$(emacs ugggh &)', False)
2015-02-25 23:22:10 -06:00
def test_cmd_background_nospace():
check_xonsh_ast({}, '$(emacs ugggh&)', False)
2015-02-25 23:22:10 -06:00
2015-03-03 18:54:58 -06:00
def test_git_quotes_no_space():
check_xonsh_ast({}, '$[git commit -am "wakka"]', False)
2015-03-03 18:54:58 -06:00
def test_git_quotes_space():
check_xonsh_ast({}, '$[git commit -am "wakka jawaka"]', False)
2015-03-03 18:54:58 -06:00
2016-07-01 12:43:32 +03:00
def test_git_two_quotes_space():
check_xonsh({}, '$[git commit -am "wakka jawaka"]\n'
'$[git commit -am "flock jawaka"]\n', False)
def test_git_two_quotes_space_space():
check_xonsh({}, '$[git commit -am "wakka jawaka" ]\n'
'$[git commit -am "flock jawaka milwaka" ]\n', False)
2015-03-03 19:57:18 -06:00
def test_ls_quotes_3_space():
check_xonsh_ast({}, '$[ls "wakka jawaka baraka"]', False)
2015-03-03 19:57:18 -06:00
2016-05-24 23:55:07 -04:00
def test_echo_comma():
check_xonsh_ast({}, '![echo ,]', False)
2016-05-24 23:55:07 -04:00
def test_echo_internal_comma():
check_xonsh_ast({}, '![echo 1,2]', False)
2016-05-24 23:55:07 -04:00
2015-03-07 23:02:49 -06:00
def test_comment_only():
check_xonsh_ast({}, '# hello')
2015-03-07 23:02:49 -06:00
2016-06-02 17:12:46 -04:00
def test_echo_slash_question():
check_xonsh_ast({}, '![echo /?]', False)
2016-06-02 17:12:46 -04:00
2015-05-20 18:17:34 -04:00
def test_redirect():
2016-07-01 17:50:01 +03:00
assert check_xonsh_ast({}, '$[cat < input.txt]', False)
assert check_xonsh_ast({}, '$[< input.txt cat]', False)
@pytest.mark.parametrize('case', ['', 'o', 'out', '1'])
def test_redirect_output(case):
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[< input.txt echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt < input.txt]'.format(case), False)
@pytest.mark.parametrize('case', ['e', 'err', '2'])
def test_redirect_error(case):
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[< input.txt echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt < input.txt]'.format(case), False)
@pytest.mark.parametrize('case', ['a', 'all', '&'])
def test_redirect_all(case):
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[< input.txt echo "test" {}> test.txt]'.format(case), False)
assert check_xonsh_ast({}, '$[echo "test" {}> test.txt < input.txt]'.format(case), False)
@pytest.mark.parametrize('r',
['e>o', 'e>out', 'err>o', 'err>o',
' 2>1', 'e>1', 'err>1', '2>out',
'2>o', 'err>&1', 'e>&1', '2>&1'
])
@pytest.mark.parametrize('o', ['', 'o', 'out', '1'])
def test_redirect_error_to_output(r, o):
assert check_xonsh_ast({}, '$[echo "test" {} {}> test.txt]'.format(r, o), False)
assert check_xonsh_ast({}, '$[< input.txt echo "test" {} {}> test.txt]'.format(r, o), False)
assert check_xonsh_ast({}, '$[echo "test" {} {}> test.txt < input.txt]'.format(r, o), False)