From 3d4d71206fc298322506b59d90deae834984d840 Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Wed, 9 Jul 2025 23:05:36 +0200 Subject: [PATCH] Update Elixir tests --- .../elixir/test_elixir_integration.py | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/test/solidlsp/elixir/test_elixir_integration.py b/test/solidlsp/elixir/test_elixir_integration.py index 25c86a8f..d7a36b1e 100644 --- a/test/solidlsp/elixir/test_elixir_integration.py +++ b/test/solidlsp/elixir/test_elixir_integration.py @@ -67,34 +67,6 @@ class TestElixirIntegration: # Should point to models.ex assert "models.ex" in defining_symbol["location"]["uri"] - @pytest.mark.parametrize("language_server", [Language.ELIXIR], indirect=True) - def test_comprehensive_symbol_search(self, language_server: SolidLanguageServer): - """Test comprehensive symbol search across the entire project.""" - # Search for all function definitions - function_pattern = r"def\s+\w+\s*[\(\s]" - function_matches = language_server.search_files_for_pattern(function_pattern) - - # Should find functions across multiple files - if function_matches: - files_with_functions = set() - for match in function_matches: - if match.source_file_path: - files_with_functions.add(os.path.basename(match.source_file_path)) - - # Should find functions in multiple files - expected_files = {"models.ex", "services.ex", "examples.ex", "utils.ex", "test_repo.ex"} - found_files = expected_files.intersection(files_with_functions) - assert len(found_files) > 0, f"Expected functions in {expected_files}, found in {files_with_functions}" - - # Search for struct definitions - struct_pattern = r"defstruct\s+\[" - struct_matches = language_server.search_files_for_pattern(struct_pattern) - - if struct_matches: - # Should find structs primarily in models.ex - models_structs = [m for m in struct_matches if m.source_file_path and "models.ex" in m.source_file_path] - assert len(models_structs) > 0, "Should find struct definitions in models.ex" - @pytest.mark.parametrize("language_server", [Language.ELIXIR], indirect=True) def test_module_hierarchy_understanding(self, language_server: SolidLanguageServer): """Test that the language server understands Elixir module hierarchy.""" @@ -136,12 +108,42 @@ class TestElixirIntegration: assert not matcher.is_relevant_filename("package.json") assert not matcher.is_relevant_filename("Cargo.toml") - @pytest.mark.parametrize("language_server", [Language.ELIXIR], indirect=True) - def test_protocol_and_implementation_understanding(self, language_server: SolidLanguageServer): + +class TestElixirProject: + @pytest.mark.parametrize("project", [Language.ELIXIR], indirect=True) + def test_comprehensive_symbol_search(self, project): + """Test comprehensive symbol search across the entire project.""" + # Search for all function definitions + function_pattern = r"def\s+\w+\s*[\(\s]" + function_matches = project.search_files_for_pattern(function_pattern) + + # Should find functions across multiple files + if function_matches: + files_with_functions = set() + for match in function_matches: + if match.source_file_path: + files_with_functions.add(os.path.basename(match.source_file_path)) + + # Should find functions in multiple files + expected_files = {"models.ex", "services.ex", "examples.ex", "utils.ex", "test_repo.ex"} + found_files = expected_files.intersection(files_with_functions) + assert len(found_files) > 0, f"Expected functions in {expected_files}, found in {files_with_functions}" + + # Search for struct definitions + struct_pattern = r"defstruct\s+\[" + struct_matches = project.search_files_for_pattern(struct_pattern) + + if struct_matches: + # Should find structs primarily in models.ex + models_structs = [m for m in struct_matches if m.source_file_path and "models.ex" in m.source_file_path] + assert len(models_structs) > 0, "Should find struct definitions in models.ex" + + @pytest.mark.parametrize("project", [Language.ELIXIR], indirect=True) + def test_protocol_and_implementation_understanding(self, project): """Test that the language server understands Elixir protocols and implementations.""" # Search for protocol definitions protocol_pattern = r"defprotocol\s+\w+" - protocol_matches = language_server.search_files_for_pattern(protocol_pattern, paths_include_glob="**/models.ex") + protocol_matches = project.search_files_for_pattern(protocol_pattern, paths_include_glob="**/models.ex") if protocol_matches: # Should find the Serializable protocol @@ -150,7 +152,7 @@ class TestElixirIntegration: # Search for protocol implementations impl_pattern = r"defimpl\s+\w+" - impl_matches = language_server.search_files_for_pattern(impl_pattern, paths_include_glob="**/models.ex") + impl_matches = project.search_files_for_pattern(impl_pattern, paths_include_glob="**/models.ex") if impl_matches: # Should find multiple implementations