# Add smoke test targets

function(add_dr_test script)
    add_test(NAME ${script} COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/run_test.sh ${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh)

    set_tests_properties(${script} PROPERTIES
        TIMEOUT 30
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    )
endfunction()

add_dr_test(test_smoke_basic)
add_dr_test(test_smoke_tool_call)
add_dr_test(invalid_tool_fails)

# Add tool validation tests
add_dr_test(test_tool_edit)
add_dr_test(test_tool_read_file)
add_dr_test(test_tool_list_files)
add_dr_test(test_tool_grep)
add_dr_test(test_tool_shell)
add_dr_test(test_tool_shell_ctrlc)
add_dr_test(test_ctrlc_after_tool)
add_dr_test(test_tool_read_multi_modal)

# Add feature validation tests
add_dr_test(test_tool_restrictions)
add_dr_test(test_n_flag)
add_dr_test(test_prompt_file)
add_dr_test(test_load_chat)
add_dr_test(process_reasoning)
add_dr_test(test_skill_scanner)
add_dr_test(test_nested_skills)
add_dr_test(test_skill_parsing)
add_dr_test(test_skill_validation)
add_dr_test(test_skill_listing)

# Add editor tests
add_dr_test(test_editor)

add_dr_test(test_tool_skill)
add_dr_test(test_skill_filter)
add_dr_test(test_skill_override)
add_dr_test(test_skill_unreadable_dir)
add_dr_test(test_auto_temp_file)

# Add JSON parsing and error handling tests
add_dr_test(test_json_safe_parse)

add_dr_test(test_json_type_mixed)

# Add json_to_field tests
add_dr_test(test_json_to_field)

# Add std::variant JSON serialization tests
add_dr_test(test_json_variant)

# Add expected error handling tests
add_dr_test(test_expected_errors)

# Add rebase parser tests (split into individual tests)
add_dr_test(test_rebase_parser_all_commands)
add_dr_test(test_rebase_parser_with_comments)
add_dr_test(test_rebase_parser_with_empty_lines)
add_dr_test(test_rebase_parser_invalid_command)
add_dr_test(test_rebase_parser_index_out_of_range)
add_dr_test(test_rebase_parser_duplicate_indices)
add_dr_test(test_rebase_parser_malformed_role)
add_dr_test(test_rebase_parser_invalid_role_value)
add_dr_test(test_rebase_parser_first_error_returned)
add_dr_test(test_rebase_parser_empty_rebase)
add_dr_test(test_rebase_parser_only_comments)
add_dr_test(test_rebase_parser_all_valid_roles)
add_dr_test(test_rebase_parser_invalid_command_digit)
add_dr_test(test_rebase_parser_invalid_index)
add_dr_test(test_rebase_parser_missing_role)
add_dr_test(test_rebase_parser_whitespace_variations)
add_dr_test(test_rebase_parser_comments_and_empty_lines_mixed)

# Add rebase content formatting tests (split into individual tests)
add_dr_test(test_rebase_content_basic_messages)
add_dr_test(test_rebase_content_multiline_content)
add_dr_test(test_rebase_content_tool_call_display)
add_dr_test(test_rebase_content_tool_message)
add_dr_test(test_rebase_content_empty_message)
add_dr_test(test_rebase_content_header_comments)
add_dr_test(test_rebase_content_multiple_tool_calls)
add_dr_test(test_rebase_content_message_indices)
add_dr_test(test_rebase_content_scissors_line)
add_dr_test(test_rebase_content_special_characters)
add_dr_test(test_rebase_content_unicode_characters)
add_dr_test(test_rebase_content_very_long_content)

# Add rebase apply tests (split into individual tests)
add_dr_test(test_rebase_apply_pick_preserves)
add_dr_test(test_rebase_apply_drop_removes)
add_dr_test(test_rebase_apply_edit_updates_role)
add_dr_test(test_rebase_apply_edit_preserves_fields)
add_dr_test(test_rebase_apply_implicit_pick)
add_dr_test(test_rebase_apply_mixed_commands)
add_dr_test(test_rebase_apply_empty_lines_preserves)
add_dr_test(test_rebase_apply_lenient_orphaned_results)
add_dr_test(test_rebase_apply_edit_preserves_tool_calls)
add_dr_test(test_rebase_apply_deleting_lines_drops)
add_dr_test(test_rebase_apply_all_lines_deleted_keeps)

# Add edit prompt tests (split from test_edit_prompt.sh)
add_dr_test(test_edit_prompt_with_context)
add_dr_test(test_edit_prompt_first_message)
add_dr_test(test_edit_prompt_separator_placement)
add_dr_test(test_edit_prompt_multiline_context)
add_dr_test(test_edit_prompt_tool_role)
add_dr_test(test_edit_prompt_middle_message)

# Add edit history flag tests (split from test_edit_history_flag.sh)
add_dr_test(test_edit_history_flag_requires_F_short)
add_dr_test(test_edit_history_flag_requires_F_long)
add_dr_test(test_edit_history_flag_empty_file_short)
add_dr_test(test_edit_history_flag_no_history)
add_dr_test(test_edit_history_flag_empty_file_long)

# Add edit history integration tests (split into individual tests)
add_dr_test(test_edit_history_pick_all_messages)
add_dr_test(test_edit_history_no_edits_unchanged)
add_dr_test(test_edit_history_drop_single_message)
add_dr_test(test_edit_history_edit_message_content)
add_dr_test(test_edit_history_change_message_role)
add_dr_test(test_edit_history_delete_line_equals_drop)
add_dr_test(test_edit_history_edit_first_message)
add_dr_test(test_edit_history_prompt_noop)
add_dr_test(test_edit_history_empty_history_rejected)
add_dr_test(test_edit_history_invalid_command_error)
add_dr_test(test_edit_history_invalid_index_error)
add_dr_test(test_edit_history_invalid_role_error)
add_dr_test(test_edit_history_multiple_edits)
add_dr_test(test_edit_history_then_continue)
add_dr_test(test_edit_history_remove_all_content)
add_dr_test(test_edit_history_multiple_consecutive_edits)
add_dr_test(test_edit_history_special_characters)
add_dr_test(test_edit_history_very_long_content)
add_dr_test(test_edit_history_assistant_with_tool_calls)
add_dr_test(test_edit_history_drop_all_messages)
add_dr_test(test_edit_history_unicode_characters)

# Add base64 encoding tests
add_dr_test(test_base64_encode)

# Add image file reading tests
add_dr_test(test_image_flag)

# Add ImageUrl and ContentPart tests
add_dr_test(test_image_url)

# Add multimodal message construction tests
add_dr_test(test_multimodal_message)

# Add multimodal round-trip persistence tests
add_dr_test(test_multimodal_roundtrip)

# Add print_history multimodal tests
add_dr_test(test_print_history_multimodal)

# Add encoding tests
add_dr_test(test_encoding)

# Add harness config tests (base_url and model in HarnessConfig)
add_dr_test(test_harness_config)
