@@ -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