~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/importlib/test/test_util.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from importlib import util
 
2
from . import util as test_util
 
3
import imp
 
4
import sys
 
5
import types
 
6
import unittest
 
7
 
 
8
 
 
9
class ModuleForLoaderTests(unittest.TestCase):
 
10
 
 
11
    """Tests for importlib.util.module_for_loader."""
 
12
 
 
13
    def return_module(self, name):
 
14
        fxn = util.module_for_loader(lambda self, module: module)
 
15
        return fxn(self, name)
 
16
 
 
17
    def raise_exception(self, name):
 
18
        def to_wrap(self, module):
 
19
            raise ImportError
 
20
        fxn = util.module_for_loader(to_wrap)
 
21
        try:
 
22
            fxn(self, name)
 
23
        except ImportError:
 
24
            pass
 
25
 
 
26
    def test_new_module(self):
 
27
        # Test that when no module exists in sys.modules a new module is
 
28
        # created.
 
29
        module_name = 'a.b.c'
 
30
        with test_util.uncache(module_name):
 
31
            module = self.return_module(module_name)
 
32
            self.assert_(module_name in sys.modules)
 
33
        self.assert_(isinstance(module, types.ModuleType))
 
34
        self.assertEqual(module.__name__, module_name)
 
35
 
 
36
    def test_reload(self):
 
37
        # Test that a module is reused if already in sys.modules.
 
38
        name = 'a.b.c'
 
39
        module = imp.new_module('a.b.c')
 
40
        with test_util.uncache(name):
 
41
            sys.modules[name] = module
 
42
            returned_module = self.return_module(name)
 
43
            self.assert_(sys.modules[name] is returned_module)
 
44
 
 
45
    def test_new_module_failure(self):
 
46
        # Test that a module is removed from sys.modules if added but an
 
47
        # exception is raised.
 
48
        name = 'a.b.c'
 
49
        with test_util.uncache(name):
 
50
            self.raise_exception(name)
 
51
            self.assert_(name not in sys.modules)
 
52
 
 
53
    def test_reload_failure(self):
 
54
        # Test that a failure on reload leaves the module in-place.
 
55
        name = 'a.b.c'
 
56
        module = imp.new_module(name)
 
57
        with test_util.uncache(name):
 
58
            sys.modules[name] = module
 
59
            self.raise_exception(name)
 
60
            self.assert_(sys.modules[name] is module)
 
61
 
 
62
 
 
63
class SetPackageTests(unittest.TestCase):
 
64
 
 
65
 
 
66
    """Tests for importlib.util.set_package."""
 
67
 
 
68
    def verify(self, module, expect):
 
69
        """Verify the module has the expected value for __package__ after
 
70
        passing through set_package."""
 
71
        fxn = lambda: module
 
72
        wrapped = util.set_package(fxn)
 
73
        wrapped()
 
74
        self.assert_(hasattr(module, '__package__'))
 
75
        self.assertEqual(expect, module.__package__)
 
76
 
 
77
    def test_top_level(self):
 
78
        # __package__ should be set to the empty string if a top-level module.
 
79
        # Implicitly tests when package is set to None.
 
80
        module = imp.new_module('module')
 
81
        module.__package__ = None
 
82
        self.verify(module, '')
 
83
 
 
84
    def test_package(self):
 
85
        # Test setting __package__ for a package.
 
86
        module = imp.new_module('pkg')
 
87
        module.__path__ = ['<path>']
 
88
        module.__package__ = None
 
89
        self.verify(module, 'pkg')
 
90
 
 
91
    def test_submodule(self):
 
92
        # Test __package__ for a module in a package.
 
93
        module = imp.new_module('pkg.mod')
 
94
        module.__package__ = None
 
95
        self.verify(module, 'pkg')
 
96
 
 
97
    def test_setting_if_missing(self):
 
98
        # __package__ should be set if it is missing.
 
99
        module = imp.new_module('mod')
 
100
        if hasattr(module, '__package__'):
 
101
            delattr(module, '__package__')
 
102
        self.verify(module, '')
 
103
 
 
104
    def test_leaving_alone(self):
 
105
        # If __package__ is set and not None then leave it alone.
 
106
        for value in (True, False):
 
107
            module = imp.new_module('mod')
 
108
            module.__package__ = value
 
109
            self.verify(module, value)
 
110
 
 
111
 
 
112
def test_main():
 
113
    from test import support
 
114
    support.run_unittest(ModuleForLoaderTests, SetPackageTests)
 
115
 
 
116
 
 
117
if __name__ == '__main__':
 
118
    test_main()