import pytest from openhands.core.config import OH_DEFAULT_AGENT, OH_MAX_ITERATIONS, get_parser def test_parser_default_values(): parser = get_parser() args = parser.parse_args([]) assert args.directory is None assert args.task == '' assert args.file is None assert args.agent_cls == OH_DEFAULT_AGENT assert args.max_iterations == OH_MAX_ITERATIONS assert args.max_budget_per_task is None assert args.eval_output_dir == 'evaluation/evaluation_outputs/outputs' assert args.eval_n_limit is None assert args.eval_num_workers == 4 assert args.eval_note is None assert args.llm_config is None assert args.name == '' assert not args.no_auto_continue def test_parser_custom_values(): parser = get_parser() args = parser.parse_args( [ '-v', '-d', '/path/to/dir', '-t', 'custom task', '-f', 'task.txt', '-c', 'CustomAgent', '-i', '50', '-b', '100.5', '--eval-output-dir', 'custom/output', '--eval-n-limit', '10', '--eval-num-workers', '8', '--eval-note', 'Test run', '-l', 'gpt4', '-n', 'test_session', '--no-auto-continue', ] ) assert args.directory == '/path/to/dir' assert args.task == 'custom task' assert args.file == 'task.txt' assert args.agent_cls == 'CustomAgent' assert args.max_iterations == 50 assert args.max_budget_per_task == pytest.approx(100.5) assert args.eval_output_dir == 'custom/output' assert args.eval_n_limit == 10 assert args.eval_num_workers == 8 assert args.eval_note == 'Test run' assert args.llm_config == 'gpt4' assert args.name == 'test_session' assert args.no_auto_continue assert args.version def test_parser_file_overrides_task(): parser = get_parser() args = parser.parse_args(['-t', 'task from command', '-f', 'task_file.txt']) assert args.task == 'task from command' assert args.file == 'task_file.txt' def test_parser_invalid_max_iterations(): parser = get_parser() with pytest.raises(SystemExit): parser.parse_args(['-i', 'not_a_number']) def test_parser_invalid_max_budget(): parser = get_parser() with pytest.raises(SystemExit): parser.parse_args(['-b', 'not_a_number']) def test_parser_invalid_eval_n_limit(): parser = get_parser() with pytest.raises(SystemExit): parser.parse_args(['--eval-n-limit', 'not_a_number']) def test_parser_invalid_eval_num_workers(): parser = get_parser() with pytest.raises(SystemExit): parser.parse_args(['--eval-num-workers', 'not_a_number']) def test_help_message(capsys): parser = get_parser() with pytest.raises(SystemExit): parser.parse_args(['--help']) captured = capsys.readouterr() help_output = captured.out print(help_output) expected_elements = [ 'usage:', 'Run the agent via CLI', 'options:', '-v, --version', '-h, --help', '-d DIRECTORY, --directory DIRECTORY', '-t TASK, --task TASK', '-f FILE, --file FILE', '-c AGENT_CLS, --agent-cls AGENT_CLS', '-i MAX_ITERATIONS, --max-iterations MAX_ITERATIONS', '-b MAX_BUDGET_PER_TASK, --max-budget-per-task MAX_BUDGET_PER_TASK', '--eval-output-dir EVAL_OUTPUT_DIR', '--eval-n-limit EVAL_N_LIMIT', '--eval-num-workers EVAL_NUM_WORKERS', '--eval-note EVAL_NOTE', '--eval-ids EVAL_IDS', '-l LLM_CONFIG, --llm-config LLM_CONFIG', '-n NAME, --name NAME', '--config-file CONFIG_FILE', '--no-auto-continue', ] for element in expected_elements: assert element in help_output, f"Expected '{element}' to be in the help message" option_count = help_output.count(' -') assert option_count == 17, f'Expected 17 options, found {option_count}'