@@ -107,19 +107,35 @@ def test_excessive_getattr(self):
107107 # we use __dir__ and __getattr__ in class Foo to create a "magic"
108108 # class attribute 'bar'. This forces `getattr` to call __getattr__
109109 # (which is doesn't necessarily do).
110- class Foo :
110+ # Test 1: Attribute returns None
111+ class FooReturnsNone :
111112 calls = 0
112- bar = ''
113+ bar = None
113114 def __getattribute__ (self , name ):
114115 if name == 'bar' :
115116 self .calls += 1
116117 return None
117118 return super ().__getattribute__ (name )
118119
119- f = Foo ()
120- completer = rlcompleter .Completer (dict (f = f ))
121- self .assertEqual (completer .complete ('f.b' , 0 ), 'f.bar' )
122- self .assertEqual (f .calls , 1 )
120+ f1 = FooReturnsNone ()
121+ completer1 = rlcompleter .Completer (dict (f = f1 ))
122+ self .assertEqual (completer1 .complete ('f.b' , 0 ), 'f.bar' )
123+ self .assertEqual (f1 .calls , 1 )
124+
125+ # Test 2: Attribute returns non-None value
126+ class FooReturnsValue :
127+ calls = 0
128+ bar = ''
129+ def __getattribute__ (self , name ):
130+ if name == 'bar' :
131+ self .calls += 1
132+ return ''
133+ return super ().__getattribute__ (name )
134+
135+ f2 = FooReturnsValue ()
136+ completer2 = rlcompleter .Completer (dict (f = f2 ))
137+ self .assertEqual (completer2 .complete ('f.b' , 0 ), 'f.bar' )
138+ self .assertEqual (f2 .calls , 1 )
123139
124140 def test_property_method_not_called (self ):
125141 class Foo :
@@ -196,6 +212,7 @@ class Foo:
196212 completer = rlcompleter .Completer (dict (f = Foo ()))
197213 self .assertEqual (completer .complete ('f.' , 0 ), 'f.bar' )
198214
215+
199216 @unittest .mock .patch ('rlcompleter._readline_available' , False )
200217 def test_complete (self ):
201218 completer = rlcompleter .Completer ()
0 commit comments