1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
from __future__ import print_function
from phply import phplex
import pprint
def eq_tokens(input, expected, ignore=('WHITESPACE', 'OPEN_TAG', 'CLOSE_TAG')):
output = []
lexer = phplex.lexer.clone()
lexer.input(input)
while True:
tok = lexer.token()
if not tok: break
if tok.type in ignore: continue
output.append((tok.type, tok.value))
print('Lexer output:')
pprint.pprint(output)
print()
print('Token by token:')
for out, exp in zip(output, expected):
print('\tgot:', out, '\texpected:', exp)
assert out == exp
assert len(output) == len(expected), \
'output length was %d, expected %s' % (len(output), len(expected))
def test_close_open_tags():
# ?><?php should be interpreted as a semi-colon
input = '<?php if (1): if (2) 3; ?><?php else: 0; endif;'
expected = [
('IF', 'if'),
('LPAREN', '('),
('LNUMBER', '1'),
('RPAREN', ')'),
('COLON', ':'),
('IF', 'if'),
('LPAREN', '('),
('LNUMBER', '2'),
('RPAREN', ')'),
('LNUMBER', '3'),
('SEMI', ';'),
('SEMI', ';'),
('ELSE', 'else'),
('COLON', ':'),
('LNUMBER', '0'),
('SEMI', ';'),
('ENDIF', 'endif'),
('SEMI', ';')
]
eq_tokens(input, expected)
|