-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #17765 from yoff/python/test-functional-behaviour
Python: Add tests for functional-like programming
- Loading branch information
Showing
2 changed files
with
68 additions
and
0 deletions.
There are no files selected for viewing
67 changes: 67 additions & 0 deletions
67
python/ql/test/library-tests/dataflow/coverage/functional.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# All functions starting with "test_" should run and execute `print("OK")` exactly once. | ||
# This can be checked by running validTest.py. | ||
|
||
import sys | ||
import os | ||
|
||
sys.path.append(os.path.dirname(os.path.dirname((__file__)))) | ||
from testlib import expects | ||
|
||
# These are defined so that we can evaluate the test code. | ||
NONSOURCE = "not a source" | ||
SOURCE = "source" | ||
|
||
|
||
def is_source(x): | ||
return x == "source" or x == b"source" or x == 42 or x == 42.0 or x == 42j | ||
|
||
|
||
def SINK(x): | ||
if is_source(x): | ||
print("OK") | ||
else: | ||
print("Unexpected flow", x) | ||
|
||
|
||
def SINK_F(x): | ||
if is_source(x): | ||
print("Unexpected flow", x) | ||
else: | ||
print("OK") | ||
|
||
# ------------------------------------------------------------------------------ | ||
# Actual tests | ||
# ------------------------------------------------------------------------------ | ||
|
||
def read_sql(sql): | ||
SINK(sql) # $ flow="SOURCE, l:+5 -> sql" | ||
|
||
def process(func, arg): | ||
func(arg) | ||
|
||
process(func=read_sql, arg=SOURCE) | ||
|
||
|
||
def read_sql_star(sql): | ||
SINK(sql) # $ MISSING: flow="SOURCE, l:+5 -> sql" | ||
|
||
def process_star(func, *args): | ||
func(*args) | ||
|
||
process_star(read_sql_star, SOURCE) | ||
|
||
|
||
def read_sql_dict(sql): | ||
SINK(sql) # $ flow="SOURCE, l:+5 -> sql" | ||
|
||
def process_dict(func, **args): | ||
func(**args) | ||
|
||
process_dict(func=read_sql_dict, sql=SOURCE) | ||
|
||
|
||
# TODO: | ||
# Consider adding tests for | ||
# threading.Thread, multiprocess.Process, | ||
# concurrent.futures.ThreadPoolExecutor, | ||
# and concurrent.futures.ProcessPoolExecutor. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters