Skip to content

Commit 3dec8ac

Browse files
committed
Update test_module from CPython
1 parent 44850bd commit 3dec8ac

5 files changed

Lines changed: 50 additions & 32 deletions

File tree

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,16 @@
88
import sys
99
ModuleType = type(sys)
1010

11+
1112
class FullLoader:
12-
@classmethod
13-
def module_repr(cls, m):
14-
return "<module '{}' (crafted)>".format(m.__name__)
13+
pass
14+
1515

1616
class BareLoader:
1717
pass
1818

1919

2020
class ModuleTests(unittest.TestCase):
21-
2221
def test_uninitialized(self):
2322
# An uninitialized module has no __dict__ or __name__,
2423
# and __doc__ is None
@@ -128,66 +127,60 @@ def test_weakref(self):
128127
gc_collect()
129128
self.assertIs(wr(), None)
130129

131-
# TODO: RUSTPYTHON
132-
@unittest.expectedFailure
133130
def test_module_getattr(self):
134-
import test.good_getattr as gga
135-
from test.good_getattr import test
131+
import test.test_module.good_getattr as gga
132+
from test.test_module.good_getattr import test
136133
self.assertEqual(test, "There is test")
137134
self.assertEqual(gga.x, 1)
138135
self.assertEqual(gga.y, 2)
139136
with self.assertRaisesRegex(AttributeError,
140137
"Deprecated, use whatever instead"):
141138
gga.yolo
142139
self.assertEqual(gga.whatever, "There is whatever")
143-
del sys.modules['test.good_getattr']
140+
del sys.modules['test.test_module.good_getattr']
144141

145-
# TODO: RUSTPYTHON
146-
@unittest.expectedFailure
147142
def test_module_getattr_errors(self):
148-
import test.bad_getattr as bga
149-
from test import bad_getattr2
143+
import test.test_module.bad_getattr as bga
144+
from test.test_module import bad_getattr2
150145
self.assertEqual(bga.x, 1)
151146
self.assertEqual(bad_getattr2.x, 1)
152147
with self.assertRaises(TypeError):
153148
bga.nope
154149
with self.assertRaises(TypeError):
155150
bad_getattr2.nope
156-
del sys.modules['test.bad_getattr']
157-
if 'test.bad_getattr2' in sys.modules:
158-
del sys.modules['test.bad_getattr2']
151+
del sys.modules['test.test_module.bad_getattr']
152+
if 'test.test_module.bad_getattr2' in sys.modules:
153+
del sys.modules['test.test_module.bad_getattr2']
159154

160155
# TODO: RUSTPYTHON
161156
@unittest.expectedFailure
162157
def test_module_dir(self):
163-
import test.good_getattr as gga
158+
import test.test_module.good_getattr as gga
164159
self.assertEqual(dir(gga), ['a', 'b', 'c'])
165-
del sys.modules['test.good_getattr']
160+
del sys.modules['test.test_module.good_getattr']
166161

167162
# TODO: RUSTPYTHON
168163
@unittest.expectedFailure
169164
def test_module_dir_errors(self):
170-
import test.bad_getattr as bga
171-
from test import bad_getattr2
165+
import test.test_module.bad_getattr as bga
166+
from test.test_module import bad_getattr2
172167
with self.assertRaises(TypeError):
173168
dir(bga)
174169
with self.assertRaises(TypeError):
175170
dir(bad_getattr2)
176-
del sys.modules['test.bad_getattr']
177-
if 'test.bad_getattr2' in sys.modules:
178-
del sys.modules['test.bad_getattr2']
171+
del sys.modules['test.test_module.bad_getattr']
172+
if 'test.test_module.bad_getattr2' in sys.modules:
173+
del sys.modules['test.test_module.bad_getattr2']
179174

180-
# TODO: RUSTPYTHON
181-
@unittest.expectedFailure
182175
def test_module_getattr_tricky(self):
183-
from test import bad_getattr3
176+
from test.test_module import bad_getattr3
184177
# these lookups should not crash
185178
with self.assertRaises(AttributeError):
186179
bad_getattr3.one
187180
with self.assertRaises(AttributeError):
188181
bad_getattr3.delgetattr
189-
if 'test.bad_getattr3' in sys.modules:
190-
del sys.modules['test.bad_getattr3']
182+
if 'test.test_module.bad_getattr3' in sys.modules:
183+
del sys.modules['test.test_module.bad_getattr3']
191184

192185
def test_module_repr_minimal(self):
193186
# reprs when modules have no __file__, __name__, or __loader__
@@ -249,23 +242,21 @@ def test_module_repr_with_full_loader(self):
249242
# Yes, a class not an instance.
250243
m.__loader__ = FullLoader
251244
self.assertEqual(
252-
repr(m), "<module 'foo' (crafted)>")
245+
repr(m), f"<module 'foo' (<class '{__name__}.FullLoader'>)>")
253246

254247
def test_module_repr_with_bare_loader_and_filename(self):
255-
# Because the loader has no module_repr(), use the file name.
256248
m = ModuleType('foo')
257249
# Yes, a class not an instance.
258250
m.__loader__ = BareLoader
259251
m.__file__ = '/tmp/foo.py'
260252
self.assertEqual(repr(m), "<module 'foo' from '/tmp/foo.py'>")
261253

262254
def test_module_repr_with_full_loader_and_filename(self):
263-
# Even though the module has an __file__, use __loader__.module_repr()
264255
m = ModuleType('foo')
265256
# Yes, a class not an instance.
266257
m.__loader__ = FullLoader
267258
m.__file__ = '/tmp/foo.py'
268-
self.assertEqual(repr(m), "<module 'foo' (crafted)>")
259+
self.assertEqual(repr(m), "<module 'foo' from '/tmp/foo.py'>")
269260

270261
def test_module_repr_builtin(self):
271262
self.assertEqual(repr(sys), "<module 'sys' (built-in)>")
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
x = 1
2+
3+
__getattr__ = "Surprise!"
4+
__dir__ = "Surprise again!"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def __getattr__():
2+
"Bad one"
3+
4+
x = 1
5+
6+
def __dir__(bad_sig):
7+
return []
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
def __getattr__(name):
2+
if name != 'delgetattr':
3+
raise AttributeError
4+
del globals()['__getattr__']
5+
raise AttributeError
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
x = 1
2+
3+
def __dir__():
4+
return ['a', 'b', 'c']
5+
6+
def __getattr__(name):
7+
if name == "yolo":
8+
raise AttributeError("Deprecated, use whatever instead")
9+
return f"There is {name}"
10+
11+
y = 2

0 commit comments

Comments
 (0)