use atomcode_core::agent::subtask_driver::SubtaskDriver;
use atomcode_core::config::prompt_sections::build_rules;
#[test]
fn unified_prompt_has_all_sections() {
let prompt = build_rules();
assert!(prompt.contains("WORKFLOW"), "Must have workflow section");
assert!(prompt.contains("RULES"), "Must have rules section");
assert!(prompt.contains("TOOLS"), "Must have tool guide");
assert!(prompt.contains("SCOPE"), "Must have scope discipline");
assert!(prompt.contains("VERIFY"), "Must have verify step");
assert!(prompt.contains("edit_file"), "Must mention edit_file");
assert!(prompt.contains("create_file"), "Must mention write_file");
}
#[test]
fn unified_prompt_has_key_guidance() {
let prompt = build_rules();
assert!(
prompt.contains("### File:"),
"Must guide EXECUTE mode format"
);
assert!(
prompt.contains("old_string/new_string"),
"Must guide text-match editing"
);
assert!(
prompt.contains("NEVER write_file on existing"),
"Must ban write_file on existing files"
);
}
#[test]
fn unified_prompt_size_reasonable() {
let prompt = build_rules();
let tokens = prompt.len() / 4;
assert!(
tokens > 50,
"Too short: {} tokens — rules may be missing",
tokens
);
assert!(
tokens < 500,
"Too long: {} tokens — violates Less is More principle",
tokens
);
}
#[test]
fn subtask_extracts_files_from_plan() {
let mut driver = SubtaskDriver::new();
driver.extract_from_plan("\u{4FEE}\u{6539} TagRebuildTaskService.java, AITagExtractionService.java \u{548C} SettingsView.vue");
assert!(driver.active);
assert_eq!(driver.subtasks.len(), 3);
assert!(driver.subtasks[0].file.ends_with(".java"));
assert!(driver.subtasks[2].file.ends_with(".vue"));
}
#[test]
fn subtask_instruction_format() {
let mut driver = SubtaskDriver::new();
driver.extract_from_plan("\u{4FEE}\u{6539} TagService.java \u{548C} SettingsView.vue");
let instr = driver.current_instruction().unwrap();
assert!(instr.contains("Subtask 1/2"));
assert!(instr.contains("ONE edit"));
}
#[test]
fn subtask_advance_and_complete() {
let mut driver = SubtaskDriver::new();
driver.extract_from_plan("\u{4FEE}\u{6539} A.java, B.java, C.vue");
assert_eq!(driver.subtasks.len(), 3);
driver.advance();
driver.advance();
driver.advance();
assert!(driver.all_done());
assert!(!driver.active);
}
#[test]
fn subtask_empty_plan() {
let mut driver = SubtaskDriver::new();
driver.extract_from_plan(
"\u{6211}\u{89C9}\u{5F97}\u{9700}\u{8981}\u{4FEE}\u{6539}\u{4E00}\u{4E9B}\u{4EE3}\u{7801}",
);
assert!(!driver.active);
}