Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
58422e58
Kaydet (Commit)
58422e58
authored
Haz 04, 2001
tarafından
Fred Drake
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Convert the parser module test to use PyUnit.
üst
194bfb28
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
212 additions
and
300 deletions
+212
-300
test_parser
Lib/test/output/test_parser
+0
-92
test_parser.py
Lib/test/test_parser.py
+212
-208
No files found.
Lib/test/output/test_parser
deleted
100644 → 0
Dosyayı görüntüle @
194bfb28
test_parser
Expressions:
expr: foo(1)
expr: [1, 2, 3]
expr: [x**3 for x in range(20)]
expr: [x**3 for x in range(20) if x % 3]
expr: foo(*args)
expr: foo(*args, **kw)
expr: foo(**kw)
expr: foo(key=value)
expr: foo(key=value, *args)
expr: foo(key=value, *args, **kw)
expr: foo(key=value, **kw)
expr: foo(a, b, c, *args)
expr: foo(a, b, c, *args, **kw)
expr: foo(a, b, c, **kw)
expr: foo + bar
expr: lambda: 0
expr: lambda x: 0
expr: lambda *y: 0
expr: lambda *y, **z: 0
expr: lambda **z: 0
expr: lambda x, y: 0
expr: lambda foo=bar: 0
expr: lambda foo=bar, spaz=nifty+spit: 0
expr: lambda foo=bar, **z: 0
expr: lambda foo=bar, blaz=blat+2, **z: 0
expr: lambda foo=bar, blaz=blat+2, *y, **z: 0
expr: lambda x, *y, **z: 0
Statements:
suite: print
suite: print 1
suite: print 1,
suite: print >>fp
suite: print >>fp, 1
suite: print >>fp, 1,
suite: a
suite: a = b
suite: a = b = c = d = e
suite: a += b
suite: a -= b
suite: a *= b
suite: a /= b
suite: a %= b
suite: a &= b
suite: a |= b
suite: a ^= b
suite: a <<= b
suite: a >>= b
suite: a **= b
suite: def f(): pass
suite: def f(*args): pass
suite: def f(*args, **kw): pass
suite: def f(**kw): pass
suite: def f(foo=bar): pass
suite: def f(foo=bar, *args): pass
suite: def f(foo=bar, *args, **kw): pass
suite: def f(foo=bar, **kw): pass
suite: def f(a, b): pass
suite: def f(a, b, *args): pass
suite: def f(a, b, *args, **kw): pass
suite: def f(a, b, **kw): pass
suite: def f(a, b, foo=bar): pass
suite: def f(a, b, foo=bar, *args): pass
suite: def f(a, b, foo=bar, *args, **kw): pass
suite: def f(a, b, foo=bar, **kw): pass
suite: from sys.path import *
suite: from sys.path import dirname
suite: from sys.path import dirname as my_dirname
suite: from sys.path import dirname, basename
suite: from sys.path import dirname as my_dirname, basename
suite: from sys.path import dirname, basename as my_basename
suite: import sys
suite: import sys as system
suite: import sys, math
suite: import sys as system, math
suite: import sys, math as my_math
Invalid parse trees:
<junk>
caught expected exception for invalid tree
print >>fp,
caught expected exception for invalid tree
a,,c
caught expected exception for invalid tree
a $= b
caught expected exception for invalid tree
Lib/test/test_parser.py
Dosyayı görüntüle @
58422e58
import
os.path
import
parser
import
pprint
import
sys
from
test_support
import
TestFailed
import
test_support
import
unittest
#
# First, we test that we can generate trees from valid source fragments,
...
...
@@ -11,212 +8,219 @@ from test_support import TestFailed
# of the parser module.
#
def
roundtrip
(
f
,
s
):
st1
=
f
(
s
)
t
=
st1
.
totuple
()
try
:
st2
=
parser
.
sequence2ast
(
t
)
except
parser
.
ParserError
:
raise
TestFailed
,
s
def
roundtrip_fromfile
(
filename
):
roundtrip
(
parser
.
suite
,
open
(
filename
)
.
read
())
def
test_expr
(
s
):
print
"expr:"
,
s
roundtrip
(
parser
.
expr
,
s
)
def
test_suite
(
s
):
print
"suite:"
,
s
roundtrip
(
parser
.
suite
,
s
)
print
"Expressions:"
test_expr
(
"foo(1)"
)
test_expr
(
"[1, 2, 3]"
)
test_expr
(
"[x**3 for x in range(20)]"
)
test_expr
(
"[x**3 for x in range(20) if x
% 3
]"
)
test_expr
(
"foo(*args)"
)
test_expr
(
"foo(*args, **kw)"
)
test_expr
(
"foo(**kw)"
)
test_expr
(
"foo(key=value)"
)
test_expr
(
"foo(key=value, *args)"
)
test_expr
(
"foo(key=value, *args, **kw)"
)
test_expr
(
"foo(key=value, **kw)"
)
test_expr
(
"foo(a, b, c, *args)"
)
test_expr
(
"foo(a, b, c, *args, **kw)"
)
test_expr
(
"foo(a, b, c, **kw)"
)
test_expr
(
"foo + bar"
)
test_expr
(
"lambda: 0"
)
test_expr
(
"lambda x: 0"
)
test_expr
(
"lambda *y: 0"
)
test_expr
(
"lambda *y, **z: 0"
)
test_expr
(
"lambda **z: 0"
)
test_expr
(
"lambda x, y: 0"
)
test_expr
(
"lambda foo=bar: 0"
)
test_expr
(
"lambda foo=bar, spaz=nifty+spit: 0"
)
test_expr
(
"lambda foo=bar, **z: 0"
)
test_expr
(
"lambda foo=bar, blaz=blat+2, **z: 0"
)
test_expr
(
"lambda foo=bar, blaz=blat+2, *y, **z: 0"
)
test_expr
(
"lambda x, *y, **z: 0"
)
print
print
"Statements:"
test_suite
(
"print"
)
test_suite
(
"print 1"
)
test_suite
(
"print 1,"
)
test_suite
(
"print >>fp"
)
test_suite
(
"print >>fp, 1"
)
test_suite
(
"print >>fp, 1,"
)
# expr_stmt
test_suite
(
"a"
)
test_suite
(
"a = b"
)
test_suite
(
"a = b = c = d = e"
)
test_suite
(
"a += b"
)
test_suite
(
"a -= b"
)
test_suite
(
"a *= b"
)
test_suite
(
"a /= b"
)
test_suite
(
"a
%
= b"
)
test_suite
(
"a &= b"
)
test_suite
(
"a |= b"
)
test_suite
(
"a ^= b"
)
test_suite
(
"a <<= b"
)
test_suite
(
"a >>= b"
)
test_suite
(
"a **= b"
)
test_suite
(
"def f(): pass"
)
test_suite
(
"def f(*args): pass"
)
test_suite
(
"def f(*args, **kw): pass"
)
test_suite
(
"def f(**kw): pass"
)
test_suite
(
"def f(foo=bar): pass"
)
test_suite
(
"def f(foo=bar, *args): pass"
)
test_suite
(
"def f(foo=bar, *args, **kw): pass"
)
test_suite
(
"def f(foo=bar, **kw): pass"
)
test_suite
(
"def f(a, b): pass"
)
test_suite
(
"def f(a, b, *args): pass"
)
test_suite
(
"def f(a, b, *args, **kw): pass"
)
test_suite
(
"def f(a, b, **kw): pass"
)
test_suite
(
"def f(a, b, foo=bar): pass"
)
test_suite
(
"def f(a, b, foo=bar, *args): pass"
)
test_suite
(
"def f(a, b, foo=bar, *args, **kw): pass"
)
test_suite
(
"def f(a, b, foo=bar, **kw): pass"
)
test_suite
(
"from sys.path import *"
)
test_suite
(
"from sys.path import dirname"
)
test_suite
(
"from sys.path import dirname as my_dirname"
)
test_suite
(
"from sys.path import dirname, basename"
)
test_suite
(
"from sys.path import dirname as my_dirname, basename"
)
test_suite
(
"from sys.path import dirname, basename as my_basename"
)
test_suite
(
"import sys"
)
test_suite
(
"import sys as system"
)
test_suite
(
"import sys, math"
)
test_suite
(
"import sys as system, math"
)
test_suite
(
"import sys, math as my_math"
)
#d = os.path.dirname(os.__file__)
#roundtrip_fromfile(os.path.join(d, "os.py"))
#roundtrip_fromfile(os.path.join(d, "test", "test_parser.py"))
class
RoundtripLegalSyntaxTestCase
(
unittest
.
TestCase
):
def
roundtrip
(
self
,
f
,
s
):
st1
=
f
(
s
)
t
=
st1
.
totuple
()
try
:
st2
=
parser
.
sequence2ast
(
t
)
except
parser
.
ParserError
:
self
.
fail
(
"could not roundtrip
%
r"
%
s
)
self
.
assertEquals
(
t
,
st2
.
totuple
(),
"could not re-generate syntax tree"
)
def
check_expr
(
self
,
s
):
self
.
roundtrip
(
parser
.
expr
,
s
)
def
check_suite
(
self
,
s
):
self
.
roundtrip
(
parser
.
suite
,
s
)
def
test_expressions
(
self
):
self
.
check_expr
(
"foo(1)"
)
self
.
check_expr
(
"[1, 2, 3]"
)
self
.
check_expr
(
"[x**3 for x in range(20)]"
)
self
.
check_expr
(
"[x**3 for x in range(20) if x
% 3
]"
)
self
.
check_expr
(
"foo(*args)"
)
self
.
check_expr
(
"foo(*args, **kw)"
)
self
.
check_expr
(
"foo(**kw)"
)
self
.
check_expr
(
"foo(key=value)"
)
self
.
check_expr
(
"foo(key=value, *args)"
)
self
.
check_expr
(
"foo(key=value, *args, **kw)"
)
self
.
check_expr
(
"foo(key=value, **kw)"
)
self
.
check_expr
(
"foo(a, b, c, *args)"
)
self
.
check_expr
(
"foo(a, b, c, *args, **kw)"
)
self
.
check_expr
(
"foo(a, b, c, **kw)"
)
self
.
check_expr
(
"foo + bar"
)
self
.
check_expr
(
"lambda: 0"
)
self
.
check_expr
(
"lambda x: 0"
)
self
.
check_expr
(
"lambda *y: 0"
)
self
.
check_expr
(
"lambda *y, **z: 0"
)
self
.
check_expr
(
"lambda **z: 0"
)
self
.
check_expr
(
"lambda x, y: 0"
)
self
.
check_expr
(
"lambda foo=bar: 0"
)
self
.
check_expr
(
"lambda foo=bar, spaz=nifty+spit: 0"
)
self
.
check_expr
(
"lambda foo=bar, **z: 0"
)
self
.
check_expr
(
"lambda foo=bar, blaz=blat+2, **z: 0"
)
self
.
check_expr
(
"lambda foo=bar, blaz=blat+2, *y, **z: 0"
)
self
.
check_expr
(
"lambda x, *y, **z: 0"
)
def
test_print
(
self
):
self
.
check_suite
(
"print"
)
self
.
check_suite
(
"print 1"
)
self
.
check_suite
(
"print 1,"
)
self
.
check_suite
(
"print >>fp"
)
self
.
check_suite
(
"print >>fp, 1"
)
self
.
check_suite
(
"print >>fp, 1,"
)
def
test_simple_expression
(
self
):
# expr_stmt
self
.
check_suite
(
"a"
)
def
test_simple_assignments
(
self
):
self
.
check_suite
(
"a = b"
)
self
.
check_suite
(
"a = b = c = d = e"
)
def
test_simple_augmented_assignments
(
self
):
self
.
check_suite
(
"a += b"
)
self
.
check_suite
(
"a -= b"
)
self
.
check_suite
(
"a *= b"
)
self
.
check_suite
(
"a /= b"
)
self
.
check_suite
(
"a
%
= b"
)
self
.
check_suite
(
"a &= b"
)
self
.
check_suite
(
"a |= b"
)
self
.
check_suite
(
"a ^= b"
)
self
.
check_suite
(
"a <<= b"
)
self
.
check_suite
(
"a >>= b"
)
self
.
check_suite
(
"a **= b"
)
def
test_function_defs
(
self
):
self
.
check_suite
(
"def f(): pass"
)
self
.
check_suite
(
"def f(*args): pass"
)
self
.
check_suite
(
"def f(*args, **kw): pass"
)
self
.
check_suite
(
"def f(**kw): pass"
)
self
.
check_suite
(
"def f(foo=bar): pass"
)
self
.
check_suite
(
"def f(foo=bar, *args): pass"
)
self
.
check_suite
(
"def f(foo=bar, *args, **kw): pass"
)
self
.
check_suite
(
"def f(foo=bar, **kw): pass"
)
self
.
check_suite
(
"def f(a, b): pass"
)
self
.
check_suite
(
"def f(a, b, *args): pass"
)
self
.
check_suite
(
"def f(a, b, *args, **kw): pass"
)
self
.
check_suite
(
"def f(a, b, **kw): pass"
)
self
.
check_suite
(
"def f(a, b, foo=bar): pass"
)
self
.
check_suite
(
"def f(a, b, foo=bar, *args): pass"
)
self
.
check_suite
(
"def f(a, b, foo=bar, *args, **kw): pass"
)
self
.
check_suite
(
"def f(a, b, foo=bar, **kw): pass"
)
def
test_import_from_statement
(
self
):
self
.
check_suite
(
"from sys.path import *"
)
self
.
check_suite
(
"from sys.path import dirname"
)
self
.
check_suite
(
"from sys.path import dirname as my_dirname"
)
self
.
check_suite
(
"from sys.path import dirname, basename"
)
self
.
check_suite
(
"from sys.path import dirname as my_dirname, basename"
)
self
.
check_suite
(
"from sys.path import dirname, basename as my_basename"
)
def
test_basic_import_statement
(
self
):
self
.
check_suite
(
"import sys"
)
self
.
check_suite
(
"import sys as system"
)
self
.
check_suite
(
"import sys, math"
)
self
.
check_suite
(
"import sys as system, math"
)
self
.
check_suite
(
"import sys, math as my_math"
)
#
# Second, we take *invalid* trees and make sure we get ParserError
# rejections for them.
#
print
print
"Invalid parse trees:"
def
check_bad_tree
(
tree
,
label
):
print
print
label
try
:
parser
.
sequence2ast
(
tree
)
except
parser
.
ParserError
:
print
"caught expected exception for invalid tree"
else
:
print
"test failed: did not properly detect invalid tree:"
pprint
.
pprint
(
tree
)
# not even remotely valid:
check_bad_tree
((
1
,
2
,
3
),
"<junk>"
)
# print >>fp,
tree
=
\
(
257
,
(
264
,
(
265
,
(
266
,
(
268
,
(
1
,
'print'
),
(
35
,
'>>'
),
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'fp'
)))))))))))))),
(
12
,
','
))),
(
4
,
''
))),
(
0
,
''
))
check_bad_tree
(
tree
,
"print >>fp,"
)
# a,,c
tree
=
\
(
258
,
(
311
,
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'a'
)))))))))))))),
(
12
,
','
),
(
12
,
','
),
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'c'
))))))))))))))),
(
4
,
''
),
(
0
,
''
))
check_bad_tree
(
tree
,
"a,,c"
)
# a $= b
tree
=
\
(
257
,
(
264
,
(
265
,
(
266
,
(
267
,
(
312
,
(
291
,
(
292
,
(
293
,
(
294
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
304
,
(
1
,
'a'
))))))))))))))),
(
268
,
(
37
,
'$='
)),
(
312
,
(
291
,
(
292
,
(
293
,
(
294
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
304
,
(
1
,
'b'
))))))))))))))))),
(
4
,
''
))),
(
0
,
''
))
check_bad_tree
(
tree
,
"a $= b"
)
class
IllegalSyntaxTestCase
(
unittest
.
TestCase
):
def
check_bad_tree
(
self
,
tree
,
label
):
try
:
parser
.
sequence2ast
(
tree
)
except
parser
.
ParserError
:
pass
else
:
self
.
fail
(
"did not detect invalid tree for
%
r"
%
label
)
def
test_junk
(
self
):
# not even remotely valid:
self
.
check_bad_tree
((
1
,
2
,
3
),
"<junk>"
)
def
test_print_chevron_comma
(
self
):
"Illegal input: print >>fp,"""
tree
=
\
(
257
,
(
264
,
(
265
,
(
266
,
(
268
,
(
1
,
'print'
),
(
35
,
'>>'
),
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'fp'
)))))))))))))),
(
12
,
','
))),
(
4
,
''
))),
(
0
,
''
))
self
.
check_bad_tree
(
tree
,
"print >>fp,"
)
def
test_a_comma_comma_c
(
self
):
"""Illegal input: a,,c"""
tree
=
\
(
258
,
(
311
,
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'a'
)))))))))))))),
(
12
,
','
),
(
12
,
','
),
(
290
,
(
291
,
(
292
,
(
293
,
(
295
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
1
,
'c'
))))))))))))))),
(
4
,
''
),
(
0
,
''
))
self
.
check_bad_tree
(
tree
,
"a,,c"
)
def
test_illegal_operator
(
self
):
"""Illegal input: a $= b"""
tree
=
\
(
257
,
(
264
,
(
265
,
(
266
,
(
267
,
(
312
,
(
291
,
(
292
,
(
293
,
(
294
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
304
,
(
1
,
'a'
))))))))))))))),
(
268
,
(
37
,
'$='
)),
(
312
,
(
291
,
(
292
,
(
293
,
(
294
,
(
296
,
(
297
,
(
298
,
(
299
,
(
300
,
(
301
,
(
302
,
(
303
,
(
304
,
(
1
,
'b'
))))))))))))))))),
(
4
,
''
))),
(
0
,
''
))
self
.
check_bad_tree
(
tree
,
"a $= b"
)
test_support
.
run_unittest
(
RoundtripLegalSyntaxTestCase
)
test_support
.
run_unittest
(
IllegalSyntaxTestCase
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment