File: snap-example-fixture.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (61 lines) | stat: -rw-r--r-- 1,508 bytes parent folder | download | duplicates (6)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//! For `snapbox`s tests only

use std::env;
use std::error::Error;
use std::io;
use std::io::Write;
use std::process;

fn run() -> Result<(), Box<dyn Error>> {
    if let Ok(text) = env::var("stdout") {
        println!("{text}");
    }
    if let Ok(text) = env::var("stderr") {
        eprintln!("{text}");
    }

    if env::var("echo_large").as_deref() == Ok("1") {
        for i in 0..(128 * 1024) {
            println!("{i}");
        }
    }

    if env::var("echo_cwd").as_deref() == Ok("1") {
        if let Ok(cwd) = env::current_dir() {
            eprintln!("{}", cwd.display());
        }
    }

    if let Ok(raw) = env::var("write") {
        let (path, text) = raw.split_once('=').unwrap_or((raw.as_str(), ""));
        std::fs::write(path.trim(), text.trim()).unwrap();
    }

    if let Ok(path) = env::var("cat") {
        let text = std::fs::read_to_string(path).unwrap();
        eprintln!("{text}");
    }

    if let Some(timeout) = env::var("sleep").ok().and_then(|s| s.parse().ok()) {
        std::thread::sleep(std::time::Duration::from_secs(timeout));
    }

    let code = env::var("exit")
        .ok()
        .map(|v| v.parse::<i32>())
        .map(|r| r.map(Some))
        .unwrap_or(Ok(None))?
        .unwrap_or(0);
    process::exit(code);
}

fn main() {
    let code = match run() {
        Ok(_) => 0,
        Err(ref e) => {
            write!(&mut io::stderr(), "{e}").expect("writing to stderr won't fail");
            1
        }
    };
    process::exit(code);
}