File: test_module.py

package info (click to toggle)
streamlink 8.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,564 kB
  • sloc: python: 51,188; sh: 184; makefile: 152
file content (77 lines) | stat: -rw-r--r-- 2,203 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
import sys
from pathlib import Path

import pytest

from streamlink.utils.module import load_module


# used in the import test to verify that this module was imported
__test_marker__ = "test_marker"

_here = Path(__file__).parent


@pytest.mark.parametrize(
    ("name", "path", "expected"),
    [
        pytest.param(
            "some_module",
            _here / "does_not_exist",
            ImportError(
                f"Not a package path: {_here / 'does_not_exist'}",
                path=str(_here / "does_not_exist"),
            ),
            id="no-package",
        ),
        pytest.param(
            "does_not_exist",
            _here,
            ImportError(
                "No module named 'does_not_exist'",
                name="does_not_exist",
                path=str(_here),
            ),
            id="no-module",
        ),
    ],
)
def test_load_module_importerror(name: str, path: Path, expected: ImportError):
    with pytest.raises(ImportError) as cm:
        load_module(name, path)
    assert cm.value.msg == expected.msg
    assert cm.value.name == expected.name
    assert cm.value.path == expected.path


def test_load_module():
    name = __name__.split(".")[-1]

    try:
        assert __name__ in sys.modules
        assert name not in sys.modules

        prev = sys.modules[__name__]
        mod1 = load_module(name, Path(__file__).parent)
        assert name in sys.modules
        assert mod1 is sys.modules[name]
        assert prev is sys.modules[__name__]
        assert mod1 is not sys.modules[__name__]

        assert "__test_marker__" in mod1.__dict__
        assert mod1.__test_marker__ == sys.modules[__name__].__test_marker__

        mod2 = load_module(name, Path(__file__).parent)
        assert mod2 is mod1

        mod3 = load_module(name, Path(__file__).parent, override=True)
        assert mod1 is not sys.modules[name]
        assert mod3 is sys.modules[name]
        assert prev is sys.modules[__name__]
        assert mod3 is not sys.modules[__name__]

        assert "__test_marker__" in mod3.__dict__
        assert mod3.__test_marker__ == sys.modules[__name__].__test_marker__

    finally:
        sys.modules.pop(name, None)