| from __future__ import annotations |
|
|
| import unittest |
|
|
| from agent_harness.components import Candidate |
| from agent_harness.fusion import reciprocal_rank_fusion |
| from agent_harness.syntax_index import SyntaxRetriever, parse_go_file, parse_python_file |
|
|
|
|
| class SyntaxAndFusionTests(unittest.TestCase): |
| def test_tree_sitter_extracts_and_retrieves_method(self) -> None: |
| symbols = parse_go_file( |
| "cache/client.go", |
| "package cache\ntype Client struct{}\nfunc (c *Client) PresignHeadObject() error { return nil }\n", |
| ) |
| names = {item.name for item in symbols} |
| self.assertEqual(names, {"Client", "PresignHeadObject"}) |
| result = SyntaxRetriever(symbols).retrieve("HEAD presign cache object", 5) |
| self.assertEqual(result[0].symbol, "cache/client.go::PresignHeadObject") |
|
|
| def test_rrf_rewards_file_present_in_both_rankings(self) -> None: |
| def candidate(path: str, source: str) -> Candidate: |
| return Candidate(path, 1, 2, path, source, 1.0) |
|
|
| first = [candidate("a.go", "lexical"), candidate("shared.go", "lexical")] |
| second = [candidate("b.go", "dense"), candidate("shared.go", "dense")] |
| fused = reciprocal_rank_fusion([first, second], 3) |
| self.assertEqual(fused[0].path, "shared.go") |
|
|
| def test_tree_sitter_extracts_and_retrieves_python_method(self) -> None: |
| symbols = parse_python_file( |
| "gitlab/client.py", |
| "class Client:\n def retry_request(self, url: str) -> bool:\n return bool(url)\n", |
| ) |
| names = {item.name for item in symbols} |
| self.assertEqual(names, {"Client", "retry_request"}) |
| result = SyntaxRetriever(symbols).retrieve("retry client request", 5) |
| self.assertEqual(result[0].symbol, "gitlab/client.py::retry_request") |
| self.assertIn("retry_request", symbols[1].identifiers) |
|
|
| def test_identifier_extraction_persists_after_first_declaration(self) -> None: |
| symbols = parse_go_file( |
| "demo.go", |
| "package demo\nfunc First() { Second() }\nfunc Second() { First() }\n", |
| ) |
| self.assertEqual([item.name for item in symbols], ["First", "Second"]) |
| self.assertIn("Second", symbols[0].identifiers) |
| self.assertIn("First", symbols[1].identifiers) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|