Files
FreeCADWasmDev/tools/test_fast_source_search_scope.py
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

56 lines
2.2 KiB
Python

import contextlib
import io
import os
from pathlib import Path
import subprocess
import unittest
from unittest.mock import patch
import fast_source_search as search
class SearchScopeTests(unittest.TestCase):
def run_search(self, arguments):
selected = Path(search.__file__).resolve()
unrelated = search.ROOT / "tools/run_business_acceptance.py"
output = io.StringIO()
with patch.dict(os.environ, {"FREECAD_SOURCE_BUDGET_MARKER": ""}), \
patch("sys.argv", ["fast_source_search.py", *arguments]), \
patch.object(search, "batch_paths", return_value=[unrelated]) as batch, \
patch.object(search, "ripgrep", return_value="rg"), \
patch.object(search.subprocess, "run", return_value=subprocess.CompletedProcess([], 0, "", "")) as run, \
contextlib.redirect_stderr(output):
status = search.main()
return status, run, batch, selected, unrelated
def test_explicit_forms_exclude_batch(self):
for arguments in [
["needle", "--path", "tools/fast_source_search.py"],
["--pattern", "needle", "--paths", "tools/fast_source_search.py"],
["needle", "tools/fast_source_search.py"],
]:
with self.subTest(arguments=arguments):
status, run, batch, selected, unrelated = self.run_search(arguments)
self.assertEqual(status, 0)
self.assertIn(str(selected), run.call_args.args[0])
self.assertNotIn(str(unrelated), run.call_args.args[0])
batch.assert_not_called()
def test_implicit_scope_keeps_batch(self):
status, run, batch, _, unrelated = self.run_search(["needle"])
self.assertEqual(status, 0)
self.assertIn(str(unrelated), run.call_args.args[0])
batch.assert_called_once_with()
def test_missing_explicit_path_does_not_fall_back(self):
status, run, batch, _, _ = self.run_search([
"needle", "--path", "tools/nonexistent-search-scope-test-file.cpp",
])
self.assertEqual(status, 2)
run.assert_not_called()
batch.assert_not_called()
if __name__ == "__main__":
unittest.main()