use super::*;
use crate::repl::debugger::DebugSession;
use crate::repl::ContinueResult;
#[test]
fn test_REPL_008_001_create_session() {
let script = "echo hello\necho world";
let session = DebugSession::new(script);
assert_eq!(session.current_line(), 1, "Should start at line 1");
assert_eq!(session.total_lines(), 2, "Should have 2 lines");
assert!(!session.is_finished(), "Should not be finished initially");
}
#[test]
fn test_REPL_008_001_step_single_line() {
let script = "echo hello";
let mut session = DebugSession::new(script);
let output = session.step();
assert!(output.is_some(), "Should execute the line");
assert!(
output.unwrap().contains("echo hello"),
"Should show executed line"
);
assert!(
session.is_finished(),
"Should be finished after single line"
);
assert!(session.step().is_none(), "Should return None when finished");
}
#[test]
fn test_REPL_008_001_step_multiple_lines() {
let script = "echo line1\necho line2\necho line3";
let mut session = DebugSession::new(script);
assert_eq!(session.current_line(), 1);
session.step();
assert_eq!(session.current_line(), 2);
session.step();
assert_eq!(session.current_line(), 3);
session.step();
assert!(session.is_finished());
}
#[test]
fn test_REPL_008_001_current_line_content() {
let script = "first line\nsecond line";
let session = DebugSession::new(script);
assert_eq!(session.current_line_content(), Some("first line"));
}
#[test]
fn test_REPL_008_001_breakpoint_integration() {
let script = "echo line1\necho line2\necho line3";
let mut session = DebugSession::new(script);
assert!(session.set_breakpoint(2), "Should set breakpoint at line 2");
assert!(
!session.at_breakpoint(),
"Line 1 should not have breakpoint"
);
session.step();
assert!(session.at_breakpoint(), "Line 2 should have breakpoint");
}
#[test]
fn test_REPL_008_001_invalid_breakpoint() {
let script = "echo hello";
let mut session = DebugSession::new(script);
assert!(!session.set_breakpoint(0), "Should reject line 0");
assert!(
!session.set_breakpoint(999),
"Should reject line beyond script"
);
}
#[test]
fn test_REPL_008_002_next_same_level() {
let script = "echo line1\necho line2\necho line3";
let mut session = DebugSession::new(script);
assert_eq!(session.current_line(), 1, "Should start at line 1");
session.step_over();
assert_eq!(
session.current_line(),
2,
"Should be at line 2 after next()"
);
assert!(!session.is_finished(), "Should not be finished");
}
#[test]
fn test_REPL_008_002_next_to_end() {
let script = "echo hello";
let mut session = DebugSession::new(script);
session.step_over();
assert!(session.is_finished(), "Should be finished after next()");
}
#[test]
fn test_REPL_008_002_next_multiple() {
let script = "echo line1\necho line2\necho line3";
let mut session = DebugSession::new(script);
assert_eq!(session.current_line(), 1);
session.step_over();
assert_eq!(session.current_line(), 2);
session.step_over();
assert_eq!(session.current_line(), 3);
session.step_over();
assert!(
session.is_finished(),
"Should be finished after 3 next() calls"
);
}
#[test]
fn test_REPL_008_002_next_when_finished() {
let script = "echo hello";
let mut session = DebugSession::new(script);
session.step_over();
assert!(session.is_finished());
session.step_over();
assert!(
session.is_finished(),
"Should remain finished after next() on completed session"
);
}
include!("debugger_tests_extracted_tests_repl_008.rs");