| 
							- from __future__ import absolute_import
 - 
 - import sys
 - from unittest import TestCase, main
 - 
 - from lark import Lark, Tree
 - from lark.lexer import Lexer, Token
 - import lark.lark as lark_module
 - 
 - try:
 -     from StringIO import StringIO
 - except ImportError:
 -     from io import BytesIO as StringIO
 - 
 - import tempfile, os
 - 
 - 
 - class MockFile(StringIO):
 -     def close(self):
 -         pass
 -     def __enter__(self):
 -         return self
 -     def __exit__(self, *args):
 -         pass
 - 
 - class MockFS:
 -     def __init__(self):
 -         self.files = {}
 - 
 -     def open(self, name, mode=None):
 -         if name not in self.files:
 -             f = self.files[name] = MockFile()
 -         else:
 -             f = self.files[name]
 -             f.seek(0)
 -         return f
 - 
 -     def exists(self, name):
 -         return name in self.files
 - 
 - 
 - class CustomLexer(Lexer):
 -     def __init__(self, lexer_conf):
 -         pass
 - 
 -     def lex(self, data):
 -         for obj in data:
 -             yield Token('A', obj)
 - 
 - 
 - class TestCache(TestCase):
 -     def setUp(self):
 -         pass
 - 
 -     def test_simple(self):
 -         g = '''start: "a"'''
 - 
 -         fn = "bla"
 - 
 -         fs = lark_module.FS
 -         mock_fs = MockFS()
 -         try:
 -             lark_module.FS = mock_fs
 -             Lark(g, parser='lalr', cache=fn)
 -             assert fn in mock_fs.files
 -             parser = Lark(g, parser='lalr', cache=fn)
 -             assert parser.parse('a') == Tree('start', [])
 - 
 -             mock_fs.files = {}
 -             assert len(mock_fs.files) == 0
 -             Lark(g, parser='lalr', cache=True)
 -             assert len(mock_fs.files) == 1
 -             parser = Lark(g, parser='lalr', cache=True)
 -             assert parser.parse('a') == Tree('start', [])
 - 
 -             parser = Lark(g+' "b"', parser='lalr', cache=True)
 -             assert len(mock_fs.files) == 2
 -             assert parser.parse('ab') == Tree('start', [])
 - 
 -             parser = Lark(g, parser='lalr', cache=True)
 -             assert parser.parse('a') == Tree('start', [])
 - 
 -             # Test with custom lexer
 -             mock_fs.files = {}
 -             parser = Lark(g, parser='lalr', lexer=CustomLexer, cache=True)
 -             parser = Lark(g, parser='lalr', lexer=CustomLexer, cache=True)
 -             assert len(mock_fs.files) == 1
 -             assert parser.parse('a') == Tree('start', [])
 -         finally:
 -             lark_module.FS = fs
 - 
 - 
 - 
 - if __name__ == '__main__':
 -     main()
 - 
 - 
 
 
  |