@@ -161,7 +161,7 @@ def test_nested_obj_method():
161161 SINK (a .obj .foo ) # $ MISSING: flow
162162
163163# ------------------------------------------------------------------------------
164- # In global scope
164+ # Global scope
165165# ------------------------------------------------------------------------------
166166
167167def func_defined_before ():
@@ -178,3 +178,111 @@ def func_defined_after():
178178def test_global_funcs ():
179179 func_defined_before ()
180180 func_defined_after ()
181+
182+ # ------------------------------------------------------------------------------
183+ # All the other tests, but also in global scope.
184+ #
185+ # You might think that these are just the same... but it turns out they are not :O
186+ # ------------------------------------------------------------------------------
187+
188+
189+ myobj = MyObj ("OK" )
190+
191+ setFoo (myobj , SOURCE )
192+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
193+
194+
195+
196+ myobj = MyObj ("OK" )
197+
198+ myobj .setFoo (SOURCE )
199+ SINK (myobj .foo ) # $ MISSING: flow
200+
201+
202+
203+ myobj = MyObj (NONSOURCE )
204+ myobj .foo = SOURCE
205+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
206+
207+
208+
209+ myobj = MyObj (NONSOURCE )
210+ myobj .foo = SOURCE
211+ myobj .foo = NONSOURCE
212+ SINK_F (myobj .foo )
213+
214+
215+
216+ myobj = MyObj (NONSOURCE )
217+ myobj .foo = SOURCE
218+ if cond :
219+ myobj .foo = NONSOURCE
220+ SINK_F (myobj .foo )
221+ SINK (myobj .foo ) # $ flow="SOURCE, l:-4 -> myobj.foo"
222+
223+
224+
225+ myobj = MyObj (NONSOURCE )
226+ myobj .foo = SOURCE
227+ if cond :
228+ myobj .foo = NONSOURCE
229+ SINK_F (myobj .foo )
230+ else :
231+ myobj .foo = NONSOURCE
232+ SINK_F (myobj .foo )
233+ SINK_F (myobj .foo )
234+
235+
236+
237+ myobj = MyObj (NONSOURCE )
238+ myobj .foo = SOURCE
239+ SINK (getattr (myobj , "foo" )) # $ flow="SOURCE, l:-1 -> getattr(..)"
240+
241+
242+
243+ myobj = MyObj (NONSOURCE )
244+ setattr (myobj , "foo" , SOURCE )
245+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
246+
247+
248+
249+ myobj = MyObj (NONSOURCE )
250+ setattr (myobj , "foo" , SOURCE )
251+ SINK (getattr (myobj , "foo" )) # $ flow="SOURCE, l:-1 -> getattr(..)"
252+
253+
254+
255+ myobj = MyObj (NONSOURCE )
256+ setattr (myobj , "foo" , SOURCE )
257+ setattr (myobj , "foo" , NONSOURCE )
258+ SINK_F (getattr (myobj , "foo" ))
259+
260+
261+
262+ obj = MyObj (SOURCE )
263+ SINK (obj .foo ) # $ flow="SOURCE, l:-1 -> obj.foo"
264+
265+
266+
267+ obj = MyObj (foo = SOURCE )
268+ SINK (obj .foo ) # $ flow="SOURCE, l:-1 -> obj.foo"
269+
270+
271+ SINK (fields_with_local_flow (SOURCE )) # $ flow="SOURCE -> fields_with_local_flow(..)"
272+
273+ # ------------------------------------------------------------------------------
274+ # Nested Object
275+ # ------------------------------------------------------------------------------
276+
277+
278+ x = SOURCE
279+ a = NestedObj ()
280+ a .obj .foo = x
281+ SINK (a .obj .foo ) # $ flow="SOURCE, l:-3 -> a.obj.foo"
282+
283+
284+
285+ x = SOURCE
286+ a = NestedObj ()
287+ a .getObj ().foo = x
288+ SINK (a .obj .foo ) # $ MISSING: flow
0 commit comments