源码索引 / CURRENT IMPLEMENTATION
guest/test_prefix.py
51 行 · 构建时读取的实际文件,不是讲解用伪代码。
import json
import unittest
from prefix import Prefix
class PrefixTests(unittest.TestCase):
def make(self, inputs=None):
calls = []
def prepare(request):
calls.append(request)
return len(calls)
return Prefix(inputs, prepare), calls
def test_split_statement_and_no_duplicate_prepare(self):
p, calls = self.make({"item": "book"})
p.feed("a=tool('lookup',key=inputs['item']")
self.assertEqual(calls, [])
p.feed(")\n")
p.feed("# another chunk\n")
self.assertEqual(len(calls), 1)
self.assertEqual(p.claim(calls[0]), 1)
self.assertIsNone(p.claim(calls[0]))
def test_no_branch_or_arbitrary_expression(self):
for source in ("if True:\n a=tool('lookup',key='book')\n",
"x='book'\na=tool('lookup',key=x)\n",
"a=tool('lookup',key=compute())\n"):
p, calls = self.make()
p.feed(source)
self.assertEqual(calls, [])
def test_errors_are_not_raised_during_feed(self):
p, calls = self.make({})
p.feed("a=tool('lookup',key=inputs['absent'])\n")
self.assertEqual(calls, [])
def test_match_does_not_search_ahead(self):
p, calls = self.make()
p.feed("a=tool('lookup',key='book')\nb=tool('lookup',key='shipping')\n")
self.assertIsNone(p.claim(calls[1]))
self.assertEqual(p.claim(calls[0]), 1)
self.assertEqual(p.claim(calls[1]), 2)
def test_no_handle_does_not_keep_request(self):
p = Prefix(None, lambda request: 0)
p.feed("a=tool('lookup',key='book')\n")
self.assertEqual(p.ready, [])
if __name__ == "__main__":
unittest.main()