@@ -125,6 +125,57 @@ def test_weakref(self):
125125 gc_collect ()
126126 self .assertIs (wr (), None )
127127
128+ def test_module_getattr (self ):
129+ import test .good_getattr as gga
130+ from test .good_getattr import test
131+ self .assertEqual (test , "There is test" )
132+ self .assertEqual (gga .x , 1 )
133+ self .assertEqual (gga .y , 2 )
134+ with self .assertRaisesRegex (AttributeError ,
135+ "Deprecated, use whatever instead" ):
136+ gga .yolo
137+ self .assertEqual (gga .whatever , "There is whatever" )
138+ del sys .modules ['test.good_getattr' ]
139+
140+ def test_module_getattr_errors (self ):
141+ import test .bad_getattr as bga
142+ from test import bad_getattr2
143+ self .assertEqual (bga .x , 1 )
144+ self .assertEqual (bad_getattr2 .x , 1 )
145+ with self .assertRaises (TypeError ):
146+ bga .nope
147+ with self .assertRaises (TypeError ):
148+ bad_getattr2 .nope
149+ del sys .modules ['test.bad_getattr' ]
150+ if 'test.bad_getattr2' in sys .modules :
151+ del sys .modules ['test.bad_getattr2' ]
152+
153+ def test_module_dir (self ):
154+ import test .good_getattr as gga
155+ self .assertEqual (dir (gga ), ['a' , 'b' , 'c' ])
156+ del sys .modules ['test.good_getattr' ]
157+
158+ def test_module_dir_errors (self ):
159+ import test .bad_getattr as bga
160+ from test import bad_getattr2
161+ with self .assertRaises (TypeError ):
162+ dir (bga )
163+ with self .assertRaises (TypeError ):
164+ dir (bad_getattr2 )
165+ del sys .modules ['test.bad_getattr' ]
166+ if 'test.bad_getattr2' in sys .modules :
167+ del sys .modules ['test.bad_getattr2' ]
168+
169+ def test_module_getattr_tricky (self ):
170+ from test import bad_getattr3
171+ # these lookups should not crash
172+ with self .assertRaises (AttributeError ):
173+ bad_getattr3 .one
174+ with self .assertRaises (AttributeError ):
175+ bad_getattr3 .delgetattr
176+ if 'test.bad_getattr3' in sys .modules :
177+ del sys .modules ['test.bad_getattr3' ]
178+
128179 def test_module_repr_minimal (self ):
129180 # reprs when modules have no __file__, __name__, or __loader__
130181 m = ModuleType ('foo' )
0 commit comments