2015-05-14 18:18:46 -05:00
|
|
|
"""Tests the xonsh builtins."""
|
2015-02-19 23:58:25 -06:00
|
|
|
import os
|
2015-05-12 23:54:21 -04:00
|
|
|
import re
|
2016-08-20 15:39:02 -04:00
|
|
|
import types
|
2019-02-14 16:19:13 -05:00
|
|
|
from ast import AST, Module, Interactive, Expression
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2016-06-22 22:50:01 +03:00
|
|
|
import pytest
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
from xonsh.built_ins import (
|
|
|
|
reglob,
|
|
|
|
pathsearch,
|
|
|
|
helper,
|
|
|
|
superhelper,
|
|
|
|
ensure_list_of_strs,
|
|
|
|
list_of_strs_or_callables,
|
2018-09-17 18:23:20 -04:00
|
|
|
list_of_list_of_strs_outer_product,
|
2018-08-30 09:18:49 -05:00
|
|
|
regexsearch,
|
|
|
|
expand_path,
|
|
|
|
convert_macro_arg,
|
|
|
|
in_macro_call,
|
|
|
|
call_macro,
|
|
|
|
enter_macro,
|
|
|
|
)
|
2015-05-14 18:18:46 -05:00
|
|
|
from xonsh.environ import Env
|
2015-02-19 23:58:25 -06:00
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
from tools import skip_if_on_windows
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
HOME_PATH = os.path.expanduser("~")
|
2015-12-19 18:09:06 -05:00
|
|
|
|
2015-04-05 00:26:32 -05:00
|
|
|
|
2016-08-20 15:39:02 -04:00
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
def xonsh_execer_autouse(xonsh_execer):
|
|
|
|
return xonsh_execer
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
@pytest.mark.parametrize("testfile", reglob("test_.*"))
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_reglob_tests(testfile):
|
2018-08-30 09:18:49 -05:00
|
|
|
assert testfile.startswith("test_")
|
2015-02-22 23:46:18 -06:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
|
|
|
|
@pytest.fixture
|
2021-05-20 15:44:26 +05:30
|
|
|
def home_env(xession):
|
2018-09-13 14:03:35 -04:00
|
|
|
"""Set `__xonsh__.env ` to a new Env instance on `xonsh_builtins`"""
|
2021-05-20 15:44:26 +05:30
|
|
|
xession.env = Env(HOME=HOME_PATH)
|
|
|
|
return xession
|
2016-06-25 13:06:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
@skip_if_on_windows
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_repath_backslash(home_env):
|
2016-06-25 13:06:59 +03:00
|
|
|
exp = os.listdir(HOME_PATH)
|
2018-08-30 09:18:49 -05:00
|
|
|
exp = {p for p in exp if re.match(r"\w\w.*", p)}
|
2016-06-25 13:06:59 +03:00
|
|
|
exp = {os.path.join(HOME_PATH, p) for p in exp}
|
2018-08-30 09:18:49 -05:00
|
|
|
obs = set(pathsearch(regexsearch, r"~/\w\w.*"))
|
|
|
|
assert exp == obs
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
@skip_if_on_windows
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_repath_HOME_PATH_itself(home_env):
|
|
|
|
exp = HOME_PATH
|
2018-08-30 09:18:49 -05:00
|
|
|
obs = pathsearch(regexsearch, "~")
|
|
|
|
assert 1 == len(obs)
|
|
|
|
assert exp == obs[0]
|
2016-06-25 13:06:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
@skip_if_on_windows
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_repath_HOME_PATH_contents(home_env):
|
2016-06-25 13:06:59 +03:00
|
|
|
exp = os.listdir(HOME_PATH)
|
|
|
|
exp = {os.path.join(HOME_PATH, p) for p in exp}
|
2018-08-30 09:18:49 -05:00
|
|
|
obs = set(pathsearch(regexsearch, "~/.*"))
|
|
|
|
assert exp == obs
|
2016-06-25 13:06:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
@skip_if_on_windows
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_repath_HOME_PATH_var(home_env):
|
|
|
|
exp = HOME_PATH
|
2018-08-30 09:18:49 -05:00
|
|
|
obs = pathsearch(regexsearch, "$HOME")
|
|
|
|
assert 1 == len(obs)
|
|
|
|
assert exp == obs[0]
|
2016-06-25 13:06:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
@skip_if_on_windows
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_repath_HOME_PATH_var_brace(home_env):
|
|
|
|
exp = HOME_PATH
|
2016-06-25 13:06:59 +03:00
|
|
|
obs = pathsearch(regexsearch, '${"HOME"}')
|
2018-08-30 09:18:49 -05:00
|
|
|
assert 1 == len(obs)
|
|
|
|
assert exp == obs[0]
|
2016-06-25 13:06:59 +03:00
|
|
|
|
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_helper_int(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
helper(int, "int")
|
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_helper_helper(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
helper(helper, "helper")
|
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_helper_env(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
helper(Env, "Env")
|
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_superhelper_int(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
superhelper(int, "int")
|
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_superhelper_helper(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
superhelper(helper, "helper")
|
|
|
|
|
2016-06-25 13:06:59 +03:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_superhelper_env(home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
superhelper(Env, "Env")
|
2015-02-23 22:14:56 -06:00
|
|
|
|
2016-06-29 18:32:42 +03:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"exp, inp", [(["yo"], "yo"), (["yo"], ["yo"]), (["42"], 42), (["42"], [42])]
|
|
|
|
)
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_ensure_list_of_strs(exp, inp):
|
|
|
|
obs = ensure_list_of_strs(inp)
|
|
|
|
assert exp == obs
|
|
|
|
|
|
|
|
|
|
|
|
f = lambda x: 20
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"exp, inp",
|
|
|
|
[
|
|
|
|
(["yo"], "yo"),
|
|
|
|
(["yo"], ["yo"]),
|
|
|
|
(["42"], 42),
|
|
|
|
(["42"], [42]),
|
|
|
|
([f], f),
|
|
|
|
([f], [f]),
|
|
|
|
],
|
|
|
|
)
|
2016-06-29 18:32:42 +03:00
|
|
|
def test_list_of_strs_or_callables(exp, inp):
|
|
|
|
obs = list_of_strs_or_callables(inp)
|
|
|
|
assert exp == obs
|
2016-08-20 15:39:02 -04:00
|
|
|
|
|
|
|
|
2018-09-17 18:23:20 -04:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"inp, exp",
|
|
|
|
[
|
|
|
|
(["x", ["y", "z"]], ["xy", "xz"]),
|
|
|
|
(["x", ["y", "z"], ["a"]], ["xya", "xza"]),
|
|
|
|
([["y", "z"], ["a", "b"]], ["ya", "yb", "za", "zb"]),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
def test_list_of_list_of_strs_outer_product(xonsh_builtins, inp, exp):
|
|
|
|
obs = list_of_list_of_strs_outer_product(inp)
|
|
|
|
assert exp == obs
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"s",
|
|
|
|
[
|
|
|
|
"~",
|
|
|
|
"~/",
|
|
|
|
"x=~/place",
|
|
|
|
"x=one:~/place",
|
|
|
|
"x=one:~/place:~/yo",
|
|
|
|
"x=~/one:~/place:~/yo",
|
|
|
|
],
|
|
|
|
)
|
2016-08-25 01:04:08 -04:00
|
|
|
def test_expand_path(s, home_env):
|
2018-08-30 09:18:49 -05:00
|
|
|
if os.sep != "/":
|
|
|
|
s = s.replace("/", os.sep)
|
|
|
|
if os.pathsep != ":":
|
|
|
|
s = s.replace(":", os.pathsep)
|
|
|
|
assert expand_path(s) == s.replace("~", HOME_PATH)
|
2016-08-25 01:04:08 -04:00
|
|
|
|
2016-09-09 19:21:26 -04:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("kind", [str, "s", "S", "str", "string"])
|
2016-08-20 15:39:02 -04:00
|
|
|
def test_convert_macro_arg_str(kind):
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "value"
|
2016-08-20 15:39:02 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, None, None)
|
|
|
|
assert arg is raw_arg
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("kind", [AST, "a", "Ast"])
|
2016-08-20 15:39:02 -04:00
|
|
|
def test_convert_macro_arg_ast(kind):
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "42"
|
2016-08-20 15:39:02 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, None)
|
|
|
|
assert isinstance(arg, AST)
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("kind", [types.CodeType, compile, "c", "code", "compile"])
|
2016-08-20 15:39:02 -04:00
|
|
|
def test_convert_macro_arg_code(kind):
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "42"
|
2016-08-20 15:39:02 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, None)
|
|
|
|
assert isinstance(arg, types.CodeType)
|
|
|
|
|
|
|
|
|
2020-04-30 20:31:45 -04:00
|
|
|
@pytest.mark.parametrize("kind", [eval, "v", "eval"])
|
2016-08-20 15:39:02 -04:00
|
|
|
def test_convert_macro_arg_eval(kind):
|
|
|
|
# literals
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "42"
|
2016-08-20 15:39:02 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, None)
|
|
|
|
assert arg == 42
|
|
|
|
# exprs
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "x + 41"
|
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, {"x": 1})
|
2016-08-20 15:39:02 -04:00
|
|
|
assert arg == 42
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("kind", [exec, "x", "exec"])
|
2016-08-20 21:11:07 -04:00
|
|
|
def test_convert_macro_arg_exec(kind):
|
2016-08-20 15:39:02 -04:00
|
|
|
# at global scope
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "def f(x, y):\n return x + y"
|
2016-08-20 15:39:02 -04:00
|
|
|
glbs = {}
|
|
|
|
arg = convert_macro_arg(raw_arg, kind, glbs, None)
|
|
|
|
assert arg is None
|
2018-08-30 09:18:49 -05:00
|
|
|
assert "f" in glbs
|
|
|
|
assert glbs["f"](1, 41) == 42
|
2016-08-20 15:39:02 -04:00
|
|
|
# at local scope
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "def g(z):\n return x + z\ny += 42"
|
|
|
|
glbs = {"x": 40}
|
|
|
|
locs = {"y": 1}
|
2016-08-20 15:39:02 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, glbs, locs)
|
|
|
|
assert arg is None
|
2018-08-30 09:18:49 -05:00
|
|
|
assert "g" in locs
|
|
|
|
assert locs["g"](1) == 41
|
|
|
|
assert "y" in locs
|
|
|
|
assert locs["y"] == 43
|
2016-08-20 15:39:02 -04:00
|
|
|
|
2016-08-20 15:50:36 -04:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("kind", [type, "t", "type"])
|
2020-05-05 06:42:28 -04:00
|
|
|
def test_convert_macro_arg_type(kind):
|
2016-08-20 21:11:07 -04:00
|
|
|
# literals
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "42"
|
2016-08-20 21:11:07 -04:00
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, None)
|
|
|
|
assert arg is int
|
|
|
|
# exprs
|
2018-08-30 09:18:49 -05:00
|
|
|
raw_arg = "x + 41"
|
|
|
|
arg = convert_macro_arg(raw_arg, kind, {}, {"x": 1})
|
2016-08-20 21:11:07 -04:00
|
|
|
assert arg is int
|
|
|
|
|
|
|
|
|
2016-08-28 13:46:05 -04:00
|
|
|
def test_in_macro_call():
|
2016-08-20 15:50:36 -04:00
|
|
|
def f():
|
|
|
|
pass
|
2018-08-30 09:18:49 -05:00
|
|
|
|
2016-08-28 13:46:05 -04:00
|
|
|
with in_macro_call(f, True, True):
|
2016-08-20 15:50:36 -04:00
|
|
|
assert f.macro_globals
|
|
|
|
assert f.macro_locals
|
2018-08-30 09:18:49 -05:00
|
|
|
assert not hasattr(f, "macro_globals")
|
|
|
|
assert not hasattr(f, "macro_locals")
|
2016-08-20 15:50:36 -04:00
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-20 15:50:36 -04:00
|
|
|
def test_call_macro_str(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: str):
|
2016-08-20 15:50:36 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
2016-08-20 15:50:36 -04:00
|
|
|
rtn = call_macro(f, [arg], None, None)
|
|
|
|
assert rtn is arg
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-20 16:00:30 -04:00
|
|
|
def test_call_macro_ast(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: AST):
|
2016-08-20 16:00:30 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
2016-08-20 16:00:30 -04:00
|
|
|
rtn = call_macro(f, [arg], {}, None)
|
|
|
|
assert isinstance(rtn, AST)
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-20 15:50:36 -04:00
|
|
|
def test_call_macro_code(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: compile):
|
2016-08-20 15:50:36 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
2016-08-20 15:50:36 -04:00
|
|
|
rtn = call_macro(f, [arg], {}, None)
|
|
|
|
assert isinstance(rtn, types.CodeType)
|
|
|
|
|
2016-08-20 16:00:30 -04:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-20 16:00:30 -04:00
|
|
|
def test_call_macro_eval(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: eval):
|
2016-08-20 16:00:30 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
rtn = call_macro(f, [arg], {"x": 42, "y": 0}, None)
|
2016-08-20 16:00:30 -04:00
|
|
|
assert rtn == 42
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"arg", ["if y:\n pass", "if 42:\n pass", "if x + y:\n pass"]
|
|
|
|
)
|
2016-08-20 16:00:30 -04:00
|
|
|
def test_call_macro_exec(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: exec):
|
2016-08-20 16:00:30 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
rtn = call_macro(f, [arg], {"x": 42, "y": 0}, None)
|
2016-08-20 16:00:30 -04:00
|
|
|
assert rtn is None
|
2016-08-27 13:06:08 -04:00
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-27 13:06:08 -04:00
|
|
|
def test_call_macro_raw_arg(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: str):
|
2016-08-27 13:06:08 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
rtn = call_macro(f, ["*", arg], {"x": 42, "y": 0}, None)
|
2016-08-27 13:06:08 -04:00
|
|
|
assert rtn == 42
|
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-27 13:06:08 -04:00
|
|
|
def test_call_macro_raw_kwarg(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: str):
|
2016-08-27 13:06:08 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
rtn = call_macro(f, ["*", "x=" + arg], {"x": 42, "y": 0}, None)
|
2016-08-27 13:06:08 -04:00
|
|
|
assert rtn == 42
|
2016-08-27 13:27:15 -04:00
|
|
|
|
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
@pytest.mark.parametrize("arg", ["x", "42", "x + y"])
|
2016-08-27 13:27:15 -04:00
|
|
|
def test_call_macro_raw_kwargs(arg):
|
2018-08-30 09:18:49 -05:00
|
|
|
def f(x: str):
|
2016-08-27 13:27:15 -04:00
|
|
|
return x
|
2018-08-30 09:18:49 -05:00
|
|
|
|
|
|
|
rtn = call_macro(f, ["*", '**{"x" :' + arg + "}"], {"x": 42, "y": 0}, None)
|
2016-08-27 13:27:15 -04:00
|
|
|
assert rtn == 42
|
2016-08-28 23:16:56 -04:00
|
|
|
|
|
|
|
|
2019-02-14 16:19:13 -05:00
|
|
|
def test_call_macro_ast_eval_expr():
|
|
|
|
def f(x: ("ast", "eval")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
rtn = call_macro(f, ["x == 5"], {}, None)
|
|
|
|
assert isinstance(rtn, Expression)
|
|
|
|
|
|
|
|
|
|
|
|
def test_call_macro_ast_single_expr():
|
|
|
|
def f(x: ("ast", "single")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
rtn = call_macro(f, ["x == 5"], {}, None)
|
|
|
|
assert isinstance(rtn, Interactive)
|
|
|
|
|
|
|
|
|
|
|
|
def test_call_macro_ast_exec_expr():
|
|
|
|
def f(x: ("ast", "exec")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
rtn = call_macro(f, ["x == 5"], {}, None)
|
|
|
|
assert isinstance(rtn, Module)
|
|
|
|
|
|
|
|
|
|
|
|
def test_call_macro_ast_eval_statement():
|
|
|
|
def f(x: ("ast", "eval")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
try:
|
2020-05-05 06:42:28 -04:00
|
|
|
call_macro(f, ["x = 5"], {}, None)
|
2019-02-14 16:19:13 -05:00
|
|
|
assert False
|
|
|
|
except SyntaxError:
|
|
|
|
# It doesn't make sense to pass a statement to
|
|
|
|
# something that expects to be evaled
|
|
|
|
assert True
|
|
|
|
else:
|
|
|
|
assert False
|
|
|
|
|
|
|
|
|
|
|
|
def test_call_macro_ast_single_statement():
|
|
|
|
def f(x: ("ast", "single")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
rtn = call_macro(f, ["x = 5"], {}, None)
|
|
|
|
assert isinstance(rtn, Interactive)
|
|
|
|
|
|
|
|
|
|
|
|
def test_call_macro_ast_exec_statement():
|
|
|
|
def f(x: ("ast", "exec")):
|
|
|
|
return x
|
|
|
|
|
|
|
|
rtn = call_macro(f, ["x = 5"], {}, None)
|
|
|
|
assert isinstance(rtn, Module)
|
|
|
|
|
|
|
|
|
2016-08-28 23:16:56 -04:00
|
|
|
def test_enter_macro():
|
|
|
|
obj = lambda: None
|
2018-08-30 09:18:49 -05:00
|
|
|
rtn = enter_macro(obj, "wakka", True, True)
|
2016-08-28 23:16:56 -04:00
|
|
|
assert obj is rtn
|
2018-08-30 09:18:49 -05:00
|
|
|
assert obj.macro_block == "wakka"
|
2016-08-28 23:16:56 -04:00
|
|
|
assert obj.macro_globals
|
|
|
|
assert obj.macro_locals
|