test_parser.py revision 79ca79d1a904f7960fea34bec84c11eec70c4587
1import parser 2import pprint 3import sys 4 5from parser import expr, suite, sequence2ast 6from test_support import verbose 7 8# 9# First, we test that we can generate trees from valid source fragments, 10# and that these valid trees are indeed allowed by the tree-loading side 11# of the parser module. 12# 13 14def roundtrip(f, s): 15 print s 16 st1 = f(s) 17 t = st1.totuple() 18 st2 = parser.sequence2ast(t) 19 20 21print "Expressions:" 22 23roundtrip(expr, "foo(1)") 24roundtrip(expr, "[1, 2, 3]") 25roundtrip(expr, "[x**3 for x in range(20)]") 26roundtrip(expr, "[x**3 for x in range(20) if x % 3]") 27roundtrip(expr, "foo(*args)") 28roundtrip(expr, "foo(*args, **kw)") 29roundtrip(expr, "foo(**kw)") 30roundtrip(expr, "foo(key=value)") 31roundtrip(expr, "foo(key=value, *args)") 32roundtrip(expr, "foo(key=value, *args, **kw)") 33roundtrip(expr, "foo(key=value, **kw)") 34roundtrip(expr, "foo(a, b, c, *args)") 35roundtrip(expr, "foo(a, b, c, *args, **kw)") 36roundtrip(expr, "foo(a, b, c, **kw)") 37roundtrip(expr, "foo + bar") 38 39print 40print "Statements:" 41roundtrip(suite, "print") 42roundtrip(suite, "print 1") 43roundtrip(suite, "print 1,") 44roundtrip(suite, "print >>fp") 45roundtrip(suite, "print >>fp, 1") 46roundtrip(suite, "print >>fp, 1,") 47 48# 49# Second, we take *invalid* trees and make sure we get ParserError 50# rejections for them. 51# 52 53print 54print "Invalid parse trees:" 55 56def check_bad_tree(tree, label): 57 print 58 print label 59 try: 60 sequence2ast(tree) 61 except parser.ParserError: 62 print "caught expected exception for invalid tree" 63 pass 64 else: 65 print "test failed: did not properly detect invalid tree:" 66 pprint.pprint(tree) 67 68 69# not even remotely valid: 70check_bad_tree((1, 2, 3), "<junk>") 71 72# print >>fp, 73tree = \ 74(257, 75 (264, 76 (265, 77 (266, 78 (268, 79 (1, 'print'), 80 (35, '>>'), 81 (290, 82 (291, 83 (292, 84 (293, 85 (295, 86 (296, 87 (297, 88 (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))), 89 (12, ','))), 90 (4, ''))), 91 (0, '')) 92 93check_bad_tree(tree, "print >>fp,") 94 95# a,,c 96tree = \ 97(258, 98 (311, 99 (290, 100 (291, 101 (292, 102 (293, 103 (295, 104 (296, (297, (298, (299, (300, (301, (302, (303, (1, 'a')))))))))))))), 105 (12, ','), 106 (12, ','), 107 (290, 108 (291, 109 (292, 110 (293, 111 (295, 112 (296, (297, (298, (299, (300, (301, (302, (303, (1, 'c'))))))))))))))), 113 (4, ''), 114 (0, '')) 115 116check_bad_tree(tree, "a,,c") 117