mirror of
https://github.com/kevinveenbirkenbach/directory-content-scanner.git
synced 2025-12-16 21:54:09 +00:00
Analysis-Ready Code (ARC). The project is now fully migrated to a modern src/-based Python package layout, with proper packaging via pyproject.toml, a clean Nix flake, and improved CLI entry points. Major changes: • Add `src/arc/` package with clean module structure: - arc/__init__.py now contains the main() dispatcher and clipboard helpers - arc/__main__.py provides a proper `python -m arc` entry point - arc/cli.py rewritten with full argparse-based interface - arc/code_processor.py modernized and relocated - arc/directory_handler.py rewritten with output_stream support - arc/tee.py added for multi-stream output (stdout + buffer) • Remove legacy top-level modules: - cli.py - directory_handler.py - main.py • Introduce fully PEP-517 compliant pyproject.toml with console script: - arc = arc.__main__:main • Add Nix flake (`flake.nix`) providing: - buildPythonApplication package `arc` - `nix run .#arc` app - development shell with Python + xclip • Add Makefile overhaul: - automatic detection of Nix vs Python installation - unified install/uninstall targets - Nix wrapper installation into ~/.local/bin - improved help text and shell safety • Add GitHub CI pipelines: - ci-python.yml for Python builds + Makefile tests + arc --help - ci-nix.yml for Nix builds, flake checks, dev-shell tests, and `nix run .#arc` • Refactor and extend unit tests: - test_arc.py updated for src/ imports - new tests: test_cli.py, test_main.py, test_tee.py - improved CodeProcessor and DirectoryHandler tests • Add egg-info metadata for local builds • Add build/lib/ tree for compatibility with setuptools (generated) Overall, this commit modernizes ARC into a clean, robust, and fully packaged Python/Nix hybrid tool, enabling reproducible builds, solid CLI behavior, testable architecture, and CI automation. https://chatgpt.com/share/693933a0-e280-800f-9cf0-26036d15be04
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
# tests/unit/test_cli.py
|
|
import os
|
|
import sys
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
# Ensure src/ is on sys.path when running via discover
|
|
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
|
|
SRC_ROOT = os.path.join(PROJECT_ROOT, "src")
|
|
if SRC_ROOT not in sys.path:
|
|
sys.path.insert(0, SRC_ROOT)
|
|
|
|
from arc.cli import parse_arguments # noqa: E402
|
|
|
|
|
|
class TestCliParseArguments(unittest.TestCase):
|
|
def test_basic_paths_and_defaults(self):
|
|
with patch.object(sys, "argv", ["arc", "foo", "bar"]):
|
|
args = parse_arguments()
|
|
|
|
self.assertEqual(args.paths, ["foo", "bar"])
|
|
self.assertEqual(args.file_types, [])
|
|
self.assertEqual(args.ignore_file_strings, [])
|
|
self.assertFalse(args.clipboard)
|
|
self.assertFalse(args.quiet)
|
|
# show_hidden default is False → ignore_hidden should be True
|
|
self.assertFalse(args.show_hidden)
|
|
self.assertTrue(args.ignore_hidden)
|
|
|
|
def test_clipboard_and_quiet_short_flags(self):
|
|
with patch.object(sys, "argv", ["arc", ".", "-x", "-q"]):
|
|
args = parse_arguments()
|
|
|
|
self.assertTrue(args.clipboard)
|
|
self.assertTrue(args.quiet)
|
|
|
|
def test_ignore_file_strings_short_and_long(self):
|
|
# Test only the short form -I collecting multiple values
|
|
with patch.object(
|
|
sys,
|
|
"argv",
|
|
["arc", ".", "-I", "build", "dist", "node_modules"],
|
|
):
|
|
args = parse_arguments()
|
|
|
|
self.assertEqual(
|
|
args.ignore_file_strings,
|
|
["build", "dist", "node_modules"],
|
|
)
|
|
|
|
def test_show_hidden_switches_ignore_hidden_off(self):
|
|
with patch.object(sys, "argv", ["arc", ".", "--show-hidden"]):
|
|
args = parse_arguments()
|
|
|
|
self.assertTrue(args.show_hidden)
|
|
self.assertFalse(args.ignore_hidden)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|