diff options
Diffstat (limited to 'tests/conftest.py')
-rw-r--r-- | tests/conftest.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..5dd2ecb --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,122 @@ +############################################################################ +# Original work Copyright 2017 Palantir Technologies, Inc. # +# Original work licensed under the MIT License. # +# See ThirdPartyNotices.txt in the project root for license information. # +# All modifications Copyright (c) Open Law Library. All rights reserved. # +# # +# Licensed under the Apache License, Version 2.0 (the "License") # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http: // www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +############################################################################ +import asyncio +import pathlib + +import pytest +from lsprotocol import types, converters + +from pygls import uris, IS_PYODIDE +from pygls.feature_manager import FeatureManager +from pygls.workspace import Workspace + +from .ls_setup import ( + NativeClientServer, + PyodideClientServer, + setup_ls_features, +) + +from .client import create_client_for_server + +DOC = """document +for +testing +with "😋" unicode. +""" +DOC_URI = uris.from_fs_path(__file__) or "" + + +ClientServer = NativeClientServer +if IS_PYODIDE: + ClientServer = PyodideClientServer + + +@pytest.fixture(autouse=False) +def client_server(request): + if hasattr(request, "param"): + ConfiguredClientServer = request.param + client_server = ConfiguredClientServer() + else: + client_server = ClientServer() + setup_ls_features(client_server.server) + + client_server.start() + client, server = client_server + + yield client, server + + client_server.stop() + + +@pytest.fixture(scope="session") +def uri_for(): + """Returns the uri corresponsing to a file in the example workspace.""" + base_dir = pathlib.Path( + __file__, "..", "..", "examples", "servers", "workspace" + ).resolve() + + def fn(*args): + fpath = pathlib.Path(base_dir, *args) + return uris.from_fs_path(str(fpath)) + + return fn + + +@pytest.fixture() +def event_loop(): + """Redefine `pytest-asyncio's default event_loop fixture to match the scope + of our client fixture.""" + + policy = asyncio.get_event_loop_policy() + + loop = policy.new_event_loop() + yield loop + + try: + # Not implemented on pyodide + loop.close() + except NotImplementedError: + pass + + +@pytest.fixture(scope="session") +def server_dir(): + """Returns the directory where all the example language servers live""" + path = pathlib.Path(__file__) / ".." / ".." / "examples" / "servers" + return path.resolve() + + +code_action_client = create_client_for_server("code_actions.py") +inlay_hints_client = create_client_for_server("inlay_hints.py") +json_server_client = create_client_for_server("json_server.py") + + +@pytest.fixture +def feature_manager(): + """Return a feature manager""" + return FeatureManager(None, converters.get_converter()) + + +@pytest.fixture +def workspace(tmpdir): + """Return a workspace.""" + return Workspace( + uris.from_fs_path(str(tmpdir)), + sync_kind=types.TextDocumentSyncKind.Incremental, + ) |