@@ -67,20 +67,41 @@ mod tests {
67
67
use super :: * ;
68
68
use std:: time:: Duration ;
69
69
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
+ }
73
93
}
74
94
75
95
#[ test]
76
96
fn is_time_filter_applicable ( ) {
77
97
let local_tz = TimeZone :: system ( ) ;
78
- let ref_time = set_test_time (
98
+ let mut test_time = TestTime :: new (
79
99
local_tz
80
100
. to_ambiguous_zoned ( "2010-10-10 10:10:10" . parse :: < DateTime > ( ) . unwrap ( ) )
81
101
. later ( )
82
102
. unwrap ( ) ,
83
103
) ;
104
+ let mut ref_time = test_time. timestamp ( ) ;
84
105
85
106
assert ! ( TimeFilter :: after( "1min" ) . unwrap( ) . applies_to( & ref_time) ) ;
86
107
assert ! ( !TimeFilter :: before( "1min" ) . unwrap( ) . applies_to( & ref_time) ) ;
@@ -112,12 +133,13 @@ mod tests {
112
133
assert ! ( TimeFilter :: after( same_day) . unwrap( ) . applies_to( & ref_time) ) ;
113
134
assert ! ( TimeFilter :: after( same_day) . unwrap( ) . applies_to( & t1m_ago) ) ;
114
135
115
- let ref_time = set_test_time (
136
+ test_time . set (
116
137
"2010-10-10T10:10:10+00:00"
117
138
. parse :: < Timestamp > ( )
118
139
. unwrap ( )
119
140
. to_zoned ( local_tz. clone ( ) ) ,
120
141
) ;
142
+ ref_time = test_time. timestamp ( ) ;
121
143
let t1m_ago = ref_time - Duration :: from_secs ( 60 ) ;
122
144
let t10s_before = "2010-10-10T10:10:00+00:00" ;
123
145
assert ! ( !TimeFilter :: before( t10s_before)
@@ -133,12 +155,13 @@ mod tests {
133
155
assert ! ( !TimeFilter :: after( t10s_before) . unwrap( ) . applies_to( & t1m_ago) ) ;
134
156
135
157
let ref_timestamp = 1707723412u64 ; // Mon Feb 12 07:36:52 UTC 2024
136
- let ref_time = set_test_time (
158
+ test_time . set (
137
159
"2024-02-12T07:36:52+00:00"
138
160
. parse :: < Timestamp > ( )
139
161
. unwrap ( )
140
162
. to_zoned ( local_tz) ,
141
163
) ;
164
+ ref_time = test_time. timestamp ( ) ;
142
165
let t1m_ago = ref_time - Duration :: from_secs ( 60 ) ;
143
166
let t1s_later = ref_time + Duration :: from_secs ( 1 ) ;
144
167
// Timestamp only supported via '@' prefix
@@ -155,8 +178,5 @@ mod tests {
155
178
assert ! ( TimeFilter :: after( & format!( "@{ref_timestamp}" ) )
156
179
. unwrap( )
157
180
. applies_to( & t1s_later) ) ;
158
-
159
- // Stop using manually set times
160
- TESTTIME . with_borrow_mut ( |t| * t = None ) ;
161
181
}
162
182
}
0 commit comments