also support for tests/touch/relative.sh

This commit is contained in:
Sylvestre Ledru 2022-05-08 21:52:12 +02:00
parent d5569847bd
commit f65d72e334
2 changed files with 27 additions and 0 deletions

View file

@ -312,6 +312,13 @@ const YYMMDDHHMM_FORMAT: &[time::format_description::FormatItem] = format_descri
[hour repr:24 padding:zero][minute padding:zero]" [hour repr:24 padding:zero][minute padding:zero]"
); );
// "%Y-%m-%d %H:%M +offset"
// Used for example in tests/touch/relative.sh
const YYYYMMDDHHMM_OFFSET_FORMAT: &[time::format_description::FormatItem] = format_description!(
"[year]-[month]-[day] [hour repr:24]:[minute] \
[offset_hour sign:mandatory][offset_minute]"
);
fn parse_date(s: &str) -> UResult<FileTime> { fn parse_date(s: &str) -> UResult<FileTime> {
// This isn't actually compatible with GNU touch, but there doesn't seem to // This isn't actually compatible with GNU touch, but there doesn't seem to
// be any simple specification for what format this parameter allows and I'm // be any simple specification for what format this parameter allows and I'm
@ -338,6 +345,7 @@ fn parse_date(s: &str) -> UResult<FileTime> {
YYYYMMDDHHMMS_FORMAT, YYYYMMDDHHMMS_FORMAT,
YYYYMMDDHHMMSS_FORMAT, YYYYMMDDHHMMSS_FORMAT,
YYYY_MM_DD_HH_MM_FORMAT, YYYY_MM_DD_HH_MM_FORMAT,
YYYYMMDDHHMM_OFFSET_FORMAT,
] { ] {
if let Ok(parsed) = time::PrimitiveDateTime::parse(s, &fmt) { if let Ok(parsed) = time::PrimitiveDateTime::parse(s, &fmt) {
return Ok(dt_to_filename(parsed)); return Ok(dt_to_filename(parsed));

View file

@ -488,6 +488,25 @@ fn test_touch_set_date6() {
assert_eq!(mtime, expected); assert_eq!(mtime, expected);
} }
#[test]
fn test_touch_set_date7() {
let (at, mut ucmd) = at_and_ucmd!();
let file = "test_touch_set_date";
ucmd.args(&["-d", "2004-01-16 12:00 +0000", file])
.succeeds()
.no_stderr();
assert!(at.file_exists(file));
let expected = FileTime::from_unix_time(1074254400, 0);
let (atime, mtime) = get_file_times(&at, file);
assert_eq!(atime, mtime);
assert_eq!(atime, expected);
assert_eq!(mtime, expected);
}
#[test] #[test]
fn test_touch_set_date_wrong_format() { fn test_touch_set_date_wrong_format() {
let (_at, mut ucmd) = at_and_ucmd!(); let (_at, mut ucmd) = at_and_ucmd!();