# -*- coding: utf-8 -*-
"""Tests the xonsh lexer."""
import os

from tools import (check_eval, check_parse,
                   skip_if_on_unix, skip_if_on_windows)

import pytest


@pytest.fixture(autouse=True)
def xonsh_execer_autouse(xonsh_builtins, xonsh_execer):
    return xonsh_execer


@skip_if_on_unix
def test_win_ipconfig():
    assert check_eval(os.environ['SYSTEMROOT'] + '\\System32\\ipconfig.exe /all')

@skip_if_on_unix
def test_ipconfig():
    assert check_eval('ipconfig /all')

@skip_if_on_windows
def test_bin_ls():
    assert check_eval('/bin/ls -l')

def test_ls_dashl():
    assert check_parse('ls -l')

def test_which_ls():
    assert check_parse('which ls')

def test_echo_hello():
    assert check_parse('echo hello')

def test_simple_func():
    code = ('def prompt():\n'
            "    return '{user}'.format(user='me')\n")
    assert check_parse(code)

def test_lookup_alias():
    code = (
        'def foo(a,  s=None):\n'
        '    return "bar"\n'
        '@(foo)\n')
    assert check_parse(code)

def test_lookup_anon_alias():
    code = ('echo "hi" | @(lambda a, s=None: a[0]) foo bar baz\n')
    assert check_parse(code)

def test_simple_func_broken():
    code = ('def prompt():\n'
            "    return '{user}'.format(\n"
            "       user='me')\n")
    assert check_parse(code)

def test_bad_indent():
    code = ('if True:\n'
            'x = 1\n')
    with pytest.raises(SyntaxError):
        check_parse(code)

def test_good_rhs_subproc():
    # nonsense but parsebale
    code = 'str().split() | ![grep exit]\n'
    assert(code)

def test_bad_rhs_subproc():
    # nonsense but unparsebale
    code = 'str().split() | grep exit\n'
    with pytest.raises(SyntaxError):
        check_parse(code)

def test_indent_with_empty_line():
    code = ('if True:\n'
            '\n'
            '    some_command for_sub_process_mode\n')
    assert check_parse(code)

def test_command_in_func():
    code = ('def f():\n'
            '    echo hello\n')
    assert check_parse(code)

def test_command_in_func_with_comment():
    code = ('def f():\n'
            '    echo hello # comment\n')
    assert check_parse(code)

def test_pyeval_redirect():
    code = 'echo @("foo") > bar\n'
    assert check_parse(code)

def test_echo_comma():
    code = 'echo ,\n'
    assert check_parse(code)

def test_echo_comma_val():
    code = 'echo ,1\n'
    assert check_parse(code)

def test_echo_comma_2val():
    code = 'echo 1,2\n'
    assert check_parse(code)


def test_echo_line_cont():
    code = 'echo "1 \\\n2"\n'
    assert check_parse(code)
