summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2000-08-21 22:30:53 (GMT)
committerFred Drake <fdrake@acm.org>2000-08-21 22:30:53 (GMT)
commit79ca79d1a904f7960fea34bec84c11eec70c4587 (patch)
tree7e35e719b75eb7f358908b9e7bea4465a22e7a83 /Lib
parentcff283c7b39f605b12bf9d974340707aad42eae5 (diff)
downloadcpython-79ca79d1a904f7960fea34bec84c11eec70c4587.zip
cpython-79ca79d1a904f7960fea34bec84c11eec70c4587.tar.gz
cpython-79ca79d1a904f7960fea34bec84c11eec70c4587.tar.bz2
Add a minimal test suite for the parser module.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/output/test_parser36
-rw-r--r--Lib/test/test_parser.py116
2 files changed, 152 insertions, 0 deletions
diff --git a/Lib/test/output/test_parser b/Lib/test/output/test_parser
new file mode 100644
index 0000000..c5b6777
--- /dev/null
+++ b/Lib/test/output/test_parser
@@ -0,0 +1,36 @@
+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
+
+Statements:
+print
+print 1
+print 1,
+print >>fp
+print >>fp, 1
+print >>fp, 1,
+
+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
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
new file mode 100644
index 0000000..559a0f4
--- /dev/null
+++ b/Lib/test/test_parser.py
@@ -0,0 +1,116 @@
+import parser
+import pprint
+import sys
+
+from parser import expr, suite, sequence2ast
+from test_support import verbose
+
+#
+# First, we test that we can generate trees from valid source fragments,
+# and that these valid trees are indeed allowed by the tree-loading side
+# of the parser module.
+#
+
+def roundtrip(f, s):
+ print s
+ st1 = f(s)
+ t = st1.totuple()
+ st2 = parser.sequence2ast(t)
+
+
+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")
+
+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,")
+
+#
+# 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:
+ sequence2ast(tree)
+ except parser.ParserError:
+ print "caught expected exception for invalid tree"
+ pass
+ 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")