"""Tests for CLI argument parsing.""" import pytest import sys class TestCLIParsing: def test_default_args(self): """Default arguments are set correctly.""" from lidar_pipeline.cli import main # We can't easily call main() without files, so test argparse directly import argparse parser = argparse.ArgumentParser() parser.add_argument("input", help="Input directory") parser.add_argument("-o", "--output", default="/data/output") parser.add_argument("-r", "--resolution", type=float, default=0.5) parser.add_argument("-w", "--workers", type=int, default=1) parser.add_argument("-f", "--force", action="store_true") parser.add_argument("--file", nargs="+", type=str, default=None) args = parser.parse_args(["./input"]) assert args.input == "./input" assert args.output == "/data/output" assert args.resolution == 0.5 assert args.workers == 1 assert args.force is False assert args.file is None def test_file_flag_single(self): import argparse parser = argparse.ArgumentParser() parser.add_argument("--file", nargs="+", type=str, default=None) args = parser.parse_args(["--file", "test_file"]) assert args.file == ["test_file"] def test_file_flag_multiple(self): import argparse parser = argparse.ArgumentParser() parser.add_argument("--file", nargs="+", type=str, default=None) args = parser.parse_args(["--file", "file1", "file2", "file3"]) assert args.file == ["file1", "file2", "file3"] def test_force_flag(self): import argparse parser = argparse.ArgumentParser() parser.add_argument("-f", "--force", action="store_true") args = parser.parse_args(["-f"]) assert args.force is True def test_resolution_custom(self): import argparse parser = argparse.ArgumentParser() parser.add_argument("-r", "--resolution", type=float, default=0.5) args = parser.parse_args(["-r", "0.2"]) assert args.resolution == 0.2 class TestSetupLogging: def test_default_logging(self): """Default logging shows messages without timestamps.""" import logging from lidar_pipeline.cli import setup_logging logger = setup_logging(verbose=False, debug=False) assert logger.level == logging.INFO assert len(logger.handlers) == 1 # Format should not include timestamps fmt = logger.handlers[0].formatter._fmt assert "%(asctime)" not in fmt def test_verbose_logging(self): """Verbose logging includes timestamps.""" import logging from lidar_pipeline.cli import setup_logging logger = setup_logging(verbose=True, debug=False) fmt = logger.handlers[0].formatter._fmt assert "%(asctime)" in fmt def test_debug_logging(self): """Debug logging includes file:line info.""" import logging from lidar_pipeline.cli import setup_logging logger = setup_logging(verbose=False, debug=True) assert logger.level == logging.DEBUG fmt = logger.handlers[0].formatter._fmt assert "%(filename)" in fmt assert "%(lineno)" in fmt