diff --git a/src/uu/date/src/date.rs b/src/uu/date/src/date.rs index 455e72d6e09..e3b4f70f561 100644 --- a/src/uu/date/src/date.rs +++ b/src/uu/date/src/date.rs @@ -27,6 +27,7 @@ use uucore::error::{UError, UResult, USimpleError, strip_errno}; #[cfg(feature = "i18n-datetime")] use uucore::i18n::datetime::{localize_format_string, should_use_icu_locale}; use uucore::translate; +use uucore::translate_text; use uucore::{format_usage, show}; #[cfg(windows)] use windows_sys::Win32::{Foundation::SYSTEMTIME, System::SystemInformation::SetSystemTime}; @@ -91,9 +92,9 @@ enum DateError { Write(std::io::Error), #[error("{}", translate!("date-error-extra-operand", "operand" => .operand))] ExtraOperand { operand: String }, - #[error("{}", translate!("date-error-invalid-date", "date" => .date))] + #[error("{}", translate_text!("date-error-invalid-date", "date" => .date))] InvalidDate { date: String }, - #[error("{}", translate!("date-error-format-missing-plus", "arg" => .arg))] + #[error("{}", translate_text!("date-error-format-missing-plus", "arg" => .arg))] FormatMissingPlus { arg: String }, #[error("{}", translate!("date-error-expected-file-got-directory", "path" => .path))] ExpectedFileGotDirectory { path: String }, diff --git a/tests/by-util/test_date.rs b/tests/by-util/test_date.rs index 7f9e2c4eceb..3e9e9b7da59 100644 --- a/tests/by-util/test_date.rs +++ b/tests/by-util/test_date.rs @@ -530,6 +530,24 @@ fn test_date_set_invalid() { assert!(result.stderr_str().starts_with("date: invalid date ")); } +#[test] +fn test_date_error_echoes_input_verbatim() { + // Error messages echo what the user typed: numeric-looking input must + // not be reformatted as a Fluent number (#14669, #14670). + for input in ["1e9", "+1e-2", "+9.e-0", "9.", "-0"] { + new_ucmd!() + .arg("-d") + .arg(input) + .fails() + .stderr_is(format!("date: invalid date '{input}'\n")); + } + // Same for the missing '+' message, which echoes the argument too. + new_ucmd!() + .args(&["--date", "1996-01-31", "1e9"]) + .fails_with_code(1) + .stderr_contains("the argument 1e9 lacks a leading '+'"); +} + #[test] #[cfg(all(unix, not(any(target_vendor = "apple", target_os = "android"))))] fn test_date_set_permissions_error() {