Skip to content

Commit 19796a4

Browse files
committed
Python: Improve tests and make validTest happy
1 parent cc0661b commit 19796a4

File tree

4 files changed

+52
-34
lines changed

4 files changed

+52
-34
lines changed

python/ql/test/experimental/dataflow/coverage/argumentPassing.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,21 @@
1414
arg7 = "source7"
1515

1616

17-
def SINK(x, expected=arg):
18-
if x == expected:
17+
def SINK_TEST(x, test):
18+
if test(x):
1919
print("OK")
2020
else:
2121
print("Unexpected flow", x)
2222

2323

24+
def SINK(x, expected=arg):
25+
SINK_TEST(x, test=lambda x: x == expected)
26+
27+
28+
def SINK_F(x, unexpected=arg):
29+
SINK_TEST(x, test=lambda x: x != unexpected)
30+
31+
2432
def SINK1(x):
2533
SINK(x, expected=arg1)
2634

@@ -29,6 +37,10 @@ def SINK2(x):
2937
SINK(x, expected=arg2)
3038

3139

40+
def SINK2_F(x):
41+
SINK_F(x, unexpected=arg2)
42+
43+
3244
def SINK3(x):
3345
SINK(x, expected=arg3)
3446

@@ -66,13 +78,17 @@ def argument_passing(
6678
SINK4(d)
6779
SINK5(e)
6880
SINK6(f)
69-
SINK7(g["g"])
81+
try:
82+
SINK7(g["g"])
83+
except:
84+
print("OK")
7085

7186

7287
@expects(7)
7388
def test_argument_passing1():
7489
argument_passing(arg1, *(arg2, arg3, arg4), e=arg5, **{"f": arg6, "g": arg7})
75-
90+
91+
7692
@expects(7)
7793
def test_argument_passing2():
7894
argument_passing(arg1, arg2, arg3, f=arg6)
@@ -123,10 +139,12 @@ def grab_foo_bar_baz(foo, **kwargs):
123139
grab_bar_baz(**kwargs)
124140

125141

142+
# It is not possible to pass `bar` into `kwargs`,
143+
# since `bar` is a valid keyword argument.
126144
def grab_bar_baz(bar, **kwargs):
127145
SINK2(bar)
128146
try:
129-
SINK2(kwargs["bar"])
147+
SINK2_F(kwargs["bar"])
130148
except:
131149
print("OK")
132150
grab_baz(**kwargs)

python/ql/test/experimental/dataflow/coverage/argumentRouting1.expected

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
| argumentPassing.py:74:22:74:25 | ControlFlowNode for arg1 | argumentPassing.py:63:11:63:11 | ControlFlowNode for a |
2-
| argumentPassing.py:78:22:78:25 | ControlFlowNode for arg1 | argumentPassing.py:63:11:63:11 | ControlFlowNode for a |
3-
| argumentPassing.py:88:19:88:22 | ControlFlowNode for arg1 | argumentPassing.py:82:11:82:11 | ControlFlowNode for a |
4-
| argumentPassing.py:89:19:89:22 | ControlFlowNode for arg1 | argumentPassing.py:82:11:82:11 | ControlFlowNode for a |
5-
| argumentPassing.py:90:19:90:22 | ControlFlowNode for arg1 | argumentPassing.py:82:11:82:11 | ControlFlowNode for a |
6-
| argumentPassing.py:101:45:101:48 | ControlFlowNode for arg1 | argumentPassing.py:94:11:94:11 | ControlFlowNode for a |
7-
| argumentPassing.py:102:27:102:30 | ControlFlowNode for arg1 | argumentPassing.py:94:11:94:11 | ControlFlowNode for a |
8-
| argumentPassing.py:103:27:103:30 | ControlFlowNode for arg1 | argumentPassing.py:94:11:94:11 | ControlFlowNode for a |
9-
| argumentPassing.py:115:28:115:31 | ControlFlowNode for arg1 | argumentPassing.py:107:11:107:11 | ControlFlowNode for a |
10-
| argumentPassing.py:141:46:141:49 | ControlFlowNode for arg1 | argumentPassing.py:122:11:122:13 | ControlFlowNode for foo |
11-
| argumentPassing.py:149:14:149:17 | ControlFlowNode for arg1 | argumentPassing.py:147:15:147:15 | ControlFlowNode for a |
12-
| argumentPassing.py:156:19:156:22 | ControlFlowNode for arg1 | argumentPassing.py:154:15:154:15 | ControlFlowNode for a |
13-
| argumentPassing.py:164:15:164:18 | ControlFlowNode for arg1 | argumentPassing.py:162:19:162:22 | ControlFlowNode for Subscript |
14-
| argumentPassing.py:171:13:171:16 | ControlFlowNode for arg1 | argumentPassing.py:169:15:169:15 | ControlFlowNode for a |
15-
| argumentPassing.py:178:16:178:19 | ControlFlowNode for arg1 | argumentPassing.py:176:15:176:15 | ControlFlowNode for a |
16-
| argumentPassing.py:185:15:185:18 | ControlFlowNode for arg1 | argumentPassing.py:183:15:183:15 | ControlFlowNode for a |
17-
| argumentPassing.py:192:23:192:26 | ControlFlowNode for arg1 | argumentPassing.py:190:15:190:20 | ControlFlowNode for Subscript |
1+
| argumentPassing.py:89:22:89:25 | ControlFlowNode for arg1 | argumentPassing.py:75:11:75:11 | ControlFlowNode for a |
2+
| argumentPassing.py:94:22:94:25 | ControlFlowNode for arg1 | argumentPassing.py:75:11:75:11 | ControlFlowNode for a |
3+
| argumentPassing.py:104:19:104:22 | ControlFlowNode for arg1 | argumentPassing.py:98:11:98:11 | ControlFlowNode for a |
4+
| argumentPassing.py:105:19:105:22 | ControlFlowNode for arg1 | argumentPassing.py:98:11:98:11 | ControlFlowNode for a |
5+
| argumentPassing.py:106:19:106:22 | ControlFlowNode for arg1 | argumentPassing.py:98:11:98:11 | ControlFlowNode for a |
6+
| argumentPassing.py:117:45:117:48 | ControlFlowNode for arg1 | argumentPassing.py:110:11:110:11 | ControlFlowNode for a |
7+
| argumentPassing.py:118:27:118:30 | ControlFlowNode for arg1 | argumentPassing.py:110:11:110:11 | ControlFlowNode for a |
8+
| argumentPassing.py:119:27:119:30 | ControlFlowNode for arg1 | argumentPassing.py:110:11:110:11 | ControlFlowNode for a |
9+
| argumentPassing.py:131:28:131:31 | ControlFlowNode for arg1 | argumentPassing.py:123:11:123:11 | ControlFlowNode for a |
10+
| argumentPassing.py:159:46:159:49 | ControlFlowNode for arg1 | argumentPassing.py:138:11:138:13 | ControlFlowNode for foo |
11+
| argumentPassing.py:167:14:167:17 | ControlFlowNode for arg1 | argumentPassing.py:165:15:165:15 | ControlFlowNode for a |
12+
| argumentPassing.py:174:19:174:22 | ControlFlowNode for arg1 | argumentPassing.py:172:15:172:15 | ControlFlowNode for a |
13+
| argumentPassing.py:182:15:182:18 | ControlFlowNode for arg1 | argumentPassing.py:180:19:180:22 | ControlFlowNode for Subscript |
14+
| argumentPassing.py:189:13:189:16 | ControlFlowNode for arg1 | argumentPassing.py:187:15:187:15 | ControlFlowNode for a |
15+
| argumentPassing.py:196:16:196:19 | ControlFlowNode for arg1 | argumentPassing.py:194:15:194:15 | ControlFlowNode for a |
16+
| argumentPassing.py:203:15:203:18 | ControlFlowNode for arg1 | argumentPassing.py:201:15:201:15 | ControlFlowNode for a |
17+
| argumentPassing.py:210:23:210:26 | ControlFlowNode for arg1 | argumentPassing.py:208:15:208:20 | ControlFlowNode for Subscript |
1818
| classes.py:563:5:563:16 | SSA variable with_getitem | classes.py:557:15:557:18 | ControlFlowNode for self |
1919
| classes.py:578:5:578:16 | SSA variable with_setitem | classes.py:573:15:573:18 | ControlFlowNode for self |
2020
| classes.py:593:5:593:16 | SSA variable with_delitem | classes.py:588:15:588:18 | ControlFlowNode for self |

python/ql/test/experimental/dataflow/coverage/argumentRouting2.expected

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
| argumentPassing.py:78:28:78:31 | ControlFlowNode for arg2 | argumentPassing.py:64:11:64:11 | ControlFlowNode for b |
2-
| argumentPassing.py:88:25:88:28 | ControlFlowNode for arg2 | argumentPassing.py:83:11:83:11 | ControlFlowNode for b |
3-
| argumentPassing.py:89:27:89:30 | ControlFlowNode for arg2 | argumentPassing.py:83:11:83:11 | ControlFlowNode for b |
4-
| argumentPassing.py:101:29:101:32 | ControlFlowNode for arg2 | argumentPassing.py:95:11:95:11 | ControlFlowNode for b |
5-
| argumentPassing.py:116:30:116:33 | ControlFlowNode for arg2 | argumentPassing.py:108:11:108:11 | ControlFlowNode for b |
6-
| argumentPassing.py:141:36:141:39 | ControlFlowNode for arg2 | argumentPassing.py:127:11:127:13 | ControlFlowNode for bar |
1+
| argumentPassing.py:94:28:94:31 | ControlFlowNode for arg2 | argumentPassing.py:76:11:76:11 | ControlFlowNode for b |
2+
| argumentPassing.py:104:25:104:28 | ControlFlowNode for arg2 | argumentPassing.py:99:11:99:11 | ControlFlowNode for b |
3+
| argumentPassing.py:105:27:105:30 | ControlFlowNode for arg2 | argumentPassing.py:99:11:99:11 | ControlFlowNode for b |
4+
| argumentPassing.py:117:29:117:32 | ControlFlowNode for arg2 | argumentPassing.py:111:11:111:11 | ControlFlowNode for b |
5+
| argumentPassing.py:132:30:132:33 | ControlFlowNode for arg2 | argumentPassing.py:124:11:124:11 | ControlFlowNode for b |
6+
| argumentPassing.py:159:36:159:39 | ControlFlowNode for arg2 | argumentPassing.py:145:11:145:13 | ControlFlowNode for bar |
77
| classes.py:565:18:565:21 | ControlFlowNode for arg2 | classes.py:556:15:556:17 | ControlFlowNode for key |
88
| classes.py:581:18:581:21 | ControlFlowNode for arg2 | classes.py:572:15:572:17 | ControlFlowNode for key |
99
| classes.py:595:22:595:25 | ControlFlowNode for arg2 | classes.py:587:15:587:17 | ControlFlowNode for key |
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
| argumentPassing.py:78:34:78:37 | ControlFlowNode for arg3 | argumentPassing.py:65:11:65:11 | ControlFlowNode for c |
2-
| argumentPassing.py:101:37:101:40 | ControlFlowNode for arg3 | argumentPassing.py:96:11:96:11 | ControlFlowNode for c |
3-
| argumentPassing.py:102:43:102:46 | ControlFlowNode for arg3 | argumentPassing.py:96:11:96:11 | ControlFlowNode for c |
4-
| argumentPassing.py:103:41:103:44 | ControlFlowNode for arg3 | argumentPassing.py:96:11:96:11 | ControlFlowNode for c |
5-
| argumentPassing.py:117:36:117:39 | ControlFlowNode for arg3 | argumentPassing.py:109:11:109:11 | ControlFlowNode for c |
6-
| argumentPassing.py:141:26:141:29 | ControlFlowNode for arg3 | argumentPassing.py:136:11:136:13 | ControlFlowNode for baz |
1+
| argumentPassing.py:94:34:94:37 | ControlFlowNode for arg3 | argumentPassing.py:77:11:77:11 | ControlFlowNode for c |
2+
| argumentPassing.py:117:37:117:40 | ControlFlowNode for arg3 | argumentPassing.py:112:11:112:11 | ControlFlowNode for c |
3+
| argumentPassing.py:118:43:118:46 | ControlFlowNode for arg3 | argumentPassing.py:112:11:112:11 | ControlFlowNode for c |
4+
| argumentPassing.py:119:41:119:44 | ControlFlowNode for arg3 | argumentPassing.py:112:11:112:11 | ControlFlowNode for c |
5+
| argumentPassing.py:133:36:133:39 | ControlFlowNode for arg3 | argumentPassing.py:125:11:125:11 | ControlFlowNode for c |
6+
| argumentPassing.py:159:26:159:29 | ControlFlowNode for arg3 | argumentPassing.py:154:11:154:13 | ControlFlowNode for baz |
77
| classes.py:581:26:581:29 | ControlFlowNode for arg3 | classes.py:571:15:571:19 | ControlFlowNode for value |

0 commit comments

Comments
 (0)