Use pathlib in tests

This commit is contained in:
Miguel de Benito Delgado
2025-06-28 21:16:21 +02:00
parent b95cc78cbd
commit d097171a1a
+23 -30
View File
@@ -1,3 +1,5 @@
from pathlib import Path
import pytest
from solidlsp.ls import SolidLanguageServer
@@ -10,19 +12,22 @@ from . import CLOJURE_CLI_FAIL
@pytest.mark.clojure
@pytest.mark.skipif(CLOJURE_CLI_FAIL, reason=f"Clojure CLI not available: {CLOJURE_CLI_FAIL}")
class TestLanguageServerBasics:
test_app = Path("src") / "test_app"
core_path = str(test_app / "core.clj")
utils_path = str(test_app / "utils.clj")
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_basic_definition(self, language_server: SolidLanguageServer):
"""
Test finding definition of 'greet' function call in core.clj
"""
filepath = "src/test_app/core.clj"
result = language_server.request_definition(filepath, 20, 12) # Position of 'greet' in (greet "World")
result = language_server.request_definition(self.core_path, 20, 12) # Position of 'greet' in (greet "World")
assert isinstance(result, list)
assert len(result) >= 1
definition = result[0]
assert definition["relativePath"] == "src/test_app/core.clj"
assert definition["relativePath"] == self.core_path
assert definition["range"]["start"]["line"] == 2, \
"Should find the definition of greet function at line 2"
@@ -32,36 +37,30 @@ class TestLanguageServerBasics:
"""
Test finding references to 'multiply' function from core.clj
"""
filepath = "src/test_app/core.clj"
result = language_server.request_references(filepath, 12, 6)
result = language_server.request_references(self.core_path, 12, 6)
assert isinstance(result, list) and len(result) >= 2, \
"Should find definition + usage in utils.clj"
assert isinstance(result, list) and len(result) >= 2, "Should find definition + usage in utils.clj"
usage_found = any(
item["relativePath"] == "src/test_app/utils.clj" and
item["range"]["start"]["line"] == 6 # multiply usage in calculate-area
item["relativePath"] == self.utils_path and item["range"]["start"]["line"] == 6 # multiply usage in calculate-area
for item in result
)
assert usage_found, "Should find multiply usage in utils.clj"
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_completions(self, language_server: SolidLanguageServer):
filepath = "src/test_app/utils.clj"
with language_server.open_file(filepath):
with language_server.open_file(self.utils_path):
# After "core/" in calculate-area
result = language_server.request_completions(filepath, 6, 8)
result = language_server.request_completions(self.utils_path, 6, 8)
assert isinstance(result, list) and len(result) > 0
completion_texts = [item["completionText"] for item in result]
assert any("multiply" in text for text in completion_texts), \
"Should find 'multiply' function in completions after 'core/'"
assert any("multiply" in text for text in completion_texts), "Should find 'multiply' function in completions after 'core/'"
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_document_symbols(self, language_server: SolidLanguageServer):
filepath = "src/test_app/core.clj"
symbols, _ = language_server.request_document_symbols(filepath)
symbols, _ = language_server.request_document_symbols(self.core_path)
assert isinstance(symbols, list) and len(symbols) >= 4, \
"greet, add, multiply, -main functions"
@@ -75,9 +74,8 @@ class TestLanguageServerBasics:
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_hover(self, language_server: SolidLanguageServer):
# Test hover on greet function
filepath = "src/test_app/core.clj"
result = language_server.request_hover(filepath, 2, 7) # Position on 'greet' function name
"""Test hover on greet function"""
result = language_server.request_hover(self.core_path, 2, 7)
assert result is not None, "Hover should return information for greet function"
assert "contents" in result
@@ -107,10 +105,8 @@ class TestLanguageServerBasics:
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_retrieve_content_around_line(self, language_server: SolidLanguageServer):
"""Test retrieving content around specific lines"""
filepath = "src/test_app/core.clj"
# Test retrieving content around the greet function definition (line 2)
result = language_server.retrieve_content_around_line(filepath, 2, 2)
result = language_server.retrieve_content_around_line(self.core_path, 2, 2)
assert result is not None, "Should retrieve content around line 2"
content_str = result.to_display_string()
@@ -118,7 +114,7 @@ class TestLanguageServerBasics:
assert "defn" in content_str, "Should contain defn keyword"
# Test retrieving content around multiply function (around line 13)
result = language_server.retrieve_content_around_line(filepath, 13, 1)
result = language_server.retrieve_content_around_line(self.core_path, 13, 1)
assert result is not None, "Should retrieve content around line 13"
content_str = result.to_display_string()
@@ -127,15 +123,14 @@ class TestLanguageServerBasics:
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_namespace_functions(self, language_server: SolidLanguageServer):
"""Test definition lookup for core/greet usage in utils.clj"""
filepath = "src/test_app/utils.clj"
# Position of 'greet' in core/greet call
result = language_server.request_definition(filepath, 11, 25)
result = language_server.request_definition(self.utils_path, 11, 25)
assert isinstance(result, list)
assert len(result) >= 1
definition = result[0]
assert definition["relativePath"] == "src/test_app/core.clj",\
assert definition["relativePath"] == self.core_path, \
"Should find the definition of greet in core.clj"
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
@@ -157,8 +152,7 @@ class TestLanguageServerBasics:
@pytest.mark.parametrize("language_server", [Language.CLOJURE], indirect=True)
def test_request_references_with_content(self, language_server: SolidLanguageServer):
"""Test references to multiply function with content"""
filepath = "src/test_app/core.clj"
result = language_server.request_references_with_content(filepath, 12, 6, 3)
result = language_server.request_references_with_content(self.core_path, 12, 6, 3)
assert result is not None, "Should find references with content"
assert isinstance(result, list)
@@ -224,8 +218,7 @@ class TestLanguageServerBasics:
"""Test finding symbols that reference a given symbol
Finds references to the 'multiply' function.
"""
filepath = "src/test_app/core.clj"
result = language_server.request_referencing_symbols(filepath, 12, 6)
result = language_server.request_referencing_symbols(self.core_path, 12, 6)
assert isinstance(result, list) and len(result) > 0, \
"Should find at least one referencing symbol"
found_relevant_references = False