You've already forked parse_datetime
mirror of
https://github.com/uutils/parse_datetime.git
synced 2026-06-10 16:13:15 -07:00
Remove Item::Timestamp enum variant
The Timestamp variant was #[cfg(test)]-gated dead code outside tests. The parse_timestamp function already calls set_timestamp on the builder directly, bypassing the TryFrom<Vec<Item>> path. Remove the variant and refactor builder tests to exercise set_timestamp directly instead.
This commit is contained in:
+47
-21
@@ -520,8 +520,6 @@ impl TryFrom<Vec<Item>> for DateTimeBuilder {
|
|||||||
|
|
||||||
for item in items {
|
for item in items {
|
||||||
builder = match item {
|
builder = match item {
|
||||||
#[cfg(test)]
|
|
||||||
Item::Timestamp(ts) => builder.set_timestamp(ts)?,
|
|
||||||
Item::DateTime(dt) => builder.set_date(dt.date)?.set_time(dt.time)?,
|
Item::DateTime(dt) => builder.set_date(dt.date)?.set_time(dt.time)?,
|
||||||
Item::Date(d) => builder.set_date(d)?,
|
Item::Date(d) => builder.set_date(d)?,
|
||||||
Item::Time(t) => builder.set_time(t)?,
|
Item::Time(t) => builder.set_time(t)?,
|
||||||
@@ -646,10 +644,6 @@ mod tests {
|
|||||||
vec![Item::TimeZone(timezone()), Item::TimeZone(timezone())],
|
vec![Item::TimeZone(timezone()), Item::TimeZone(timezone())],
|
||||||
"timezone rule cannot appear more than once",
|
"timezone rule cannot appear more than once",
|
||||||
),
|
),
|
||||||
(
|
|
||||||
vec![Item::Timestamp(timestamp()), Item::Timestamp(timestamp())],
|
|
||||||
"timestamp cannot appear more than once",
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
vec![Item::Date(date()), Item::Date(date())],
|
vec![Item::Date(date()), Item::Date(date())],
|
||||||
"date cannot appear more than once",
|
"date cannot appear more than once",
|
||||||
@@ -674,29 +668,61 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn duplicate_timestamp_error() {
|
||||||
|
let builder = DateTimeBuilder::new().set_timestamp(timestamp()).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
builder.set_timestamp(timestamp()).unwrap_err(),
|
||||||
|
"timestamp cannot appear more than once"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn timestamp_cannot_be_combined_with_other_items() {
|
fn timestamp_cannot_be_combined_with_other_items() {
|
||||||
let test_cases = vec![
|
// Setting a timestamp after other items have been set.
|
||||||
vec![Item::Date(date()), Item::Timestamp(timestamp())],
|
let builders_with_items: Vec<DateTimeBuilder> = vec![
|
||||||
vec![Item::Time(time()), Item::Timestamp(timestamp())],
|
DateTimeBuilder::new().set_date(date()).unwrap(),
|
||||||
vec![Item::Weekday(weekday()), Item::Timestamp(timestamp())],
|
DateTimeBuilder::new().set_time(time()).unwrap(),
|
||||||
vec![Item::Offset(offset()), Item::Timestamp(timestamp())],
|
DateTimeBuilder::new().set_weekday(weekday()).unwrap(),
|
||||||
vec![Item::Relative(relative_day()), Item::Timestamp(timestamp())],
|
DateTimeBuilder::new().set_offset(offset()).unwrap(),
|
||||||
vec![Item::Timestamp(timestamp()), Item::Date(date())],
|
DateTimeBuilder::new()
|
||||||
vec![Item::Timestamp(timestamp()), Item::Time(time())],
|
.push_relative(relative_day())
|
||||||
vec![Item::Timestamp(timestamp()), Item::Weekday(weekday())],
|
.unwrap(),
|
||||||
vec![Item::Timestamp(timestamp()), Item::Relative(relative_day())],
|
|
||||||
vec![Item::Timestamp(timestamp()), Item::Offset(offset())],
|
|
||||||
vec![Item::Timestamp(timestamp()), Item::Pure("2023".to_string())],
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for items in test_cases {
|
for builder in builders_with_items {
|
||||||
let result = DateTimeBuilder::try_from(items);
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.unwrap_err(),
|
builder.set_timestamp(timestamp()).unwrap_err(),
|
||||||
"timestamp cannot be combined with other date/time items"
|
"timestamp cannot be combined with other date/time items"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setting other items after a timestamp has been set.
|
||||||
|
let ts_builder = || DateTimeBuilder::new().set_timestamp(timestamp()).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().set_date(date()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().set_time(time()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().set_weekday(weekday()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().push_relative(relative_day()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().set_offset(offset()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
ts_builder().set_pure("2023".to_string()).unwrap_err(),
|
||||||
|
"timestamp cannot be combined with other date/time items"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -63,8 +63,6 @@ use error::Error;
|
|||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
enum Item {
|
enum Item {
|
||||||
#[cfg(test)]
|
|
||||||
Timestamp(epoch::Timestamp),
|
|
||||||
DateTime(combined::DateTime),
|
DateTime(combined::DateTime),
|
||||||
Date(date::Date),
|
Date(date::Date),
|
||||||
Time(time::Time),
|
Time(time::Time),
|
||||||
|
|||||||
Reference in New Issue
Block a user