mirror of
https://github.com/github/codeql.git
synced 2026-04-30 03:05:15 +02:00
Python: Add copy of extractor tests
These get to live next to the existing library and query tests, and are run as part of both the Python 2 and Python 3 language tests.
This commit is contained in:
143
python/ql/test/extractor-tests/ast/test.py
Normal file
143
python/ql/test/extractor-tests/ast/test.py
Normal file
@@ -0,0 +1,143 @@
|
||||
|
||||
@deco1
|
||||
@deco2()
|
||||
@deco3.attr1.attr2
|
||||
class C(Base):
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@deco4.attr()
|
||||
def f():
|
||||
pass
|
||||
|
||||
def f(pos0, pos1, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def simple_stmts():
|
||||
pass
|
||||
foo() ; del x; pass
|
||||
if thing:
|
||||
for a in b:
|
||||
pass
|
||||
#Expressions
|
||||
tmp = (
|
||||
yield 3,
|
||||
name,
|
||||
attr.attrname,
|
||||
a + b,
|
||||
3 & 4,
|
||||
3.0 * 4,
|
||||
a.b.c.d,
|
||||
a().b[c],
|
||||
lambda x: x+1,
|
||||
p or q and r ^ s,
|
||||
a < b > c in 5,
|
||||
{ 1 : y for z in x for y in z},
|
||||
{ (1, y) for z in x for y in z},
|
||||
[ y**2 for y in z ],
|
||||
[],
|
||||
{},
|
||||
(),
|
||||
(1,),
|
||||
)
|
||||
foo(1)
|
||||
foo(a=1)
|
||||
foo(1,2,*t)
|
||||
foo(1,a=1,*t)
|
||||
foo(1,a=1,*t,**d)
|
||||
f(**d)
|
||||
|
||||
def compound_stmts():
|
||||
if cond:
|
||||
return x
|
||||
else:
|
||||
raise y
|
||||
while True:
|
||||
if cond:
|
||||
break
|
||||
else:
|
||||
continue
|
||||
for x in y:
|
||||
pass
|
||||
with a as b, c as d:
|
||||
body
|
||||
try:
|
||||
t1
|
||||
except:
|
||||
e1
|
||||
try:
|
||||
t2
|
||||
except Exception:
|
||||
e2
|
||||
try:
|
||||
t3
|
||||
except Exception as ex:
|
||||
e3
|
||||
try:
|
||||
t4
|
||||
finally:
|
||||
f4
|
||||
try:
|
||||
t5
|
||||
except Exception as ex:
|
||||
e5
|
||||
finally:
|
||||
f5
|
||||
try:
|
||||
t6
|
||||
finally:
|
||||
try:
|
||||
t7
|
||||
finally:
|
||||
f7
|
||||
|
||||
#Unusual classdef
|
||||
class WhyUseParens():
|
||||
pass
|
||||
|
||||
#Annotations
|
||||
x: 1
|
||||
x: y
|
||||
x: {y[a][b]:z-q}
|
||||
x: f(1, d=3, *t)
|
||||
|
||||
|
||||
#f-strings with format specifier
|
||||
f'result: {value:0.2f}'
|
||||
f'result: {value:{width}.{precision}}'
|
||||
|
||||
|
||||
f"Too {'many' if alen > elen else 'few'} parameters for {cls};"
|
||||
#f" actual {alen}, expected {elen}"
|
||||
|
||||
#Backticks
|
||||
`backticks`
|
||||
`why, are, we, still, supporting, this in 2019`
|
||||
|
||||
|
||||
def numeric_literals():
|
||||
# Various corner cases for numeric literals
|
||||
tmp = (
|
||||
0b00010101011111111111L,
|
||||
1_1,
|
||||
0b1_1,
|
||||
0x1_1,
|
||||
0b_010,
|
||||
0x_010,
|
||||
0_0,
|
||||
009.,
|
||||
009e005,
|
||||
00123,
|
||||
0o77777777777L,
|
||||
0777777777777L,
|
||||
0o1_1,
|
||||
0o_010,
|
||||
1_2_3.4_5_6e7_8_9,
|
||||
0_0234j
|
||||
)
|
||||
|
||||
#Grammar ambiguity in extractor version 5.4
|
||||
print(f'{"foo"}')
|
||||
print(f"{"bar"}")
|
||||
|
||||
Reference in New Issue
Block a user