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.
 
 

89 line
2.4 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. if not os.path.exists(NEARLEY_PATH):
  13. print("Skipping Nearley tests!")
  14. raise ImportError("Skipping Nearley tests!")
  15. class TestNearley(unittest.TestCase):
  16. def test_css(self):
  17. fn = os.path.join(NEARLEY_PATH, 'examples/csscolor.ne')
  18. with open(fn) as f:
  19. grammar = f.read()
  20. code = create_code_for_nearley_grammar(grammar, 'csscolor', BUILTIN_PATH, os.path.dirname(fn))
  21. d = {}
  22. exec (code, d)
  23. parse = d['parse']
  24. c = parse('#a199ff')
  25. assert c['r'] == 161
  26. assert c['g'] == 153
  27. assert c['b'] == 255
  28. c = parse('rgb(255, 70%, 3)')
  29. assert c['r'] == 255
  30. assert c['g'] == 178
  31. assert c['b'] == 3
  32. def test_include(self):
  33. fn = os.path.join(NEARLEY_PATH, 'test/grammars/folder-test.ne')
  34. with open(fn) as f:
  35. grammar = f.read()
  36. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
  37. d = {}
  38. exec (code, d)
  39. parse = d['parse']
  40. parse('a')
  41. parse('b')
  42. def test_multi_include(self):
  43. fn = os.path.join(NEARLEY_PATH, 'test/grammars/multi-include-test.ne')
  44. with open(fn) as f:
  45. grammar = f.read()
  46. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
  47. d = {}
  48. exec (code, d)
  49. parse = d['parse']
  50. parse('a')
  51. parse('b')
  52. parse('c')
  53. def test_utf8(self):
  54. grammar = u'main -> "±a"'
  55. code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './')
  56. d = {}
  57. exec (code, d)
  58. parse = d['parse']
  59. parse(u'±a')
  60. def test_utf8_2(self):
  61. fn = os.path.join(TEST_PATH, 'grammars/unicode.ne')
  62. nearley_tool_main(fn, 'x', NEARLEY_PATH)
  63. def test_include_utf8(self):
  64. fn = os.path.join(TEST_PATH, 'grammars/include_unicode.ne')
  65. nearley_tool_main(fn, 'main', NEARLEY_PATH)
  66. if __name__ == '__main__':
  67. unittest.main()