zzz / tests /unit /test_arg_parser.py
ar08's picture
Upload 1040 files
246d201 verified
raw
history blame
4.26 kB
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}'