This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 rivejä
2.3 KiB

  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import
  3. import unittest
  4. import logging
  5. import os
  6. import codecs
  7. logging.basicConfig(level=logging.INFO)
  8. from lark.tools.nearley import create_code_for_nearley_grammar, main as nearley_tool_main
  9. TEST_PATH = os.path.abspath(os.path.dirname(__file__))
  10. NEARLEY_PATH = os.path.join(TEST_PATH, 'nearley')
  11. BUILTIN_PATH = os.path.join(NEARLEY_PATH, 'builtin')
  12. class TestNearley(unittest.TestCase):
  13. def test_css(self):
  14. fn = os.path.join(NEARLEY_PATH, 'examples/csscolor.ne')
  15. with open(fn) as f:
  16. grammar = f.read()
  17. code = create_code_for_nearley_grammar(grammar, 'csscolor', BUILTIN_PATH, os.path.dirname(fn))
  18. d = {}
  19. exec (code, d)
  20. parse = d['parse']
  21. c = parse('#a199ff')
  22. assert c['r'] == 161
  23. assert c['g'] == 153
  24. assert c['b'] == 255
  25. c = parse('rgb(255, 70%, 3)')
  26. assert c['r'] == 255
  27. assert c['g'] == 178
  28. assert c['b'] == 3
  29. def test_include(self):
  30. fn = os.path.join(NEARLEY_PATH, 'test/grammars/folder-test.ne')
  31. with open(fn) as f:
  32. grammar = f.read()
  33. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
  34. d = {}
  35. exec (code, d)
  36. parse = d['parse']
  37. parse('a')
  38. parse('b')
  39. def test_multi_include(self):
  40. fn = os.path.join(NEARLEY_PATH, 'test/grammars/multi-include-test.ne')
  41. with open(fn) as f:
  42. grammar = f.read()
  43. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
  44. d = {}
  45. exec (code, d)
  46. parse = d['parse']
  47. parse('a')
  48. parse('b')
  49. parse('c')
  50. def test_utf8(self):
  51. grammar = u'main -> "±a"'
  52. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './')
  53. d = {}
  54. exec (code, d)
  55. parse = d['parse']
  56. parse(u'±a')
  57. def test_utf8_2(self):
  58. fn = os.path.join(TEST_PATH, 'grammars/unicode.ne')
  59. nearley_tool_main(fn, 'x', NEARLEY_PATH)
  60. def test_include_utf8(self):
  61. fn = os.path.join(TEST_PATH, 'grammars/include_unicode.ne')
  62. nearley_tool_main(fn, 'main', NEARLEY_PATH)
  63. if __name__ == '__main__':
  64. unittest.main()