xonsh/tests/test_execer.py

132 lines
2.9 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2015-02-03 02:02:57 -06:00
"""Tests the xonsh lexer."""
from __future__ import unicode_literals, print_function
import os
import sys
import ast
2015-08-02 17:34:13 -05:00
from nose.tools import assert_raises
2015-02-03 02:02:57 -06:00
from xonsh.execer import Execer
from xonsh.tools import ON_WINDOWS
2015-02-03 02:02:57 -06:00
2015-02-11 02:01:35 -06:00
from tools import mock_xonsh_env
2015-02-03 02:02:57 -06:00
DEBUG_LEVEL = 0
EXECER = None
2015-03-01 19:13:09 -06:00
#
# Helpers
#
2015-02-03 02:02:57 -06:00
def setup():
# only setup one parser
global EXECER
EXECER = Execer(debug_level=DEBUG_LEVEL)
def check_exec(input):
2015-02-11 02:01:35 -06:00
with mock_xonsh_env(None):
if not input.endswith('\n'):
input += '\n'
EXECER.debug_level = DEBUG_LEVEL
EXECER.exec(input)
2015-02-03 02:02:57 -06:00
2015-03-01 19:13:09 -06:00
def check_eval(input):
2016-05-16 01:07:14 -04:00
with mock_xonsh_env({'AUTO_CD': False, 'XONSH_ENCODING' :'utf-8',
2016-05-16 02:22:23 -04:00
'XONSH_ENCODING_ERRORS': 'strict', 'PATH': []}):
2015-03-01 19:13:09 -06:00
EXECER.debug_level = DEBUG_LEVEL
EXECER.eval(input)
2015-03-10 21:38:11 -05:00
def check_parse(input):
with mock_xonsh_env(None):
EXECER.debug_level = DEBUG_LEVEL
EXECER.parse(input, ctx=None)
2015-03-01 19:13:09 -06:00
#
# Tests
#
if ON_WINDOWS:
def test_win_ipconfig():
2015-05-12 03:24:35 -04:00
yield (check_eval,
os.environ['SYSTEMROOT'] + '\\System32\\ipconfig.exe /all')
2015-02-03 02:02:57 -06:00
def test_ipconfig():
yield check_eval, 'ipconfig /all'
2015-02-11 02:01:35 -06:00
else:
def test_bin_ls():
yield check_eval, '/bin/ls -l'
2015-02-11 02:01:35 -06:00
2016-04-09 00:25:53 -04:00
def test_ls_dashl():
yield check_parse, 'ls -l'
2016-04-09 00:25:53 -04:00
def test_which_ls():
yield check_parse, 'which ls'
2016-04-09 00:25:53 -04:00
def test_echo_hello():
yield check_parse, 'echo hello'
2015-07-29 23:58:25 +02:00
2015-03-10 21:38:11 -05:00
def test_simple_func():
code = ('def prompt():\n'
" return '{user}'.format(user='me')\n")
yield check_parse, code
def test_simple_func_broken():
code = ('def prompt():\n'
" return '{user}'.format(\n"
" user='me')\n")
yield check_parse, code
2015-08-02 17:34:13 -05:00
def test_bad_indent():
code = ('if True:\n'
'x = 1\n')
assert_raises(SyntaxError, check_parse, code)
2015-03-10 21:38:11 -05:00
def test_good_rhs_subproc():
# nonsense but parsebale
code = 'str().split() | ![grep exit]\n'
check_parse(code)
def test_bad_rhs_subproc():
# nonsense but unparsebale
code = 'str().split() | grep exit\n'
assert_raises(SyntaxError, check_parse, code)
def test_indent_with_empty_line():
code = ('if True:\n'
'\n'
' some_command for_sub_process_mode\n')
yield check_parse, code
def test_command_in_func():
code = ('def f():\n'
' echo hello\n')
yield check_parse, code
def test_command_in_func_with_comment():
code = ('def f():\n'
' echo hello # comment\n')
yield check_parse, code
2016-05-19 18:52:50 -04:00
def test_pyeval_redirect():
code = 'echo @("foo") > bar\n'
yield check_parse, code
2016-05-24 23:55:07 -04:00
def test_echo_comma():
code = 'echo ,\n'
yield check_parse, code
def test_echo_comma_val():
code = 'echo ,1\n'
yield check_parse, code
def test_echo_comma_2val():
code = 'echo 1,2\n'
yield check_parse, code
2015-03-10 21:38:11 -05:00
2015-02-03 02:02:57 -06:00
if __name__ == '__main__':
nose.runmodule()