ccls/test_runner_e2e.py

72 lines
1.5 KiB
Python
Raw Normal View History

import shlex
from subprocess import Popen, PIPE
# We write test files in python. The test runner collects all python files in
# the directory and executes them. The test function just creates a test object
# which specifies expected stdin/stdout.
#
# Test functions are automatically discovered; they just need to be in the
# global environment and start with `Test_`.
class TestBuilder:
def WithFile(self, filename, contents):
"""
Writes the file contents to disk so that the language server can access it.
"""
pass
def Send(self, stdin):
"""
Send the given message to the language server.
"""
# Content-Length: ...\r\n
# \r\n
# {
# "jsonrpc": "2.0",
# "id": 1,
# "method": "textDocument/didOpen",
# "params": {
# ...
# }
# }
def Expect(self, stdout):
"""
Expect a message from the language server.
"""
pass
def SetupCommonInit():
"""
Add initialize/initialized messages.
"""
pass
def Test_Outline():
return TestBuilder()
.SetupCommonInit()
.WithFile("foo.cc",
"""
void main() {}
"""
)
.Send({
'id': 1,
'method': 'textDocument/documentSymbol',
'params': {}
})
.Expect({
'id': 1
'result': [
lsSymbolInfo('void main()', (1, 1), lsSymbolKind.Function)
]
})
# Possible test runner implementation
# cmd = "x64/Release/indexer.exe --language-server"
# process = Popen(shlex.split(cmd), stdin=PIPE, stdout=PIPE)
# process.communicate('{}')
# exit_code = process.wait()