magi-code 0.77.1

Repository-aware CLI coding agent for terminal work
Documentation
#[cfg(test)]
mod tests {
    use crate::checkpoints::{ParsedRewindTarget, parse_rewind_target};

    #[test]
    fn rewind_command_accepts_three_modes_and_rejects_unknown_modes() {
        for (name, mode) in [
            ("conversation", crate::checkpoints::RewindMode::Conversation),
            ("files", crate::checkpoints::RewindMode::Files),
            ("both", crate::checkpoints::RewindMode::Both),
        ] {
            assert_eq!(
                parse_rewind_target(Some(&format!("--to 2 --mode {name} --dry-run"))).unwrap(),
                ParsedRewindTarget::Target {
                    target_turn: 2,
                    dry_run: true,
                    mode
                }
            );
        }
        assert!(parse_rewind_target(Some("--to 2 --mode unknown")).is_err());
        assert!(parse_rewind_target(Some("--to 2 --mode")).is_err());
    }

    #[test]
    fn parse_rewind_target_matrix() {
        assert_eq!(
            parse_rewind_target(None).unwrap(),
            ParsedRewindTarget::NeedsSelection
        );
        assert_eq!(
            parse_rewind_target(Some("3")).unwrap(),
            ParsedRewindTarget::Target {
                target_turn: 3,
                dry_run: false,
                mode: crate::checkpoints::RewindMode::Conversation,
            }
        );
        assert_eq!(
            parse_rewind_target(Some("--to 3 --dry-run")).unwrap(),
            ParsedRewindTarget::Target {
                target_turn: 3,
                dry_run: true,
                mode: crate::checkpoints::RewindMode::Conversation,
            }
        );
        assert!(parse_rewind_target(Some("0")).is_err());
        assert!(parse_rewind_target(Some("-1")).is_err());
        assert!(parse_rewind_target(Some("1..2")).is_err());
        assert!(parse_rewind_target(Some("--to")).is_err());
        assert!(parse_rewind_target(Some("1 2")).is_err());
    }
}