Files
Saleem Abdulrasool 79105208d5 SKCore,SKTestSupport: adjust test server handling
The test system depended on the shebang to locate the python
interpreter.  However, this is not a portable system.  Instead, prefer
to explicitly search for the interpreter prior to the execution.  This
enables supporting execution of the script support on all platforms. A
secondary change of the printed string is required for Windows. Python
will replace `\n` with `\r\n` resulting in `\r\n` being emitted as
`\r\r\n` on Windows breaking the expectations on the receiver.  Adjust
this by explicitly writing out a binary string to the raw underlying
buffer to avoid the translation.
2022-09-06 09:19:37 -07:00

99 lines
3.1 KiB
Python
Executable File

import json
import sys
while True:
line = sys.stdin.readline()
if len(line) == 0:
break
assert line.startswith('Content-Length:')
length = int(line[len('Content-Length:'):])
sys.stdin.readline()
message = json.loads(sys.stdin.read(length))
response = None
if message["method"] == "build/initialize":
response = {
"jsonrpc": "2.0",
"id": message["id"],
"result": {
"displayName": "test server",
"version": "0.1",
"bspVersion": "2.0",
"rootUri": "blah",
"capabilities": {"languageIds": ["a", "b"]},
"data": {
"indexStorePath": "some/index/store/path"
}
}
}
elif message["method"] == "build/initialized":
continue
elif message["method"] == "build/shutdown":
response = {
"jsonrpc": "2.0",
"id": message["id"],
"result": None
}
elif message["method"] == "build/exit":
break
elif message["method"] == "buildTarget/sources":
response = {
"jsonrpc": "2.0",
"id": message["id"],
"result": {
"items": [
{
"target": {"uri": "build://target/a"},
"sources": [
{
"uri": "file:///path/to/a/file",
"kind": 1,
"generated": False
},
{
"uri": "file:///path/to/a/folder/",
"kind": 2,
"generated": False
}
]
},
{
"target": {"uri": "build://target/b"},
"sources": [
{
"uri": "file:///path/to/b/file",
"kind": 1,
"generated": False
},
{
"uri": "file:///path/to/b/folder/",
"kind": 2,
"generated": False
}
]
}
]
}
}
# ignore other notifications
elif "id" in message:
response = {
"jsonrpc": "2.0",
"id": message["id"],
"error": {
"code": 123,
"message": "unhandled method {}".format(message["method"]),
}
}
if response:
responseStr = json.dumps(response)
try:
sys.stdout.buffer.write(f"Content-Length: {len(responseStr)}\r\n\r\n{responseStr}".encode('utf-8'))
sys.stdout.flush()
except IOError:
# stdout closed, time to quit
break