Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_module.py @ 84007:dbfbdf2b5c19 3.3
Fix #17967: For ftp urls CWD to target instead of hopping to each directory
towards target. This fixes a bug where target is accessible, but parent
directories are restricted.
| author | Senthil Kumaran <senthil@uthcode.com> |
|---|---|
| date | Sat, 01 Jun 2013 08:27:06 -0700 |
| parents | 702009f3c0b1 |
| children | e39a8f8ceb9f |
| rev | line source |
|---|---|
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Test the module type |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
2 import unittest |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
3 from test.support import run_unittest, gc_collect |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import sys |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
6 ModuleType = type(sys) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
8 class FullLoader: |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
9 @classmethod |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
10 def module_repr(cls, m): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
11 return "<module '{}' (crafted)>".format(m.__name__) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
12 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
13 class BareLoader: |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
14 pass |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
15 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
16 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
17 class ModuleTests(unittest.TestCase): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
18 def test_uninitialized(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
19 # An uninitialized module has no __dict__ or __name__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
20 # and __doc__ is None |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
21 foo = ModuleType.__new__(ModuleType) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
22 self.assertTrue(foo.__dict__ is None) |
|
55647
4c51c4bffb21
Merged revisions 74459 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55593
diff
changeset
|
23 self.assertRaises(SystemError, dir, foo) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
24 try: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
25 s = foo.__name__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
26 self.fail("__name__ = %s" % repr(s)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
27 except AttributeError: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
28 pass |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
29 self.assertEqual(foo.__doc__, ModuleType.__doc__) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
31 def test_no_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
32 # Regularly initialized module, no docstring |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
33 foo = ModuleType("foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
34 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
35 self.assertEqual(foo.__doc__, None) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
36 self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
38 def test_ascii_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
39 # ASCII docstring |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
40 foo = ModuleType("foo", "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
41 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
42 self.assertEqual(foo.__doc__, "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
43 self.assertEqual(foo.__dict__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
44 {"__name__": "foo", "__doc__": "foodoc"}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
46 def test_unicode_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
47 # Unicode docstring |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
48 foo = ModuleType("foo", "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
49 self.assertEqual(foo.__name__, "foo") |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
50 self.assertEqual(foo.__doc__, "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
51 self.assertEqual(foo.__dict__, |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
52 {"__name__": "foo", "__doc__": "foodoc\u1234"}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
54 def test_reinit(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
55 # Reinitialization should not replace the __dict__ |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
56 foo = ModuleType("foo", "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
57 foo.bar = 42 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
58 d = foo.__dict__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
59 foo.__init__("foo", "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
60 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
61 self.assertEqual(foo.__doc__, "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
62 self.assertEqual(foo.bar, 42) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
63 self.assertEqual(foo.__dict__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
64 {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
65 self.assertTrue(foo.__dict__ is d) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
67 @unittest.expectedFailure |
|
57210
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
68 def test_dont_clear_dict(self): |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
69 # See issue 7140. |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
70 def f(): |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
71 foo = ModuleType("foo") |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
72 foo.bar = 4 |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
73 return foo |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
74 gc_collect() |
|
57210
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
75 self.assertEqual(f().__dict__["bar"], 4) |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
76 |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
77 def test_clear_dict_in_ref_cycle(self): |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
78 destroyed = [] |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
79 m = ModuleType("foo") |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
80 m.destroyed = destroyed |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
81 s = """class A: |
|
73991
c9ae0eb66959
fix this test to actually test something (closes #13606)
Benjamin Peterson <benjamin@python.org>
parents:
65231
diff
changeset
|
82 def __init__(self, l): |
|
c9ae0eb66959
fix this test to actually test something (closes #13606)
Benjamin Peterson <benjamin@python.org>
parents:
65231
diff
changeset
|
83 self.l = l |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
84 def __del__(self): |
|
73991
c9ae0eb66959
fix this test to actually test something (closes #13606)
Benjamin Peterson <benjamin@python.org>
parents:
65231
diff
changeset
|
85 self.l.append(1) |
|
c9ae0eb66959
fix this test to actually test something (closes #13606)
Benjamin Peterson <benjamin@python.org>
parents:
65231
diff
changeset
|
86 a = A(destroyed)""" |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
87 exec(s, m.__dict__) |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
88 del m |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
89 gc_collect() |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
90 self.assertEqual(destroyed, [1]) |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
91 |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
92 def test_module_repr_minimal(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
93 # reprs when modules have no __file__, __name__, or __loader__ |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
94 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
95 del m.__name__ |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
96 self.assertEqual(repr(m), "<module '?'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
97 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
98 def test_module_repr_with_name(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
99 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
100 self.assertEqual(repr(m), "<module 'foo'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
101 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
102 def test_module_repr_with_name_and_filename(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
103 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
104 m.__file__ = '/tmp/foo.py' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
105 self.assertEqual(repr(m), "<module 'foo' from '/tmp/foo.py'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
106 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
107 def test_module_repr_with_filename_only(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
108 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
109 del m.__name__ |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
110 m.__file__ = '/tmp/foo.py' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
111 self.assertEqual(repr(m), "<module '?' from '/tmp/foo.py'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
112 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
113 def test_module_repr_with_bare_loader_but_no_name(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
114 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
115 del m.__name__ |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
116 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
117 m.__loader__ = BareLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
118 self.assertEqual( |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
119 repr(m), "<module '?' (<class 'test.test_module.BareLoader'>)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
120 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
121 def test_module_repr_with_full_loader_but_no_name(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
122 # m.__loader__.module_repr() will fail because the module has no |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
123 # m.__name__. This exception will get suppressed and instead the |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
124 # loader's repr will be used. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
125 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
126 del m.__name__ |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
127 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
128 m.__loader__ = FullLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
129 self.assertEqual( |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
130 repr(m), "<module '?' (<class 'test.test_module.FullLoader'>)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
131 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
132 def test_module_repr_with_bare_loader(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
133 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
134 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
135 m.__loader__ = BareLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
136 self.assertEqual( |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
137 repr(m), "<module 'foo' (<class 'test.test_module.BareLoader'>)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
138 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
139 def test_module_repr_with_full_loader(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
140 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
141 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
142 m.__loader__ = FullLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
143 self.assertEqual( |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
144 repr(m), "<module 'foo' (crafted)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
145 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
146 def test_module_repr_with_bare_loader_and_filename(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
147 # Because the loader has no module_repr(), use the file name. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
148 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
149 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
150 m.__loader__ = BareLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
151 m.__file__ = '/tmp/foo.py' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
152 self.assertEqual(repr(m), "<module 'foo' from '/tmp/foo.py'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
153 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
154 def test_module_repr_with_full_loader_and_filename(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
155 # Even though the module has an __file__, use __loader__.module_repr() |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
156 m = ModuleType('foo') |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
157 # Yes, a class not an instance. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
158 m.__loader__ = FullLoader |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
159 m.__file__ = '/tmp/foo.py' |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
160 self.assertEqual(repr(m), "<module 'foo' (crafted)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
161 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
162 def test_module_repr_builtin(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
163 self.assertEqual(repr(sys), "<module 'sys' (built-in)>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
164 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
165 def test_module_repr_source(self): |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
166 r = repr(unittest) |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
167 self.assertEqual(r[:25], "<module 'unittest' from '") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
168 self.assertEqual(r[-13:], "__init__.py'>") |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
169 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
170 # frozen and namespace module reprs are tested in importlib. |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
171 |
|
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
172 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
173 def test_main(): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
174 run_unittest(ModuleTests) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
175 |
|
77126
702009f3c0b1
issue 14660: Implement PEP 420, namespace packages.
Eric V. Smith <eric@trueblade.com>
parents:
75097
diff
changeset
|
176 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
177 if __name__ == '__main__': |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
178 test_main() |
