mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-27 19:17:43 +00:00
test/ls: add test for locale-aware quoting
This commit is contained in:
parent
f17940b4e5
commit
3fe7f94396
1 changed files with 65 additions and 0 deletions
|
@ -2690,6 +2690,71 @@ mod quoting {
|
|||
&[],
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_vendor = "apple", target_os = "windows", target_os = "openbsd")))]
|
||||
#[test]
|
||||
/// This test creates files with an UTF-8 encoded name and verify that it
|
||||
/// gets escaped depending on the used locale.
|
||||
fn test_locale_aware_quoting() {
|
||||
let cases: &[(&[u8], _, _, &[&str])] = &[
|
||||
(
|
||||
"😁".as_bytes(), // == b"\xF0\x9F\x98\x81"
|
||||
"''$'\\360\\237\\230\\201'\n", // ASCII sees 4 bytes
|
||||
"😁\n", // UTF-8 sees an emoji
|
||||
&["--quoting-style=shell-escape"],
|
||||
),
|
||||
(
|
||||
"€".as_bytes(), // == b"\xE2\x82\xAC"
|
||||
"''$'\\342\\202\\254'\n", // ASCII sees 3 bytes
|
||||
"€\n", // UTF-8 still only 2
|
||||
&["--quoting-style=shell-escape"],
|
||||
),
|
||||
(
|
||||
b"\xC2\x80\xC2\x81", // 2 first Unicode control characters
|
||||
"????\n", // ASCII sees 4 bytes
|
||||
"??\n", // UTF-8 sees only 2
|
||||
&["--quoting-style=literal", "--hide-control-char"],
|
||||
),
|
||||
(
|
||||
b"\xC2\xC2\x81",
|
||||
"???\n", // ASCII sees 3 bytes
|
||||
"??\n", // UTF-8 still only 2
|
||||
&["--quoting-style=literal", "--hide-control-char"],
|
||||
),
|
||||
(
|
||||
b"\xC2\x81\xC2",
|
||||
"???\n", // ASCII sees 3 bytes
|
||||
"??\n", // UTF-8 still only 2
|
||||
&["--quoting-style=literal", "--hide-control-char"],
|
||||
),
|
||||
];
|
||||
|
||||
for (filename, ascii_ref, utf_8_ref, args) in cases {
|
||||
let scene = TestScenario::new(util_name!());
|
||||
let at = &scene.fixtures;
|
||||
|
||||
let filename = uucore::os_str_from_bytes(filename)
|
||||
.expect("Filename is valid Unicode supported on Linux");
|
||||
|
||||
at.touch(filename);
|
||||
|
||||
// When the locale does not handle UTF-8 encoding, escaping is done.
|
||||
scene
|
||||
.ucmd()
|
||||
.env("LC_ALL", "C") // Non UTF-8 locale
|
||||
.args(args)
|
||||
.succeeds()
|
||||
.stdout_only(ascii_ref);
|
||||
|
||||
// When the locale has UTF-8 support, the symbol is shown as-is.
|
||||
scene
|
||||
.ucmd()
|
||||
.env("LC_ALL", "en_US.UTF-8") // UTF-8 locale
|
||||
.args(args)
|
||||
.succeeds()
|
||||
.stdout_only(utf_8_ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue