blob: dbd229bbcf4882c838e08fc88f6cc40beedd9198 [file] [log] [blame]
Guido van Rossum4114a4a2001-10-18 18:49:37 +00001# Test the frozen module defined in frozen.c.
2
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003from test.support import captured_stdout, run_unittest
Thomas Woutersed03b412007-08-28 21:37:11 +00004import unittest
Georg Brandl1b37e872010-03-14 10:45:50 +00005import sys
Guido van Rossum4114a4a2001-10-18 18:49:37 +00006
Thomas Woutersed03b412007-08-28 21:37:11 +00007class FrozenTests(unittest.TestCase):
Brett Cannonfd074152012-04-14 14:10:13 -04008
9 module_attrs = frozenset(['__builtins__', '__cached__', '__doc__',
10 '__file__', '__loader__', '__name__',
11 '__package__'])
12 package_attrs = frozenset(list(module_attrs) + ['__path__'])
13
Thomas Woutersed03b412007-08-28 21:37:11 +000014 def test_frozen(self):
Victor Stinnerc77b9312011-05-16 16:29:35 +020015 with captured_stdout() as stdout:
16 try:
17 import __hello__
18 except ImportError as x:
19 self.fail("import __hello__ failed:" + str(x))
20 self.assertEqual(__hello__.initialized, True)
Brett Cannonfd074152012-04-14 14:10:13 -040021 expect = set(self.module_attrs)
22 expect.add('initialized')
23 self.assertEqual(set(dir(__hello__)), expect)
Victor Stinnerc77b9312011-05-16 16:29:35 +020024 self.assertEqual(stdout.getvalue(), 'Hello world!\n')
Guido van Rossum4114a4a2001-10-18 18:49:37 +000025
Victor Stinnerc77b9312011-05-16 16:29:35 +020026 with captured_stdout() as stdout:
27 try:
28 import __phello__
29 except ImportError as x:
30 self.fail("import __phello__ failed:" + str(x))
31 self.assertEqual(__phello__.initialized, True)
Brett Cannonfd074152012-04-14 14:10:13 -040032 expect = set(self.package_attrs)
33 expect.add('initialized')
Victor Stinnerc77b9312011-05-16 16:29:35 +020034 if not "__phello__.spam" in sys.modules:
Brett Cannonfd074152012-04-14 14:10:13 -040035 self.assertEqual(set(dir(__phello__)), expect)
Victor Stinner9cd66262011-05-16 16:32:33 +020036 else:
Brett Cannonfd074152012-04-14 14:10:13 -040037 expect.add('spam')
38 self.assertEqual(set(dir(__phello__)), expect)
Victor Stinnerc77b9312011-05-16 16:29:35 +020039 self.assertEqual(__phello__.__path__, [__phello__.__name__])
40 self.assertEqual(stdout.getvalue(), 'Hello world!\n')
Guido van Rossum4114a4a2001-10-18 18:49:37 +000041
Victor Stinnerc77b9312011-05-16 16:29:35 +020042 with captured_stdout() as stdout:
43 try:
44 import __phello__.spam
45 except ImportError as x:
46 self.fail("import __phello__.spam failed:" + str(x))
47 self.assertEqual(__phello__.spam.initialized, True)
Brett Cannonfd074152012-04-14 14:10:13 -040048 spam_expect = set(self.module_attrs)
49 spam_expect.add('initialized')
50 self.assertEqual(set(dir(__phello__.spam)), spam_expect)
51 phello_expect = set(self.package_attrs)
52 phello_expect.add('initialized')
53 phello_expect.add('spam')
54 self.assertEqual(set(dir(__phello__)), phello_expect)
Victor Stinnerc77b9312011-05-16 16:29:35 +020055 self.assertEqual(stdout.getvalue(), 'Hello world!\n')
Guido van Rossum4114a4a2001-10-18 18:49:37 +000056
Christian Heimesf19169f2007-11-12 19:19:07 +000057 try:
58 import __phello__.foo
59 except ImportError:
60 pass
61 else:
62 self.fail("import __phello__.foo should have failed")
Thomas Woutersed03b412007-08-28 21:37:11 +000063
Ronald Oussoren94f25282010-05-05 19:11:21 +000064 try:
65 import __phello__.foo
66 except ImportError:
67 pass
68 else:
69 self.fail("import __phello__.foo should have failed")
Christian Heimesdae2a892008-04-19 00:55:37 +000070
71 del sys.modules['__hello__']
72 del sys.modules['__phello__']
73 del sys.modules['__phello__.spam']
74
Thomas Woutersed03b412007-08-28 21:37:11 +000075def test_main():
76 run_unittest(FrozenTests)
Guido van Rossum3b7210d2007-10-15 00:25:56 +000077
78if __name__ == "__main__":
79 test_main()