1# mode: run
2# ticket: 731
3# tag: locals, vars, dir
4
5cimport cython
6
7LOCALS = locals()
8GLOBALS = globals()
9DIR_SAME = sorted(dir()) == sorted(globals().keys())
10
11
12def test_module_locals_and_dir():
13    """
14    >>> LOCALS is GLOBALS
15    True
16    >>> DIR_SAME
17    True
18    """
19
20
21def test_class_locals_and_dir():
22    """
23    >>> klass = test_class_locals_and_dir()
24    >>> 'visible' in klass.locs and 'not_visible' not in klass.locs
25    True
26    >>> klass.names
27    ['__module__', '__qualname__', 'visible']
28    """
29    not_visible = 1234
30    class Foo:
31        visible = 4321
32        names = dir()
33        locs = locals()
34    return Foo
35
36
37@cython.test_fail_if_path_exists('//SortedDictKeysNode')
38def test_class_dir_contains():
39    """
40    >>> klass = test_class_dir_contains()
41    True
42    False
43    True
44    False
45    True
46    False
47    True
48    True
49    True
50    """
51    not_visible = 1234
52    class Foo:
53        visible = 4321
54        print('visible' in dir())
55        print('not_visible' in dir())
56        print('not_visible' not in dir())
57        print('locs' in dir())
58        print('visible' in locals())
59        print('locs' in locals())
60        locs = locals()
61        print('visible' in dir())
62        print('locs' in dir())
63        print('locs' in locals())
64    return Foo
65