diff --git a/test/solidlsp/clojure/test_clojure_basic.py b/test/solidlsp/clojure/test_clojure_basic.py index f667bd5..46e60e7 100644 --- a/test/solidlsp/clojure/test_clojure_basic.py +++ b/test/solidlsp/clojure/test_clojure_basic.py @@ -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