annotate Lib/test/test_pkgimport.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b36cb4602e21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 import os, sys, string, random, tempfile, unittest
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
24364
aa0d2d51fbde Get rid of relative imports in all unittests. Now anything that
Barry Warsaw <barry@python.org>
parents: 20654
diff changeset
3 from test.test_support import run_unittest
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 class TestImport(unittest.TestCase):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 def __init__(self, *args, **kw):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 self.package_name = 'PACKAGE_'
63556
dba99828d91c Merged revisions 77942,79023 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 32885
diff changeset
9 while self.package_name in sys.modules:
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 self.package_name += random.choose(string.letters)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 self.module_name = self.package_name + '.foo'
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 unittest.TestCase.__init__(self, *args, **kw)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 def remove_modules(self):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 for module_name in (self.package_name, self.module_name):
63556
dba99828d91c Merged revisions 77942,79023 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 32885
diff changeset
16 if module_name in sys.modules:
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 del sys.modules[module_name]
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 def setUp(self):
24710
11c701038805 Massive changes from SF 589982 (tempfile.py rewrite, by Zack
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
20 self.test_dir = tempfile.mkdtemp()
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 sys.path.append(self.test_dir)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 self.package_dir = os.path.join(self.test_dir,
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 self.package_name)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 os.mkdir(self.package_dir)
65767
3856c61b5c8b Merged revisions 85984 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58669
diff changeset
25 open(os.path.join(
3856c61b5c8b Merged revisions 85984 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58669
diff changeset
26 self.package_dir, '__init__'+os.extsep+'py'), 'w').close()
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20013
diff changeset
27 self.module_path = os.path.join(self.package_dir, 'foo'+os.extsep+'py')
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 def tearDown(self):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 for file in os.listdir(self.package_dir):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 os.remove(os.path.join(self.package_dir, file))
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 os.rmdir(self.package_dir)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 os.rmdir(self.test_dir)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 self.assertNotEqual(sys.path.count(self.test_dir), 0)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 sys.path.remove(self.test_dir)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 self.remove_modules()
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 def rewrite_file(self, contents):
18943
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
39 for extension in "co":
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
40 compiled_path = self.module_path + extension
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
41 if os.path.exists(compiled_path):
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
42 os.remove(compiled_path)
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
43 f = open(self.module_path, 'w')
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
44 f.write(contents)
e01d29639d8e This test failed under python -O.
Tim Peters <tim.peters@gmail.com>
parents: 18937
diff changeset
45 f.close()
19119
600a9a2b7a18 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 18943
diff changeset
46
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 def test_package_import__semantics(self):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # Generate a couple of broken modules to try importing.
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 # ...try loading the module when there's a SyntaxError
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 self.rewrite_file('for')
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 try: __import__(self.module_name)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 except SyntaxError: pass
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 else: raise RuntimeError, 'Failed to induce SyntaxError'
58669
ff040880d1be #7092: Silence more py3k warnings. Patch by Florent Xicluna.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 58198
diff changeset
56 self.assertNotIn(self.module_name, sys.modules)
63556
dba99828d91c Merged revisions 77942,79023 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 32885
diff changeset
57 self.assertFalse(hasattr(sys.modules[self.package_name], 'foo'))
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 # ...make up a variable name that isn't bound in __builtins__
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 var = 'a'
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 while var in dir(__builtins__):
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 var += random.choose(string.letters)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 # ...make a module that just contains that
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 self.rewrite_file(var)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
66
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 try: __import__(self.module_name)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 except NameError: pass
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 else: raise RuntimeError, 'Failed to induce NameError.'
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 # ...now change the module so that the NameError doesn't
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 # happen
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 self.rewrite_file('%s = 1' % var)
32885
2aa7aef4e403 Removed reliance on damaged module object appearing in sys.modules
Tim Peters <tim.peters@gmail.com>
parents: 24710
diff changeset
74 module = __import__(self.module_name).foo
18937
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 self.assertEqual(getattr(module, var), 1)
f858f987e772 Unit test for improved package import semantics.
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
20013
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
77
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
78 def test_main():
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
79 run_unittest(TestImport)
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
80
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
81
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
82 if __name__ == "__main__":
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19119
diff changeset
83 test_main()