2015-11-16 14:04:32 -08:00
|
|
|
# -*- coding: utf-8 -*-
|
2015-05-14 18:18:46 -05:00
|
|
|
"""Tests the xonsh builtins."""
|
2015-02-19 23:58:25 -06:00
|
|
|
from __future__ import unicode_literals, print_function
|
|
|
|
import os
|
2015-05-12 23:54:21 -04:00
|
|
|
import re
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2015-03-25 18:32:10 -05:00
|
|
|
import nose
|
2015-08-02 13:10:04 -05:00
|
|
|
from nose.plugins.skip import SkipTest
|
2015-04-05 00:26:32 -05:00
|
|
|
from nose.tools import assert_equal, assert_true, assert_not_in
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2015-07-29 23:58:25 +02:00
|
|
|
from xonsh import built_ins
|
2015-05-14 18:18:46 -05:00
|
|
|
from xonsh.built_ins import reglob, regexpath, helper, superhelper, \
|
2015-08-02 13:10:04 -05:00
|
|
|
ensure_list_of_strs, expand_case_matching
|
2015-05-14 18:18:46 -05:00
|
|
|
from xonsh.environ import Env
|
2015-05-12 23:54:21 -04:00
|
|
|
from xonsh.tools import ON_WINDOWS
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2015-04-05 00:26:32 -05:00
|
|
|
|
2015-02-22 23:46:18 -06:00
|
|
|
def test_reglob_tests():
|
|
|
|
testfiles = reglob('test_.*')
|
|
|
|
for f in testfiles:
|
|
|
|
assert_true(f.startswith('test_'))
|
|
|
|
|
2015-08-02 13:36:44 -05:00
|
|
|
def test_repath_backslash():
|
|
|
|
if ON_WINDOWS:
|
|
|
|
raise SkipTest
|
|
|
|
home = os.path.expanduser('~')
|
2015-12-19 17:29:48 -05:00
|
|
|
built_ins.ENV = Env(HOME=home)
|
2015-08-02 13:36:44 -05:00
|
|
|
exp = os.listdir(home)
|
|
|
|
exp = {p for p in exp if re.match(r'\w\w.*', p)}
|
|
|
|
exp = {os.path.join(home, p) for p in exp}
|
|
|
|
obs = set(regexpath(r'~/\w\w.*'))
|
|
|
|
assert_equal(exp, obs)
|
2015-07-29 23:58:25 +02:00
|
|
|
|
2015-02-22 23:46:18 -06:00
|
|
|
def test_repath_home_itself():
|
|
|
|
exp = os.path.expanduser('~')
|
2015-12-19 17:29:48 -05:00
|
|
|
built_ins.ENV = Env(HOME=exp)
|
2015-02-22 23:46:18 -06:00
|
|
|
obs = regexpath('~')
|
|
|
|
assert_equal(1, len(obs))
|
|
|
|
assert_equal(exp, obs[0])
|
|
|
|
|
|
|
|
def test_repath_home_contents():
|
|
|
|
home = os.path.expanduser('~')
|
2015-12-19 17:29:48 -05:00
|
|
|
built_ins.ENV = Env(HOME=home)
|
2015-02-22 23:46:18 -06:00
|
|
|
exp = os.listdir(home)
|
|
|
|
exp = {os.path.join(home, p) for p in exp}
|
|
|
|
obs = set(regexpath('~/.*'))
|
|
|
|
assert_equal(exp, obs)
|
|
|
|
|
|
|
|
def test_repath_home_var():
|
|
|
|
exp = os.path.expanduser('~')
|
|
|
|
built_ins.ENV = Env(HOME=exp)
|
|
|
|
obs = regexpath('$HOME')
|
|
|
|
assert_equal(1, len(os.environ))
|
|
|
|
built_ins.ENV.undo_replace_env()
|
|
|
|
assert_equal(1, len(obs))
|
|
|
|
assert_equal(exp, obs[0])
|
|
|
|
|
|
|
|
def test_repath_home_var_brace():
|
|
|
|
exp = os.path.expanduser('~')
|
|
|
|
built_ins.ENV = Env(HOME=exp)
|
|
|
|
obs = regexpath('${HOME}')
|
|
|
|
assert_equal(1, len(os.environ))
|
|
|
|
built_ins.ENV.undo_replace_env()
|
|
|
|
assert_equal(1, len(obs))
|
|
|
|
assert_equal(exp, obs[0])
|
|
|
|
|
2015-02-23 22:14:56 -06:00
|
|
|
def test_helper_int():
|
|
|
|
helper(int, 'int')
|
|
|
|
|
|
|
|
def test_helper_helper():
|
|
|
|
helper(helper, 'helper')
|
|
|
|
|
2015-02-23 22:21:46 -06:00
|
|
|
def test_helper_env():
|
|
|
|
helper(Env, 'Env')
|
|
|
|
|
2015-02-23 22:14:56 -06:00
|
|
|
def test_superhelper_int():
|
2015-02-23 22:21:46 -06:00
|
|
|
superhelper(int, 'int')
|
2015-02-23 22:14:56 -06:00
|
|
|
|
|
|
|
def test_superhelper_helper():
|
2015-02-23 22:21:46 -06:00
|
|
|
superhelper(helper, 'helper')
|
|
|
|
|
|
|
|
def test_superhelper_env():
|
|
|
|
superhelper(Env, 'Env')
|
2015-02-23 22:14:56 -06:00
|
|
|
|
2015-03-28 17:55:48 -05:00
|
|
|
def test_ensure_list_of_strs():
|
|
|
|
cases = [(['yo'], 'yo'), (['yo'], ['yo']), (['42'], 42), (['42'], [42])]
|
|
|
|
for exp, inp in cases:
|
|
|
|
obs = ensure_list_of_strs(inp)
|
|
|
|
yield assert_equal, exp, obs
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2015-08-02 13:10:04 -05:00
|
|
|
def test_expand_case_matching():
|
|
|
|
cases = {
|
|
|
|
'yo': '[Yy][Oo]',
|
|
|
|
'[a-f]123e': '[a-f]123[Ee]',
|
|
|
|
'${HOME}/yo': '${HOME}/[Yy][Oo]',
|
|
|
|
'./yo/mom': './[Yy][Oo]/[Mm][Oo][Mm]',
|
|
|
|
'Eßen': '[Ee][Ss]?[Ssß][Ee][Nn]',
|
|
|
|
}
|
|
|
|
for inp, exp in cases.items():
|
|
|
|
obs = expand_case_matching(inp)
|
|
|
|
yield assert_equal, exp, obs
|
|
|
|
|
2015-04-05 15:42:24 -05:00
|
|
|
|
2015-02-19 23:58:25 -06:00
|
|
|
if __name__ == '__main__':
|
|
|
|
nose.runmodule()
|