This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 

89 líneas
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()