Skip to content

Commit f91e43c

Browse files
committed
Python: Add more honest test for awaited
1 parent a8a181a commit f91e43c

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

python/ql/test/experimental/dataflow/ApiGraphs/async_test.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
async def foo():
44
coro = pkg.async_func() # $ use=moduleImport("pkg").getMember("async_func").getReturn()
55
coro # $ use=moduleImport("pkg").getMember("async_func").getReturn()
6-
result = await coro # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited()
7-
result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited()
8-
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited()
6+
result = await coro # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited() awaited=moduleImport("pkg").getMember("async_func").getReturn()
7+
result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited() awaited=moduleImport("pkg").getMember("async_func").getReturn()
8+
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited() awaited=moduleImport("pkg").getMember("async_func").getReturn()
99

1010
async def bar():
11-
result = await pkg.async_func() # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited()
12-
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited()
11+
result = await pkg.async_func() # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited() awaited=moduleImport("pkg").getMember("async_func").getReturn()
12+
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn().getAwaited() awaited=moduleImport("pkg").getMember("async_func").getReturn()
1313

1414
async def test_async_with():
15-
async with pkg.async_func() as result: # $ use=moduleImport("pkg").getMember("async_func").getReturn()
16-
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn()
15+
async with pkg.async_func() as result: # $ use=moduleImport("pkg").getMember("async_func").getReturn() awaited=moduleImport("pkg").getMember("async_func").getReturn()
16+
return result # $ use=moduleImport("pkg").getMember("async_func").getReturn() awaited=moduleImport("pkg").getMember("async_func").getReturn()
1717

1818
async def test_async_for():
19-
async for _ in pkg.async_func(): # $ use=moduleImport("pkg").getMember("async_func").getReturn()
19+
async for _ in pkg.async_func(): # $ use=moduleImport("pkg").getMember("async_func").getReturn() awaited=moduleImport("pkg").getMember("async_func").getReturn()
2020
pass
2121

2222
coro = pkg.async_func() # $ use=moduleImport("pkg").getMember("async_func").getReturn()
23-
async for _ in coro: # $ use=moduleImport("pkg").getMember("async_func").getReturn()
23+
async for _ in coro: # $ use=moduleImport("pkg").getMember("async_func").getReturn() MISSING: awaited=moduleImport("pkg").getMember("async_func").getReturn()
2424
pass
2525

2626
def check_annotations():

python/ql/test/experimental/dataflow/ApiGraphs/awaited.expected

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import python
2+
import semmle.python.dataflow.new.DataFlow
3+
import TestUtilities.InlineExpectationsTest
4+
import semmle.python.ApiGraphs
5+
6+
class AwaitedTest extends InlineExpectationsTest {
7+
AwaitedTest() { this = "AwaitedTest" }
8+
9+
override string getARelevantTag() { result = "awaited" }
10+
11+
override predicate hasActualResult(Location location, string element, string tag, string value) {
12+
exists(API::Node a, DataFlow::Node n, API::Node pred |
13+
a = pred.getAwaited() and
14+
n = a.getAUse() and
15+
location = n.getLocation() and
16+
// Module variable nodes have no suitable location, so it's best to simply exclude them entirely
17+
// from the inline tests.
18+
not n instanceof DataFlow::ModuleVariableNode and
19+
exists(location.getFile().getRelativePath())
20+
|
21+
tag = "awaited" and
22+
value = pred.getPath() and
23+
element = n.toString()
24+
)
25+
}
26+
}

0 commit comments

Comments
 (0)