limit-cli 0.0.46

AI-powered terminal coding assistant with TUI. Multi-provider LLM support, session persistence, and built-in tools.
Documentation
use limit_cli::tui::input_queue::InputQueue;

#[test]
fn test_full_queue_flow() {
    let mut queue = InputQueue::new();

    queue.queue_message("First message".to_string());
    queue.queue_message("Second message".to_string());

    assert!(queue.has_queued_messages());
    assert_eq!(queue.queued_count(), 2);

    let first = queue.pop_queued();
    assert_eq!(first.unwrap().text, "First message");
    assert_eq!(queue.queued_count(), 1);

    queue.clear();
    assert!(queue.is_empty());
}

#[test]
fn test_edit_queued_message() {
    let mut queue = InputQueue::new();

    queue.queue_message("First".to_string());
    queue.queue_message("Second".to_string());
    queue.queue_message("Third".to_string());

    let last = queue.pop_last_queued();
    assert_eq!(last.unwrap().text, "Third");
    assert_eq!(queue.queued_count(), 2);
}

#[test]
fn test_merge_all_messages() {
    let mut queue = InputQueue::new();

    queue.add_steer("Steer message".to_string());
    queue.queue_message("Queued message".to_string());

    let merged = queue.merge_all();
    assert_eq!(merged, Some("Steer message\n\nQueued message".to_string()));
    assert!(queue.is_empty());
}

#[test]
fn test_suppress_and_resume() {
    let mut queue = InputQueue::new();
    assert!(!queue.is_autosend_suppressed());

    queue.set_suppress_autosend(true);
    assert!(queue.is_autosend_suppressed());

    queue.set_suppress_autosend(false);
    assert!(!queue.is_autosend_suppressed());
}

#[test]
fn test_thread_switching() {
    let mut queue = InputQueue::new();

    queue.queue_message("Thread A message".to_string());
    queue.add_steer("Thread A steer".to_string());

    let thread_a_state = queue.save_thread_state();
    assert!(thread_a_state.is_some());

    queue.clear();

    queue.queue_message("Thread B message".to_string());
    assert_eq!(queue.queued_count(), 1);

    queue.restore_thread_state(thread_a_state);
    assert_eq!(queue.queued_count(), 1);
    assert_eq!(queue.steer_count(), 1);
}

#[test]
fn test_interrupt_flag_flow() {
    let mut queue = InputQueue::new();
    assert!(!queue.should_submit_after_interrupt());

    queue.add_steer("Steer".to_string());
    queue.set_submit_after_interrupt(true);

    assert!(queue.should_submit_after_interrupt());

    let _ = queue.merge_all();
    assert!(!queue.should_submit_after_interrupt());
}

#[test]
fn test_fifo_order() {
    let mut queue = InputQueue::new();

    for i in 1..=5 {
        queue.queue_message(format!("Message {}", i));
    }

    for i in 1..=5 {
        let msg = queue.pop_queued();
        assert_eq!(msg.unwrap().text, format!("Message {}", i));
    }

    assert!(queue.is_empty());
}

#[test]
fn test_lifo_edit_order() {
    let mut queue = InputQueue::new();

    queue.queue_message("First".to_string());
    queue.queue_message("Second".to_string());
    queue.queue_message("Third".to_string());

    assert_eq!(queue.pop_last_queued().unwrap().text, "Third");
    assert_eq!(queue.pop_last_queued().unwrap().text, "Second");
    assert_eq!(queue.pop_last_queued().unwrap().text, "First");
    assert!(queue.is_empty());
}

#[test]
fn test_drain_operations() {
    let mut queue = InputQueue::new();

    queue.queue_message("Q1".to_string());
    queue.queue_message("Q2".to_string());
    queue.add_steer("S1".to_string());

    let queued = queue.drain_queued();
    assert_eq!(queued.len(), 2);
    assert!(!queue.has_queued_messages());
    assert!(queue.has_pending_steers());

    let steers = queue.drain_steers();
    assert_eq!(steers.len(), 1);
    assert!(queue.is_empty());
}

#[test]
fn test_preview_texts() {
    let mut queue = InputQueue::new();

    queue.queue_message("Queued 1".to_string());
    queue.queue_message("Queued 2".to_string());
    queue.add_steer("Steer 1".to_string());

    let queued_texts = queue.queued_texts();
    assert_eq!(queued_texts, vec!["Queued 1", "Queued 2"]);

    let steer_texts = queue.steer_texts();
    assert_eq!(steer_texts, vec!["Steer 1"]);
}