Skip to content

Commit f370301

Browse files
committed
Use guard to ensure cleanup of test time
1 parent f36c7d0 commit f370301

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/filter/time.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,41 @@ mod tests {
6767
use super::*;
6868
use std::time::Duration;
6969

70-
fn set_test_time(time: Zoned) -> SystemTime {
71-
TESTTIME.with_borrow_mut(|t| *t = Some(time.clone()));
72-
time.into()
70+
struct TestTime(SystemTime);
71+
72+
impl TestTime {
73+
fn new(time: Zoned) -> Self {
74+
TESTTIME.with_borrow_mut(|t| *t = Some(time.clone()));
75+
TestTime(time.into())
76+
}
77+
78+
fn set(&mut self, time: Zoned) {
79+
TESTTIME.with_borrow_mut(|t| *t = Some(time.clone()));
80+
self.0 = time.into();
81+
}
82+
83+
fn timestamp(&self) -> SystemTime {
84+
self.0
85+
}
86+
}
87+
88+
impl Drop for TestTime {
89+
fn drop(&mut self) {
90+
// Stop using manually set times
91+
TESTTIME.with_borrow_mut(|t| *t = None);
92+
}
7393
}
7494

7595
#[test]
7696
fn is_time_filter_applicable() {
7797
let local_tz = TimeZone::system();
78-
let ref_time = set_test_time(
98+
let mut test_time = TestTime::new(
7999
local_tz
80100
.to_ambiguous_zoned("2010-10-10 10:10:10".parse::<DateTime>().unwrap())
81101
.later()
82102
.unwrap(),
83103
);
104+
let mut ref_time = test_time.timestamp();
84105

85106
assert!(TimeFilter::after("1min").unwrap().applies_to(&ref_time));
86107
assert!(!TimeFilter::before("1min").unwrap().applies_to(&ref_time));
@@ -112,12 +133,13 @@ mod tests {
112133
assert!(TimeFilter::after(same_day).unwrap().applies_to(&ref_time));
113134
assert!(TimeFilter::after(same_day).unwrap().applies_to(&t1m_ago));
114135

115-
let ref_time = set_test_time(
136+
test_time.set(
116137
"2010-10-10T10:10:10+00:00"
117138
.parse::<Timestamp>()
118139
.unwrap()
119140
.to_zoned(local_tz.clone()),
120141
);
142+
ref_time = test_time.timestamp();
121143
let t1m_ago = ref_time - Duration::from_secs(60);
122144
let t10s_before = "2010-10-10T10:10:00+00:00";
123145
assert!(!TimeFilter::before(t10s_before)
@@ -133,12 +155,13 @@ mod tests {
133155
assert!(!TimeFilter::after(t10s_before).unwrap().applies_to(&t1m_ago));
134156

135157
let ref_timestamp = 1707723412u64; // Mon Feb 12 07:36:52 UTC 2024
136-
let ref_time = set_test_time(
158+
test_time.set(
137159
"2024-02-12T07:36:52+00:00"
138160
.parse::<Timestamp>()
139161
.unwrap()
140162
.to_zoned(local_tz),
141163
);
164+
ref_time = test_time.timestamp();
142165
let t1m_ago = ref_time - Duration::from_secs(60);
143166
let t1s_later = ref_time + Duration::from_secs(1);
144167
// Timestamp only supported via '@' prefix
@@ -155,8 +178,5 @@ mod tests {
155178
assert!(TimeFilter::after(&format!("@{ref_timestamp}"))
156179
.unwrap()
157180
.applies_to(&t1s_later));
158-
159-
// Stop using manually set times
160-
TESTTIME.with_borrow_mut(|t| *t = None);
161181
}
162182
}

0 commit comments

Comments
 (0)