summaryrefslogtreecommitdiff
path: root/tests/cli.rs
blob: 8197a92ed173be36c2d350540e362ddf3be3a047 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use anyhow::Result;
use assert_cmd::cargo::cargo_bin;
use rexpect::{session::PtySession, spawn};

fn spawn_interactive_process() -> Result<PtySession> {
    let path = cargo_bin(env!("CARGO_PKG_NAME"));
    let mut process = spawn(&path.display().to_string(), Some(3000))?;
    expect_prompt(&mut process)?;
    Ok(process)
}

fn expect_prompt(p: &mut PtySession) -> Result<()> {
    p.exp_string("> ")?;
    Ok(())
}

#[test]
fn shows_a_prompt() -> Result<()> {
    spawn_interactive_process()?;
    Ok(())
}

#[test]
fn does_nothing_after_receiving_whitespace_input() -> Result<()> {
    let mut p = spawn_interactive_process()?;
    p.send_line("")?;
    expect_prompt(&mut p)?;
    p.send_line("  ")?;
    expect_prompt(&mut p)?;
    Ok(())
}

#[test]
fn quits_when_eof_is_sent() -> Result<()> {
    let mut p = spawn_interactive_process()?;
    p.send_control('d')?;
    p.exp_eof()?;
    Ok(())
}

#[test]
fn quits_when_exit_command_is_sent() -> Result<()> {
    let mut p = spawn_interactive_process()?;
    p.send_line("exit")?;
    p.exp_eof()?;
    Ok(())
}