File: test_lambda.py

package info (click to toggle)
restrictedpython 8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,576 kB
  • sloc: python: 4,120; makefile: 193
file content (62 lines) | stat: -rw-r--r-- 1,970 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from RestrictedPython import compile_restricted_exec
from tests.helper import restricted_exec


lambda_err_msg = 'Line 1: "_bad" is an invalid variable ' \
                 'name because it starts with "_"'


def test_RestrictingNodeTransformer__visit_Lambda__1():
    """It prevents arguments starting with `_`."""
    result = compile_restricted_exec("lambda _bad: None")
    assert result.errors == (lambda_err_msg,)


def test_RestrictingNodeTransformer__visit_Lambda__2():
    """It prevents keyword arguments starting with `_`."""
    result = compile_restricted_exec("lambda _bad=1: None")
    assert result.errors == (lambda_err_msg,)


def test_RestrictingNodeTransformer__visit_Lambda__3():
    """It prevents * arguments starting with `_`."""
    result = compile_restricted_exec("lambda *_bad: None")
    assert result.errors == (lambda_err_msg,)


def test_RestrictingNodeTransformer__visit_Lambda__4():
    """It prevents ** arguments starting with `_`."""
    result = compile_restricted_exec("lambda **_bad: None")
    assert result.errors == (lambda_err_msg,)


def test_RestrictingNodeTransformer__visit_Lambda__7():
    """It prevents arguments starting with `_` together with a single `*`."""
    result = compile_restricted_exec("lambda good, *, _bad: None")
    assert result.errors == (lambda_err_msg,)


BAD_ARG_IN_LAMBDA = """\
def check_getattr_in_lambda(arg=lambda _bad=(lambda ob, name: name): _bad2):
    42
"""


def test_RestrictingNodeTransformer__visit_Lambda__8():
    """It prevents arguments starting with `_` in weird lambdas."""
    result = compile_restricted_exec(BAD_ARG_IN_LAMBDA)
    assert lambda_err_msg in result.errors


LAMBDA_FUNC_1 = """
g = lambda x: x ** 2
"""


def test_RestrictingNodeTransformer__visit_Lambda__10():
    """Simple lambda functions are allowed."""
    restricted_globals = dict(
        g=None,
    )
    restricted_exec(LAMBDA_FUNC_1, restricted_globals)
    assert 4 == restricted_globals['g'](2)