diff options
author | Fred Drake <fdrake@acm.org> | 2000-08-25 22:42:40 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2000-08-25 22:42:40 (GMT) |
commit | 28f739aad47f1022fda19e4f3d8ad1b8228d221b (patch) | |
tree | 218914b8a2a04262fe756cc6ddfc3ffd7b37c753 /Lib | |
parent | 6ef68b5b01c7898624b8baa5d042522d3d6532af (diff) | |
download | cpython-28f739aad47f1022fda19e4f3d8ad1b8228d221b.zip cpython-28f739aad47f1022fda19e4f3d8ad1b8228d221b.tar.gz cpython-28f739aad47f1022fda19e4f3d8ad1b8228d221b.tar.bz2 |
Update the parser module to support augmented assignment.
Add some test cases.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/output/test_parser | 59 | ||||
-rw-r--r-- | Lib/test/test_parser.py | 106 |
2 files changed, 122 insertions, 43 deletions
diff --git a/Lib/test/output/test_parser b/Lib/test/output/test_parser index c5b6777..86ec22d 100644 --- a/Lib/test/output/test_parser +++ b/Lib/test/output/test_parser @@ -1,28 +1,42 @@ test_parser Expressions: -foo(1) -[1, 2, 3] -[x**3 for x in range(20)] -[x**3 for x in range(20) if x % 3] -foo(*args) -foo(*args, **kw) -foo(**kw) -foo(key=value) -foo(key=value, *args) -foo(key=value, *args, **kw) -foo(key=value, **kw) -foo(a, b, c, *args) -foo(a, b, c, *args, **kw) -foo(a, b, c, **kw) -foo + bar +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 Statements: -print -print 1 -print 1, -print >>fp -print >>fp, 1 -print >>fp, 1, +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 Invalid parse trees: @@ -34,3 +48,6 @@ caught expected exception for invalid tree a,,c caught expected exception for invalid tree + +a $= b +caught expected exception for invalid tree diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 559a0f4..bc41de4 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -1,3 +1,4 @@ +import os.path import parser import pprint import sys @@ -12,38 +13,68 @@ from test_support import verbose # def roundtrip(f, s): - print s st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) +def roundtrip_fromfile(filename): + roundtrip(suite, open(filename).read()) + +def test_expr(s): + print "expr:", s + roundtrip(expr, s) + +def test_suite(s): + print "suite:", s + roundtrip(suite, s) + print "Expressions:" -roundtrip(expr, "foo(1)") -roundtrip(expr, "[1, 2, 3]") -roundtrip(expr, "[x**3 for x in range(20)]") -roundtrip(expr, "[x**3 for x in range(20) if x % 3]") -roundtrip(expr, "foo(*args)") -roundtrip(expr, "foo(*args, **kw)") -roundtrip(expr, "foo(**kw)") -roundtrip(expr, "foo(key=value)") -roundtrip(expr, "foo(key=value, *args)") -roundtrip(expr, "foo(key=value, *args, **kw)") -roundtrip(expr, "foo(key=value, **kw)") -roundtrip(expr, "foo(a, b, c, *args)") -roundtrip(expr, "foo(a, b, c, *args, **kw)") -roundtrip(expr, "foo(a, b, c, **kw)") -roundtrip(expr, "foo + bar") +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") print print "Statements:" -roundtrip(suite, "print") -roundtrip(suite, "print 1") -roundtrip(suite, "print 1,") -roundtrip(suite, "print >>fp") -roundtrip(suite, "print >>fp, 1") -roundtrip(suite, "print >>fp, 1,") +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") + +#d = os.path.dirname(os.__file__) +#roundtrip_fromfile(os.path.join(d, "os.py")) +#roundtrip_fromfile(os.path.join(d, "test", "test_parser.py")) # # Second, we take *invalid* trees and make sure we get ParserError @@ -114,3 +145,34 @@ tree = \ (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") |