コード例 #1
0
async def main():
    lines = Path('test.lean').read_text().split('\n')

    async with trio.open_nursery() as nursery:
        server = TrioLeanServer(nursery, debug=False)
        await server.start()
        await server.full_sync('test.lean')

        for i, line in enumerate(lines):
            before = await server.state('test.lean', i + 1, 0)
            after = await server.state('test.lean', i + 1, len(line))
            if before or after:
                print(f'Line {i+1}: {line}')
                print(f'State before:\n{before}\n')
                print(f'State after:\n{after}\n')

        server.kill()
        nursery.cancel_scope.cancel()
コード例 #2
0
    async def check_waiting_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync('test.lean', content='--')
            await server.state(filename="test.lean", line=1, col=0)

            nursery.cancel_scope.cancel()
コード例 #3
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync("test.lean")
            await server.full_sync("test.lean")  # sync same file twice

            await server.state(filename="test.lean", line=1, col=0)

            nursery.cancel_scope.cancel()
コード例 #4
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery, debug_bytes=True)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync('test.lean', content='example : true := \nbegin end')
            state = await server.state(filename="test.lean", line=2, col=0)

            assert state == "⊢ true"

            nursery.cancel_scope.cancel()
コード例 #5
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery)
            await start_with_mock_lean(server, mock_lean_script)

            # for this test to pass it has to (1) not block forever and (2) throw an error
            try:
                await server.full_sync("bad_file_name")
                assert False, "An error should have been thrown here"
            except ChildProcessError:
                pass

            await server.full_sync("test.lean")  # sync a different file

            nursery.cancel_scope.cancel()
コード例 #6
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery, debug_bytes=True)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync('test.lean')

            # for this test to pass it has to throw an error
            try:
                await server.send(InfoRequest(file_name="wrongfile.lean", line=1, column=0))
                assert False, "An error should have been thrown here"
            except ChildProcessError:
                pass

            nursery.cancel_scope.cancel()
コード例 #7
0
async def start_with_mock_lean(lean_server: TrioLeanServer,
                               script: List[LeanScriptStep]):
    """
    Call this in place of TrioLeanServer.start().  It will run a mock Lean server following the script,
    in place of the real Lean server.
    """

    # start up the mock lean process
    mock_lean_process = MockLeanServerProcess(script)
    lean_server.nursery.start_soon(mock_lean_process.follow_script)

    # attach to the lean interface
    lean_server.process = mock_lean_process

    # perform the remainder of the start up processes as normal
    lean_server.nursery.start_soon(lean_server.receiver)
コード例 #8
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery, debug_bytes=True)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync('test.lean')

            # check response object is parsed and of the correct type
            # (more parsing tests can be found in unit tests for the commands.py file)
            response1 = await server.send(InfoRequest(file_name="test.lean", line=1, column=25))
            assert isinstance(response1, InfoResponse)
            assert response1.record.source.column == 11

            response2 = await server.send(InfoRequest(file_name="test.lean", line=100, column=0))
            assert isinstance(response2, InfoResponse)
            assert response2.record is None

            nursery.cancel_scope.cancel()
コード例 #9
0
    async def check_behavior():
        async with trio.open_nursery() as nursery:
            server = TrioLeanServer(nursery, debug_bytes=True)
            await start_with_mock_lean(server, mock_lean_script)

            await server.full_sync('test.lean')

            response1 = await server.send(SleepRequest())
            assert response1 is None

            response2 = await server.send(InfoRequest(file_name="test.lean", line=1, column=0))
            assert isinstance(response2, InfoResponse)

            response3 = await server.send(LongSleepRequest())
            assert response3 is None

            response4 = await server.send(InfoRequest(file_name="test.lean", line=1, column=0))
            assert isinstance(response4, InfoResponse)

            nursery.cancel_scope.cancel()