def test(): println('GO pyparse.parser.endless_sky') name = 'EndlessSkyParser with valid data' try: s = """# comment root1 token1 "token 2" `token 3` child1.1 token 1.1 child1.2 root2 # ignored """ p = EndlessSkyParser(s) node = p.maybe(p.rule_DataNode) assert node is not None, node assert node.indent == '', node assert node.tokens == ( 'root1', 'token1', '"token 2"', '`token 3`', ), node assert node.lines == slice(1, 5), node # includes the comment assert len(node.children) == 2, node assert node.children[0].indent == ' ', node assert node.children[0].tokens == ( 'child1.1', 'token', '1.1', ), node assert node.children[0].lines == slice(3, 4), node assert len(node.children[0].children) == 0, node assert node.children[1].indent == ' ', node assert node.children[1].tokens == ('child1.2', ), node assert node.children[1].lines == slice(4, 5), node assert len(node.children[1].children) == 0, node node = p.maybe(p.rule_DataNode) assert node is not None, node assert node.indent == '', node assert node.tokens == ('root2', ), node assert node.lines == slice(5, 7), node # includes the empty line assert len(node.children) == 0, node node = p.maybe(p.rule_DataNode) assert node is None, node # ignores the rest println('PASS', name) except: println('FAIL', name) raise # print stacktrace # TODO test invalid data # TODO test s? println('OG pyparse.parser.endless_sky')
def test(): println('GO pyparse.parser.m3u') name = 'M3uParser m3u' try: s = """one_second.mkv empty.mkv """ p = M3uParser(s) m3u = p.rule_M3u() assert m3u.ext is None assert len(m3u.resources) == 2, m3u assert m3u.resources[0].address == 'one_second.mkv', m3u assert m3u.resources[0].ext is None, m3u assert m3u.resources[1].address == 'empty.mkv', m3u assert m3u.resources[1].ext is None, m3u println('PASS', name) except: println('FAIL', name) raise # print traceback name = 'M3uParser extm3u' try: s = """#EXTM3U #EXTINF:1,One Second one_second.mkv #EXTINF:0,Empty empty.mkv """ p = M3uParser(s) m3u = p.rule_M3u() assert m3u.ext == '#EXTM3U', m3u assert len(m3u.resources) == 2, m3u assert m3u.resources[0].address == 'one_second.mkv', m3u assert m3u.resources[0].ext == '#EXTINF:1,One Second', m3u assert m3u.resources[1].address == 'empty.mkv', m3u assert m3u.resources[1].ext == '#EXTINF:0,Empty', m3u println('PASS', name) except: println('FAIL', name) raise # print traceback println('OG pyparse.parser.m3u')
# -*- coding: utf8 -*- # license: WTFPL version 2, or whatever is closest to "no license" and "public domain" (like Unlicense or CC0) from __builtin__ import AssertionError from __builtin__ import True from __builtin__ import len from pyparse.parser import ParserSkeleton from pyparse.util import IndexToAttrMixin from pyparse.util import println try: assert False # assert must work println('the assert statement does not work, disable optimizations to fix this') exit(1) except AssertionError: pass class M3uParser(ParserSkeleton): r""" Playlist format of files that end with '.m3u'. Created by winamp? "It is an ah-hoc standard, with no formal definition, no canonical source, and no owner." Extended M3U ------------ Before ID3 tags were supported, resource metadata was placed in the comments.
def test(): println('GO pyparse.parser.unicode') name = 'Utf8Parser codepoint 0' try: s = '0' # zero (0) p = Utf8Parser(s) c = p.rule_Codepoint() assert c.codepoint == 0x30, c # '0' assert c.s == ('0', ), c c = p.maybe(p.rule_Codepoint) assert c is None, c println('PASS', name) except: println('FAIL', name) raise # print traceback name = 'Utf8Parser codepoint €' try: s = '\xE2\x82\xAC' # euro (€) p = Utf8Parser(s) c = p.rule_Codepoint() assert c.codepoint == 0x20AC, c # '€' assert c.s == ( '\xE2', '\x82', '\xAC', ), c c = p.maybe(p.rule_Codepoint) assert c is None, c println('PASS', name) except: println('FAIL', name) raise # print traceback println('OG pyparse.parser.unicode')
def test(): println('GO pyparse.parser.bnf') name = 'McKeemanFormParser' try: s = """ S '1' 'a' S '+' S test "" ' ' . '10FFFF' - '"' - '1234' . '56789' "characters" '0000' """ syntax_tree = ( 'Grammar', '.rules', ( ( 'Rule', '.name', 'S', '.nothing', False, '.alternatives', ( (( 'Codepoint', '.value', 49, '.str', '1', ), ), (( 'Codepoint', '.value', 97, '.str', 'a', ), ), ( 'S', ( 'Codepoint', '.value', 43, '.str', '+', ), 'S', ), ), ), ( 'Rule', '.name', 'test', '.nothing', True, '.alternatives', ((( 'Range', '.low', ( 'Codepoint', '.value', 32, '.str', ' ', ), '.high', ( 'Codepoint', '.value', 1114111, '.hex', '10FFFF', ), '.exclude', ( ( 'Codepoint', '.value', 34, '.str', '"', ), ( 'Range', '.low', ( 'Codepoint', '.value', 4660, '.hex', '1234', ), '.high', ( 'Codepoint', '.value', 354185, '.hex', '56789', ), ), ), ), ), ( ( 'Characters', '.str', 'characters', ), ( 'Codepoint', '.value', 0, '.hex', '0000', ), )), ), ), ) p = McKeemanFormParser(s) grammar = p.rule_Grammar() assert grammar == syntax_tree, ( grammar, syntax_tree, ) println('PASS', name) except: println('FAIL', name) raise # print traceback println('OG pyparse.parser.bnf')
def test(): println('GO pyparse.parser.papers') name = 'SsAnBnCnParser n=4' try: s = "aaaabbbbcccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() assert ss.n == 4, ss println('PASS', name) except: println('FAIL', name) raise # print traceback name = 'SsAnBnCnParser -a' try: s = "aaabbbbcccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback name = 'SsAnBnCnParser +a' try: s = "aaaaabbbbcccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback name = 'SsAnBnCnParser -b' try: s = "aaaabbbcccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback name = 'SsAnBnCnParser +b' try: s = "aaaabbbbbcccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback name = 'SsAnBnCnParser -c' try: s = "aaaabbbbccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback name = 'SsAnBnCnParser +c' try: s = "aaaabbbbccccc" p = SsAnBnCnParser(s) ss = p.rule_Ss() println('FAIL', name, ss) except AssertionError: println('PASS', name) except: println('ERR', name) raise # print traceback println('OG pyparse.parser.papers')