From 08e68b06fd01dca612872fa73f7fb1fa27c573d7 Mon Sep 17 00:00:00 2001 From: Suprun Date: Wed, 5 Nov 2025 23:34:10 +0400 Subject: [PATCH 1/2] tests/printenv: add more tests --- tests/by-util/test_printenv.rs | 60 +++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/tests/by-util/test_printenv.rs b/tests/by-util/test_printenv.rs index 0bfc71f07e0..b14fb20327a 100644 --- a/tests/by-util/test_printenv.rs +++ b/tests/by-util/test_printenv.rs @@ -18,9 +18,11 @@ fn test_get_all() { fn test_get_var() { new_ucmd!() .env("KEY", "VALUE") + .env("FOO", "BAR") .arg("KEY") .succeeds() - .stdout_contains("VALUE\n"); + .stdout_contains("VALUE\n") + .stdout_does_not_contain("BAR"); } #[test] @@ -29,6 +31,30 @@ fn test_ignore_equal_var() { new_ucmd!().env("a=b", "c").arg("a=b").fails().no_stdout(); } +#[test] +fn test_silent_error_equal_var() { + // printenv should ignore variables with equal signs e.g. a=b=c + new_ucmd!() + .env("KEY", "VALUE") + .env("a=b", "c") + .arg("KEY") + .arg("a=b") + .fails_with_code(1) + .stdout_contains("VALUE\n") + .stdout_does_not_contain("c"); +} + +#[test] +fn test_silent_error_not_present() { + // printenv should ignore unspecified variables, not panic on them + new_ucmd!() + .env("KEY", "VALUE") + .arg("FOO") + .arg("KEY") + .fails_with_code(1) + .stdout_contains("VALUE\n"); +} + #[test] fn test_invalid_option_exit_code() { // printenv should return exit code 2 for invalid options @@ -40,3 +66,35 @@ fn test_invalid_option_exit_code() { .stderr_contains("unexpected argument") .stderr_contains("For more information, try '--help'"); } + +#[test] +fn test_null_separator() { + // printenv should use \x00 as separator + new_ucmd!() + .env("HOME", "FOO") + .env("KEY", "VALUE") + .arg("-0") + .succeeds() + .stdout_contains("HOME=FOO\x00") + .stdout_contains("KEY=VALUE\x00"); + + new_ucmd!() + .env("HOME", "FOO") + .env("KEY", "VALUE") + .arg("--null") + .succeeds() + .stdout_contains("HOME=FOO\x00") + .stdout_contains("KEY=VALUE\x00"); + + new_ucmd!() + .env("HOME", "FOO") + .env("KEY", "VALUE") + .env("FOO", "BAR") + .arg("-0") + .arg("HOME") + .arg("KEY") + .succeeds() + .stdout_contains("FOO\x00") + .stdout_contains("VALUE\x00") + .stdout_does_not_contain("BAR"); +} From 5a68acc02c931d52bc1361cbab706ade3dde4205 Mon Sep 17 00:00:00 2001 From: Suprun Date: Thu, 6 Nov 2025 12:30:18 +0400 Subject: [PATCH 2/2] tests/printenv: use clearer checks in tests --- tests/by-util/test_printenv.rs | 56 +++++++++++++++------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/tests/by-util/test_printenv.rs b/tests/by-util/test_printenv.rs index b14fb20327a..4c1b436bc04 100644 --- a/tests/by-util/test_printenv.rs +++ b/tests/by-util/test_printenv.rs @@ -21,8 +21,7 @@ fn test_get_var() { .env("FOO", "BAR") .arg("KEY") .succeeds() - .stdout_contains("VALUE\n") - .stdout_does_not_contain("BAR"); + .stdout_is("VALUE\n"); } #[test] @@ -40,8 +39,8 @@ fn test_silent_error_equal_var() { .arg("KEY") .arg("a=b") .fails_with_code(1) - .stdout_contains("VALUE\n") - .stdout_does_not_contain("c"); + .stdout_is("VALUE\n") + .no_stderr(); } #[test] @@ -52,7 +51,8 @@ fn test_silent_error_not_present() { .arg("FOO") .arg("KEY") .fails_with_code(1) - .stdout_contains("VALUE\n"); + .stdout_is("VALUE\n") + .no_stderr(); } #[test] @@ -69,32 +69,24 @@ fn test_invalid_option_exit_code() { #[test] fn test_null_separator() { - // printenv should use \x00 as separator - new_ucmd!() - .env("HOME", "FOO") - .env("KEY", "VALUE") - .arg("-0") - .succeeds() - .stdout_contains("HOME=FOO\x00") - .stdout_contains("KEY=VALUE\x00"); + // printenv should use \x00 as separator if null option is provided + for null_opt in ["-0", "--null"] { + new_ucmd!() + .env("HOME", "FOO") + .env("KEY", "VALUE") + .arg(null_opt) + .succeeds() + .stdout_contains("HOME=FOO\x00") + .stdout_contains("KEY=VALUE\x00"); - new_ucmd!() - .env("HOME", "FOO") - .env("KEY", "VALUE") - .arg("--null") - .succeeds() - .stdout_contains("HOME=FOO\x00") - .stdout_contains("KEY=VALUE\x00"); - - new_ucmd!() - .env("HOME", "FOO") - .env("KEY", "VALUE") - .env("FOO", "BAR") - .arg("-0") - .arg("HOME") - .arg("KEY") - .succeeds() - .stdout_contains("FOO\x00") - .stdout_contains("VALUE\x00") - .stdout_does_not_contain("BAR"); + new_ucmd!() + .env("HOME", "FOO") + .env("KEY", "VALUE") + .env("FOO", "BAR") + .arg(null_opt) + .arg("HOME") + .arg("KEY") + .succeeds() + .stdout_is("FOO\x00VALUE\x00"); + } }