|
5 | 5 | sys.path.append(os.path.dirname(os.path.dirname((__file__))))
|
6 | 6 | from testlib import expects
|
7 | 7 |
|
| 8 | +SOURCE = "source" |
8 | 9 | arg = "source"
|
9 | 10 | arg1 = "source1"
|
10 | 11 | arg2 = "source2"
|
@@ -269,3 +270,68 @@ def test_stararg_mixed():
|
269 | 270 | starargs_mixed(arg1, *args, *empty_args) # $ arg1
|
270 | 271 | args = (arg2, "safe")
|
271 | 272 | starargs_mixed(arg1, *empty_args, *args) # $ arg1 MISSING: arg2
|
| 273 | + |
| 274 | +# ------------------------------------------------------------------------------ |
| 275 | +# Test updating field of argument |
| 276 | +# ------------------------------------------------------------------------------ |
| 277 | + |
| 278 | +class MyClass: pass |
| 279 | + |
| 280 | +def kwargsSideEffect(**kwargs): |
| 281 | + kwargs["a"].foo = kwargs["b"] |
| 282 | + |
| 283 | +@expects(2) |
| 284 | +def test_kwargsSideEffect(): |
| 285 | + a = MyClass() |
| 286 | + kwargs = {"a": a, "b": SOURCE} |
| 287 | + kwargsSideEffect(**kwargs) |
| 288 | + SINK(a.foo) # $ MISSING: flow |
| 289 | + |
| 290 | + a = MyClass() |
| 291 | + kwargsSideEffect(a=a, b=SOURCE) |
| 292 | + SINK(a.foo) # $ MISSING: flow |
| 293 | + |
| 294 | + |
| 295 | +def keywordArgSideEffect(a, b): |
| 296 | + a.foo = b |
| 297 | + |
| 298 | +@expects(2) |
| 299 | +def test_keywordArgSideEffect(): |
| 300 | + a = MyClass() |
| 301 | + kwargs = {"a": a, "b": SOURCE} |
| 302 | + keywordArgSideEffect(**kwargs) |
| 303 | + SINK(a.foo) # $ MISSING: flow |
| 304 | + |
| 305 | + a = MyClass() |
| 306 | + keywordArgSideEffect(a=a, b=SOURCE) |
| 307 | + SINK(a.foo) # $ flow="SOURCE, l:-1 -> a.foo" |
| 308 | + |
| 309 | + |
| 310 | +def starargsSideEffect(*args): |
| 311 | + args[0].foo = args[1] |
| 312 | + |
| 313 | +@expects(2) |
| 314 | +def test_starargsSideEffect(): |
| 315 | + a = MyClass() |
| 316 | + args = (a, SOURCE) |
| 317 | + starargsSideEffect(*args) |
| 318 | + SINK(a.foo) # $ MISSING: flow |
| 319 | + |
| 320 | + a = MyClass() |
| 321 | + starargsSideEffect(a, SOURCE) |
| 322 | + SINK(a.foo) # $ MISSING: flow |
| 323 | + |
| 324 | + |
| 325 | +def positionalArgSideEffect(a, b): |
| 326 | + a.foo = b |
| 327 | + |
| 328 | +@expects(2) |
| 329 | +def test_positionalArgSideEffect(): |
| 330 | + a = MyClass() |
| 331 | + args = (a, SOURCE) |
| 332 | + positionalArgSideEffect(*args) |
| 333 | + SINK(a.foo) # $ MISSING: flow |
| 334 | + |
| 335 | + a = MyClass() |
| 336 | + positionalArgSideEffect(a, SOURCE) |
| 337 | + SINK(a.foo) # $ flow="SOURCE, l:-1 -> a.foo" |
0 commit comments