|
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import
-
- import unittest
- import logging
- import os
- import codecs
-
- logging.basicConfig(level=logging.INFO)
-
- from lark.tools.nearley import create_code_for_nearley_grammar, main as nearley_tool_main
-
- TEST_PATH = os.path.abspath(os.path.dirname(__file__))
- NEARLEY_PATH = os.path.join(TEST_PATH, 'nearley')
- BUILTIN_PATH = os.path.join(NEARLEY_PATH, 'builtin')
-
- if not os.path.exists(NEARLEY_PATH):
- print("Skipping Nearley tests!")
- raise ImportError("Skipping Nearley tests!")
-
- class TestNearley(unittest.TestCase):
- def test_css(self):
- fn = os.path.join(NEARLEY_PATH, 'examples/csscolor.ne')
- with open(fn) as f:
- grammar = f.read()
-
- code = create_code_for_nearley_grammar(grammar, 'csscolor', BUILTIN_PATH, os.path.dirname(fn))
- d = {}
- exec (code, d)
- parse = d['parse']
-
- c = parse('#a199ff')
- assert c['r'] == 161
- assert c['g'] == 153
- assert c['b'] == 255
-
- c = parse('rgb(255, 70%, 3)')
- assert c['r'] == 255
- assert c['g'] == 178
- assert c['b'] == 3
-
- def test_include(self):
- fn = os.path.join(NEARLEY_PATH, 'test/grammars/folder-test.ne')
- with open(fn) as f:
- grammar = f.read()
-
- code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
- d = {}
- exec (code, d)
- parse = d['parse']
-
- parse('a')
- parse('b')
-
- def test_multi_include(self):
- fn = os.path.join(NEARLEY_PATH, 'test/grammars/multi-include-test.ne')
- with open(fn) as f:
- grammar = f.read()
-
- code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
- d = {}
- exec (code, d)
- parse = d['parse']
-
- parse('a')
- parse('b')
- parse('c')
-
- def test_utf8(self):
- grammar = u'main -> "±a"'
- code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './')
- d = {}
- exec (code, d)
- parse = d['parse']
-
- parse(u'±a')
-
- def test_utf8_2(self):
- fn = os.path.join(TEST_PATH, 'grammars/unicode.ne')
- nearley_tool_main(fn, 'x', NEARLEY_PATH)
-
- def test_include_utf8(self):
- fn = os.path.join(TEST_PATH, 'grammars/include_unicode.ne')
- nearley_tool_main(fn, 'main', NEARLEY_PATH)
-
-
- if __name__ == '__main__':
- unittest.main()
|