mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2026-01-16 02:01:05 +00:00
.# Discussion This commit adds support for a '-f'/'--file' option which reads "KEY=VALUE" lines from a config (or ini) style text file and sets the corresponding environment key. This is modeled after the same option in the `dotenv` and `godotenv` commands. Notably, this commit does *not* add automatic loading of ".env" configuration files. The environment variables set by reading the configuration file are set prior to any unset (eg, `-u BAR`) or set (eg, `FOO=bar`) actions. Files are loaded in order with later files overwriting any overlapping environment variables, then, unset actions (in command line order) are executed, then, finally, set actions (in command line order) are executed. [1] [`dotenv`](https://github.com/bkeepers/dotenv) [2] [`godotenv`](https://github.com/joho/godotenv)
136 lines
3.3 KiB
Rust
136 lines
3.3 KiB
Rust
use common::util::*;
|
|
|
|
#[test]
|
|
fn test_env_help() {
|
|
assert!(new_ucmd!().arg("--help").succeeds().no_stderr().stdout.contains("Options:"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_env_version() {
|
|
assert!(new_ucmd!().arg("--version").succeeds().no_stderr().stdout.contains(util_name!()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_echo() {
|
|
// assert!(new_ucmd!().arg("printf").arg("FOO-bar").succeeds().no_stderr().stdout.contains("FOO-bar"));
|
|
let mut cmd = new_ucmd!();
|
|
cmd.arg("echo").arg("FOO-bar");
|
|
println!("cmd={:?}", cmd);
|
|
|
|
let result = cmd.run();
|
|
println!("success={:?}", result.success);
|
|
println!("stdout={:?}", result.stdout);
|
|
println!("stderr={:?}", result.stderr);
|
|
assert!(result.success);
|
|
|
|
let out = result.stdout.trim_right();
|
|
|
|
assert_eq!(out, "FOO-bar");
|
|
}
|
|
|
|
#[test]
|
|
fn test_file_option() {
|
|
let out = new_ucmd!()
|
|
.arg("-f").arg("vars.conf.txt")
|
|
.run().stdout;
|
|
|
|
assert_eq!(out.lines().filter(|&line| line == "FOO=bar" || line == "BAR=bamf this").count(), 2);
|
|
}
|
|
|
|
#[test]
|
|
fn test_combined_file_set() {
|
|
let out = new_ucmd!()
|
|
.arg("-f").arg("vars.conf.txt")
|
|
.arg("FOO=bar.alt")
|
|
.run().stdout;
|
|
|
|
assert_eq!(out.lines().filter(|&line| line == "FOO=bar.alt").count(), 1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_combined_file_set_unset() {
|
|
let out = new_ucmd!()
|
|
.arg("-u").arg("BAR")
|
|
.arg("-f").arg("vars.conf.txt")
|
|
.arg("FOO=bar.alt")
|
|
.run().stdout;
|
|
|
|
assert_eq!(out.lines().filter(|&line| line == "FOO=bar.alt" || line.starts_with("BAR=")).count(), 1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_single_name_value_pair() {
|
|
let out = new_ucmd!()
|
|
.arg("FOO=bar").run().stdout;
|
|
|
|
assert!(out.lines().any(|line| line == "FOO=bar"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_multiple_name_value_pairs() {
|
|
let out = new_ucmd!()
|
|
.arg("FOO=bar")
|
|
.arg("ABC=xyz")
|
|
.run()
|
|
.stdout;
|
|
|
|
assert_eq!(out.lines().filter(|&line| line == "FOO=bar" || line == "ABC=xyz").count(),
|
|
2);
|
|
}
|
|
|
|
#[test]
|
|
fn test_ignore_environment() {
|
|
let scene = TestScenario::new(util_name!());
|
|
|
|
let out = scene.ucmd()
|
|
.arg("-i")
|
|
.run()
|
|
.stdout;
|
|
|
|
assert_eq!(out, "");
|
|
|
|
let out = scene.ucmd()
|
|
.arg("-")
|
|
.run()
|
|
.stdout;
|
|
|
|
assert_eq!(out, "");
|
|
}
|
|
|
|
#[test]
|
|
fn test_null_delimiter() {
|
|
let out = new_ucmd!()
|
|
.arg("-i")
|
|
.arg("--null")
|
|
.arg("FOO=bar")
|
|
.arg("ABC=xyz")
|
|
.run()
|
|
.stdout;
|
|
|
|
let mut vars : Vec<_> = out.split('\0').collect();
|
|
assert_eq!(vars.len(), 3);
|
|
vars.sort();
|
|
assert_eq!(vars[0], "");
|
|
assert_eq!(vars[1], "ABC=xyz");
|
|
assert_eq!(vars[2], "FOO=bar");
|
|
}
|
|
|
|
#[test]
|
|
fn test_unset_variable() {
|
|
// This test depends on the HOME variable being pre-defined by the
|
|
// default shell
|
|
let out = TestScenario::new(util_name!())
|
|
.ucmd_keepenv()
|
|
.arg("-u")
|
|
.arg("HOME")
|
|
.run()
|
|
.stdout;
|
|
|
|
assert_eq!(out.lines().any(|line| line.starts_with("HOME=")), false);
|
|
}
|
|
|
|
#[test]
|
|
fn test_fail_null_with_program() {
|
|
let out = new_ucmd!().arg("--null").arg("cd").fails().stderr;
|
|
assert!(out.contains("cannot specify --null (-0) with command"));
|
|
}
|