Fix Windows C# startup and Roslyn install

This commit is contained in:
Lauritz-Configo committed 2026-06-27 19:29:43 +02:00
1 parent 901bd2155a
commit 8e7c8feb84
4 files changed
+82 -6

No files matched your search

@@ -7,7 +7,7 @@ from unittest.mock import patch
import pytest
from solidlsp.language_servers.common import RuntimeDependency
from solidlsp.language_servers.csharp_language_server import CSharpLanguageServer
from solidlsp.language_servers.csharp_language_server import ROSLYN_LONGEST_KNOWN_PACKAGE_MEMBER, CSharpLanguageServer
from solidlsp.settings import SolidLSPSettings
@@ -128,3 +128,33 @@ class TestNuGetOrgDownload:
"solidlsp.language_servers.csharp_language_server.FileUtils.download_and_extract_archive_verified",
):
dependency_provider._download_nuget_package(test_dependency)
def test_download_nuget_package_uses_short_extraction_path_for_deep_windows_cache(self, tmp_path: Path):
provider = object.__new__(CSharpLanguageServer.DependencyProvider)
provider._ls_resources_dir = str(tmp_path.joinpath(*(["nested-cache-root"] * 8)))
test_dependency = RuntimeDependency(
id="TestPackage",
package_name="roslyn-language-server.win-x64",
package_version="5.5.0-2.26078.4",
url="https://www.nuget.org/api/v2/package/roslyn-language-server.win-x64/5.5.0-2.26078.4",
extract_path="tools/net10.0/win-x64",
)
def fake_download_and_extract(
_url: str,
target_path: str,
*_args: object,
**_kwargs: object,
) -> None:
deepest_package_member = Path(target_path) / f"tools/net10.0/win-x64/{ROSLYN_LONGEST_KNOWN_PACKAGE_MEMBER}"
assert len(str(deepest_package_member)) < 260
with (
patch("solidlsp.language_servers.csharp_language_server.platform.system", return_value="Windows"),
patch(
"solidlsp.language_servers.csharp_language_server.FileUtils.download_and_extract_archive_verified",
side_effect=fake_download_and_extract,
),
):
provider._download_nuget_package(test_dependency)
@@ -0,0 +1,35 @@
from __future__ import annotations
from pathlib import Path
from types import SimpleNamespace
import pytest
from solidlsp.language_servers.omnisharp import OmniSharp
class _NoWaitEvent:
def is_set(self) -> bool:
return False
def wait(self, timeout: float | None = None) -> bool:
raise AssertionError("OmniSharp startup must not wait for dynamic capability registration")
@pytest.mark.csharp
def test_omnisharp_startup_does_not_wait_for_capability_registration(tmp_path: Path) -> None:
omnisharp = OmniSharp.__new__(OmniSharp)
omnisharp.repository_root_path = str(tmp_path)
omnisharp.server = SimpleNamespace(
send=SimpleNamespace(initialize=lambda _params: {"capabilities": {}}),
notify=SimpleNamespace(initialized=lambda _params: None, workspace_did_change_configuration=lambda _params: None),
on_request=lambda *_args: None,
on_notification=lambda *_args: None,
start=lambda: None,
)
omnisharp.server_ready = _NoWaitEvent()
omnisharp.definition_available = _NoWaitEvent()
omnisharp.references_available = _NoWaitEvent()
omnisharp.completions_available = _NoWaitEvent()
omnisharp._start_server()