File: test_filtered_lexer.py

package info (click to toggle)
python-phply 1.2.6-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 620 kB
  • sloc: python: 4,354; makefile: 3
file content (53 lines) | stat: -rw-r--r-- 1,362 bytes parent folder | download
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)