flagon-io/hello

public

Greets people from the command line. The sample repository for g1t.

hello/tests/cli.rs

114 lines3,060 bytesCodeBlame
1use std::process::Command;
2
3#[test]
4fn version_flag_prints_crate_version() {
5 let output = Command::new(env!("CARGO_BIN_EXE_hello"))
6 .arg("--version")
7 .output()
8 .unwrap();
9 assert!(output.status.success());
10 assert_eq!(
11 String::from_utf8(output.stdout).unwrap(),
12 format!("{}\n", env!("CARGO_PKG_VERSION"))
13 );
14}
15
16fn run(args: &[&str]) -> std::process::Output {
17 Command::new(env!("CARGO_BIN_EXE_hello"))
18 .args(args)
19 .output()
20 .unwrap()
21}
22
23#[test]
24fn times_prints_greeting_repeatedly() {
25 let output = run(&["--times", "3", "Ada"]);
26 assert!(output.status.success());
27 assert_eq!(
28 String::from_utf8(output.stdout).unwrap(),
29 "Hi, Ada!\n".repeat(3)
30 );
31}
32
33#[test]
34fn times_combines_with_shout() {
35 let output = run(&["--times", "2", "--shout", "Ada"]);
36 assert!(output.status.success());
37 assert_eq!(
38 String::from_utf8(output.stdout).unwrap(),
39 "HI, ADA!\n".repeat(2)
40 );
41}
42
43#[test]
44fn times_with_bad_value_fails() {
45 let output = run(&["--times", "abc"]);
46 assert!(!output.status.success());
47 assert!(!output.stderr.is_empty());
48}
49
50#[test]
51fn lang_es_greets_in_spanish() {
52 let output = run(&["--lang", "es", "Ana"]);
53 assert!(output.status.success());
54 assert_eq!(String::from_utf8(output.stdout).unwrap(), "¡Hola, Ana!\n");
55}
56
57#[test]
58fn lang_fr_greets_in_french() {
59 let output = run(&["--lang", "fr", "Luc"]);
60 assert!(output.status.success());
61 assert_eq!(
62 String::from_utf8(output.stdout).unwrap(),
63 "Bonjour, Luc !\n"
64 );
65}
66
67#[test]
68fn lang_en_is_the_default() {
69 let output = run(&["--lang", "en", "Ada"]);
70 assert!(output.status.success());
71 assert_eq!(String::from_utf8(output.stdout).unwrap(), "Hi, Ada!\n");
72 let output = run(&["Ada"]);
73 assert_eq!(String::from_utf8(output.stdout).unwrap(), "Hi, Ada!\n");
74}
75
76#[test]
77fn lang_unknown_fails_naming_supported_languages() {
78 let output = run(&["--lang", "de", "Ada"]);
79 assert_eq!(output.status.code(), Some(2));
80 let stderr = String::from_utf8(output.stderr).unwrap();
81 assert!(stderr.contains("en, es, fr"), "stderr was {stderr:?}");
82}
83
84#[test]
85fn lang_missing_value_fails() {
86 let output = run(&["--lang"]);
87 assert_eq!(output.status.code(), Some(2));
88 let stderr = String::from_utf8(output.stderr).unwrap();
89 assert!(
90 stderr.contains("--lang requires a value"),
91 "stderr was {stderr:?}"
92 );
93}
94
95#[test]
96fn quiet_prints_nothing() {
97 let output = run(&["--quiet", "Ada"]);
98 assert!(output.status.success());
99 assert!(output.stdout.is_empty());
100}
101
102#[test]
103fn loud_ends_with_three_exclamation_marks() {
104 let output = run(&["--loud", "Ada"]);
105 assert!(output.status.success());
106 assert_eq!(String::from_utf8(output.stdout).unwrap(), "Hi, Ada!!!\n");
107}
108
109#[test]
110fn short_l_is_an_alias_for_loud() {
111 let output = run(&["-L", "Ada"]);
112 assert!(output.status.success());
113 assert_eq!(String::from_utf8(output.stdout).unwrap(), "Hi, Ada!!!\n");
114}