File: test_mixedmodule.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (98 lines) | stat: -rw-r--r-- 2,787 bytes parent folder | download | duplicates (4)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import pytest

from pypy.tool.pytest.objspace import maketestobjspace
from pypy.interpreter.mixedmodule import MixedModule

@pytest.fixture()
def space():
    # We need a fresh space for each test here
    return maketestobjspace()

def test_install(space):
    class Module(MixedModule):
        interpleveldefs = {}
        appleveldefs = {}

    m = Module(space, space.wrap("test_module"))
    m.install()

    assert space.builtin_modules["test_module"] is m

def test_submodule(space):
    class SubModule(MixedModule):
        interpleveldefs = {}
        appleveldefs = {}

    class Module(MixedModule):
        interpleveldefs = {}
        appleveldefs = {}
        submodules = {
            "sub": SubModule
        }

    m = Module(space, space.wrap("test_module"))
    m.install()

    assert space.builtin_modules["test_module"] is m
    submod = space.builtin_modules["test_module.sub"]
    assert isinstance(submod, SubModule)
    assert submod.get_applevel_name() == "test_module.sub"


class AppTestMixedModule(object):
    pytestmark = pytest.mark.skipif("config.option.runappdirect")

    def setup_class(cls):
        space = cls.space

        class SubModule(MixedModule):
            interpleveldefs = {
                "value": "space.wrap(14)"
            }
            appleveldefs = {}

        class Module(MixedModule):
            interpleveldefs = {}
            appleveldefs = {}
            submodules = {
                "sub": SubModule
            }

        m = Module(space, space.wrap("test_module"))
        m.install()
        # Python3's importlib relies on sys.builtin_module_names, the
        # call to m.install() above is not enough because the object
        # space was already initialized.
        space.setattr(space.sys, space.wrap('builtin_module_names'),
                      space.add(space.sys.get('builtin_module_names'),
                                space.newtuple([
                                    space.wrap("test_module")])))

    def teardown_class(cls):
        from pypy.module.sys.state import get

        space = cls.space
        del space.builtin_modules["test_module"]
        del space.builtin_modules["test_module.sub"]
        w_modules = get(space).w_modules
        space.delitem(w_modules, space.wrap("test_module"))
        space.delitem(w_modules, space.wrap("test_module.sub"))

    def test_attibute(self):
        import test_module

        assert hasattr(test_module, "sub")

    def test_submodule_import(self):
        from test_module import sub

    def test_direct_import(self):
        import test_module.sub

        assert test_module.sub
        assert test_module.sub.value == 14

    def test_import_from(self):
        from test_module.sub import value

        assert value == 14