File: test_mixedmodule.py

package info (click to toggle)
pypy3 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 111,848 kB
  • sloc: python: 1,291,746; ansic: 74,281; asm: 5,187; cpp: 3,017; sh: 2,533; makefile: 544; xml: 243; lisp: 45; csh: 21; awk: 4
file content (95 lines) | stat: -rw-r--r-- 2,707 bytes parent folder | download
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
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
    assert isinstance(space.builtin_modules["test_module.sub"], SubModule)

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