Spaces:
Build error
Build error
| 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 | |
| assert args.selected_repo is None | |
| 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', | |
| '--selected-repo', | |
| 'owner/repo', | |
| ] | |
| ) | |
| 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 | |
| assert args.selected_repo == 'owner/repo' | |
| 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', | |
| '--agent-config AGENT_CONFIG', | |
| '-n NAME, --name NAME', | |
| '--config-file CONFIG_FILE', | |
| '--no-auto-continue', | |
| '--selected-repo SELECTED_REPO', | |
| '--override-cli-mode OVERRIDE_CLI_MODE', | |
| ] | |
| 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 == 20, f'Expected 20 options, found {option_count}' | |
| def test_selected_repo_format(): | |
| """Test that the selected-repo argument accepts owner/repo format.""" | |
| parser = get_parser() | |
| args = parser.parse_args(['--selected-repo', 'owner/repo']) | |
| assert args.selected_repo == 'owner/repo' | |