test_arg_parser.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import pytest
  2. from openhands.core.config import OH_DEFAULT_AGENT, OH_MAX_ITERATIONS, get_parser
  3. def test_parser_default_values():
  4. parser = get_parser()
  5. args = parser.parse_args([])
  6. assert args.directory is None
  7. assert args.task == ''
  8. assert args.file is None
  9. assert args.agent_cls == OH_DEFAULT_AGENT
  10. assert args.max_iterations == OH_MAX_ITERATIONS
  11. assert args.max_budget_per_task is None
  12. assert args.eval_output_dir == 'evaluation/evaluation_outputs/outputs'
  13. assert args.eval_n_limit is None
  14. assert args.eval_num_workers == 4
  15. assert args.eval_note is None
  16. assert args.llm_config is None
  17. assert args.name == 'default'
  18. def test_parser_custom_values():
  19. parser = get_parser()
  20. args = parser.parse_args(
  21. [
  22. '-d',
  23. '/path/to/dir',
  24. '-t',
  25. 'custom task',
  26. '-f',
  27. 'task.txt',
  28. '-c',
  29. 'CustomAgent',
  30. '-i',
  31. '50',
  32. '-b',
  33. '100.5',
  34. '--eval-output-dir',
  35. 'custom/output',
  36. '--eval-n-limit',
  37. '10',
  38. '--eval-num-workers',
  39. '8',
  40. '--eval-note',
  41. 'Test run',
  42. '-l',
  43. 'gpt4',
  44. '-n',
  45. 'test_session',
  46. ]
  47. )
  48. assert args.directory == '/path/to/dir'
  49. assert args.task == 'custom task'
  50. assert args.file == 'task.txt'
  51. assert args.agent_cls == 'CustomAgent'
  52. assert args.max_iterations == 50
  53. assert args.max_budget_per_task == pytest.approx(100.5)
  54. assert args.eval_output_dir == 'custom/output'
  55. assert args.eval_n_limit == 10
  56. assert args.eval_num_workers == 8
  57. assert args.eval_note == 'Test run'
  58. assert args.llm_config == 'gpt4'
  59. assert args.name == 'test_session'
  60. def test_parser_file_overrides_task():
  61. parser = get_parser()
  62. args = parser.parse_args(['-t', 'task from command', '-f', 'task_file.txt'])
  63. assert args.task == 'task from command'
  64. assert args.file == 'task_file.txt'
  65. def test_parser_invalid_max_iterations():
  66. parser = get_parser()
  67. with pytest.raises(SystemExit):
  68. parser.parse_args(['-i', 'not_a_number'])
  69. def test_parser_invalid_max_budget():
  70. parser = get_parser()
  71. with pytest.raises(SystemExit):
  72. parser.parse_args(['-b', 'not_a_number'])
  73. def test_parser_invalid_eval_n_limit():
  74. parser = get_parser()
  75. with pytest.raises(SystemExit):
  76. parser.parse_args(['--eval-n-limit', 'not_a_number'])
  77. def test_parser_invalid_eval_num_workers():
  78. parser = get_parser()
  79. with pytest.raises(SystemExit):
  80. parser.parse_args(['--eval-num-workers', 'not_a_number'])
  81. def test_help_message(capsys):
  82. parser = get_parser()
  83. with pytest.raises(SystemExit):
  84. parser.parse_args(['--help'])
  85. captured = capsys.readouterr()
  86. help_output = captured.out
  87. print(help_output)
  88. expected_elements = [
  89. 'usage:',
  90. 'Run an agent with a specific task',
  91. 'options:',
  92. '-h, --help',
  93. '-d DIRECTORY, --directory DIRECTORY',
  94. '-t TASK, --task TASK',
  95. '-f FILE, --file FILE',
  96. '-c AGENT_CLS, --agent-cls AGENT_CLS',
  97. '-i MAX_ITERATIONS, --max-iterations MAX_ITERATIONS',
  98. '-b MAX_BUDGET_PER_TASK, --max-budget-per-task MAX_BUDGET_PER_TASK',
  99. '--eval-output-dir EVAL_OUTPUT_DIR',
  100. '--eval-n-limit EVAL_N_LIMIT',
  101. '--eval-num-workers EVAL_NUM_WORKERS',
  102. '--eval-note EVAL_NOTE',
  103. '--eval-ids EVAL_IDS',
  104. '-l LLM_CONFIG, --llm-config LLM_CONFIG',
  105. '-n NAME, --name NAME',
  106. '--config-file CONFIG_FILE',
  107. ]
  108. for element in expected_elements:
  109. assert element in help_output, f"Expected '{element}' to be in the help message"
  110. option_count = help_output.count(' -')
  111. assert option_count == 15, f'Expected 15 options, found {option_count}'