(Merge 3.2) Issue #11614: Fix importlib tests for the new __hello__ module

This commit is contained in:
Victor Stinner 2011-05-16 17:00:41 +02:00
commit 82f46144cc
1 changed files with 17 additions and 9 deletions

View File

@ -3,20 +3,21 @@ import imp
import unittest import unittest
from .. import abc from .. import abc
from .. import util from .. import util
from test.support import captured_stdout
class LoaderTests(abc.LoaderTests): class LoaderTests(abc.LoaderTests):
def test_module(self): def test_module(self):
with util.uncache('__hello__'): with util.uncache('__hello__'), captured_stdout() as stdout:
module = machinery.FrozenImporter.load_module('__hello__') module = machinery.FrozenImporter.load_module('__hello__')
check = {'__name__': '__hello__', '__file__': '<frozen>', check = {'__name__': '__hello__', '__file__': '<frozen>',
'__package__': '', '__loader__': machinery.FrozenImporter} '__package__': '', '__loader__': machinery.FrozenImporter}
for attr, value in check.items(): for attr, value in check.items():
self.assertEqual(getattr(module, attr), value) self.assertEqual(getattr(module, attr), value)
self.assertEqual(stdout.getvalue(), 'Hello world!\n')
def test_package(self): def test_package(self):
with util.uncache('__phello__'): with util.uncache('__phello__'), captured_stdout() as stdout:
module = machinery.FrozenImporter.load_module('__phello__') module = machinery.FrozenImporter.load_module('__phello__')
check = {'__name__': '__phello__', '__file__': '<frozen>', check = {'__name__': '__phello__', '__file__': '<frozen>',
'__package__': '__phello__', '__path__': ['__phello__'], '__package__': '__phello__', '__path__': ['__phello__'],
@ -26,9 +27,11 @@ class LoaderTests(abc.LoaderTests):
self.assertEqual(attr_value, value, self.assertEqual(attr_value, value,
"for __phello__.%s, %r != %r" % "for __phello__.%s, %r != %r" %
(attr, attr_value, value)) (attr, attr_value, value))
self.assertEqual(stdout.getvalue(), 'Hello world!\n')
def test_lacking_parent(self): def test_lacking_parent(self):
with util.uncache('__phello__', '__phello__.spam'): with util.uncache('__phello__', '__phello__.spam'), \
captured_stdout() as stdout:
module = machinery.FrozenImporter.load_module('__phello__.spam') module = machinery.FrozenImporter.load_module('__phello__.spam')
check = {'__name__': '__phello__.spam', '__file__': '<frozen>', check = {'__name__': '__phello__.spam', '__file__': '<frozen>',
'__package__': '__phello__', '__package__': '__phello__',
@ -38,12 +41,15 @@ class LoaderTests(abc.LoaderTests):
self.assertEqual(attr_value, value, self.assertEqual(attr_value, value,
"for __phello__.spam.%s, %r != %r" % "for __phello__.spam.%s, %r != %r" %
(attr, attr_value, value)) (attr, attr_value, value))
self.assertEqual(stdout.getvalue(), 'Hello world!\n')
def test_module_reuse(self): def test_module_reuse(self):
with util.uncache('__hello__'): with util.uncache('__hello__'), captured_stdout() as stdout:
module1 = machinery.FrozenImporter.load_module('__hello__') module1 = machinery.FrozenImporter.load_module('__hello__')
module2 = machinery.FrozenImporter.load_module('__hello__') module2 = machinery.FrozenImporter.load_module('__hello__')
self.assertTrue(module1 is module2) self.assertTrue(module1 is module2)
self.assertEqual(stdout.getvalue(),
'Hello world!\nHello world!\n')
def test_state_after_failure(self): def test_state_after_failure(self):
# No way to trigger an error in a frozen module. # No way to trigger an error in a frozen module.
@ -62,10 +68,12 @@ class InspectLoaderTests(unittest.TestCase):
def test_get_code(self): def test_get_code(self):
# Make sure that the code object is good. # Make sure that the code object is good.
name = '__hello__' name = '__hello__'
with captured_stdout() as stdout:
code = machinery.FrozenImporter.get_code(name) code = machinery.FrozenImporter.get_code(name)
mod = imp.new_module(name) mod = imp.new_module(name)
exec(code, mod.__dict__) exec(code, mod.__dict__)
self.assertTrue(hasattr(mod, 'initialized')) self.assertTrue(hasattr(mod, 'initialized'))
self.assertEqual(stdout.getvalue(), 'Hello world!\n')
def test_get_source(self): def test_get_source(self):
# Should always return None. # Should always return None.