PPysolate SpineREAD THE CODE · UNDERSTAND THE SYSTEM
章节目录
源码索引 / 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()