@@ -115,3 +115,124 @@ def test_add_to_fixed_timezones(self):
115115 self .assertPendulum (dt , 2015 , 3 , 15 , 1 , 0 , 0 )
116116 self .assertEqual ('-06:00' , dt .timezone_name )
117117 self .assertEqual (- 6 * 3600 , dt .offset )
118+
119+ def test_add_time_to_new_transition_skipped (self ):
120+ dt = pendulum .create (2013 , 3 , 31 , 1 , 59 , 59 , 999999 , 'Europe/Paris' )
121+
122+ self .assertPendulum (dt , 2013 , 3 , 31 , 1 , 59 , 59 , 999999 )
123+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
124+ self .assertEqual (3600 , dt .offset )
125+ self .assertFalse (dt .is_dst )
126+
127+ dt = dt .add (microseconds = 1 )
128+
129+ self .assertPendulum (dt , 2013 , 3 , 31 , 3 , 0 , 0 , 0 )
130+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
131+ self .assertEqual (7200 , dt .offset )
132+ self .assertTrue (dt .is_dst )
133+
134+ dt = pendulum .create (2013 , 3 , 10 , 1 , 59 , 59 , 999999 , 'America/New_York' )
135+
136+ self .assertPendulum (dt , 2013 , 3 , 10 , 1 , 59 , 59 , 999999 )
137+ self .assertEqual ('America/New_York' , dt .timezone_name )
138+ self .assertEqual (- 5 * 3600 , dt .offset )
139+ self .assertFalse (dt .is_dst )
140+
141+ dt = dt .add (microseconds = 1 )
142+
143+ self .assertPendulum (dt , 2013 , 3 , 10 , 3 , 0 , 0 , 0 )
144+ self .assertEqual ('America/New_York' , dt .timezone_name )
145+ self .assertEqual (- 4 * 3600 , dt .offset )
146+ self .assertTrue (dt .is_dst )
147+
148+ dt = pendulum .create (1957 , 4 , 28 , 1 , 59 , 59 , 999999 , 'America/New_York' )
149+
150+ self .assertPendulum (dt , 1957 , 4 , 28 , 1 , 59 , 59 , 999999 )
151+ self .assertEqual ('America/New_York' , dt .timezone_name )
152+ self .assertEqual (- 5 * 3600 , dt .offset )
153+ self .assertFalse (dt .is_dst )
154+
155+ dt = dt .add (microseconds = 1 )
156+
157+ self .assertPendulum (dt , 1957 , 4 , 28 , 3 , 0 , 0 , 0 )
158+ self .assertEqual ('America/New_York' , dt .timezone_name )
159+ self .assertEqual (- 4 * 3600 , dt .offset )
160+ self .assertTrue (dt .is_dst )
161+
162+ def test_add_time_to_new_transition_skipped_big (self ):
163+ dt = pendulum .create (2013 , 3 , 31 , 1 , tz = 'Europe/Paris' )
164+
165+ self .assertPendulum (dt , 2013 , 3 , 31 , 1 , 0 , 0 , 0 )
166+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
167+ self .assertEqual (3600 , dt .offset )
168+ self .assertFalse (dt .is_dst )
169+
170+ dt = dt .add (weeks = 1 )
171+
172+ self .assertPendulum (dt , 2013 , 4 , 7 , 1 , 0 , 0 , 0 )
173+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
174+ self .assertEqual (7200 , dt .offset )
175+ self .assertTrue (dt .is_dst )
176+
177+ def test_add_time_to_new_transition_repeated (self ):
178+ dt = pendulum .create (2013 , 10 , 27 , 1 , 59 , 59 , 999999 , 'Europe/Paris' )
179+ dt = dt .add (hours = 1 )
180+
181+ self .assertPendulum (dt , 2013 , 10 , 27 , 2 , 59 , 59 , 999999 )
182+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
183+ self .assertEqual (7200 , dt .offset )
184+ self .assertTrue (dt .is_dst )
185+
186+ dt = dt .add (microseconds = 1 )
187+
188+ self .assertPendulum (dt , 2013 , 10 , 27 , 2 , 0 , 0 , 0 )
189+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
190+ self .assertEqual (3600 , dt .offset )
191+ self .assertFalse (dt .is_dst )
192+
193+
194+ dt = pendulum .create (2013 , 11 , 3 , 0 , 59 , 59 , 999999 , 'America/New_York' )
195+ dt = dt .add (hours = 1 )
196+
197+ self .assertPendulum (dt , 2013 , 11 , 3 , 1 , 59 , 59 , 999999 )
198+ self .assertEqual ('America/New_York' , dt .timezone_name )
199+ self .assertEqual (- 4 * 3600 , dt .offset )
200+ self .assertTrue (dt .is_dst )
201+
202+ dt = dt .add (microseconds = 1 )
203+
204+ self .assertPendulum (dt , 2013 , 11 , 3 , 1 , 0 , 0 , 0 )
205+ self .assertEqual ('America/New_York' , dt .timezone_name )
206+ self .assertEqual (- 5 * 3600 , dt .offset )
207+ self .assertFalse (dt .is_dst )
208+
209+ def test_add_time_to_new_transition_repeated_big (self ):
210+ dt = pendulum .create (2013 , 10 , 27 , 1 , tz = 'Europe/Paris' )
211+
212+ self .assertPendulum (dt , 2013 , 10 , 27 , 1 , 0 , 0 , 0 )
213+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
214+ self .assertEqual (7200 , dt .offset )
215+ self .assertTrue (dt .is_dst )
216+
217+ dt = dt .add (weeks = 1 )
218+
219+ self .assertPendulum (dt , 2013 , 11 , 3 , 1 , 0 , 0 , 0 )
220+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
221+ self .assertEqual (3600 , dt .offset )
222+ self .assertFalse (dt .is_dst )
223+
224+ def test_add_time_to_new_transition_does_not_use_transition_rule (self ):
225+ pendulum .set_transition_rule (pendulum .TRANSITION_ERROR )
226+ dt = pendulum .create (2013 , 3 , 31 , 1 , 59 , 59 , 999999 , 'Europe/Paris' )
227+
228+ self .assertPendulum (dt , 2013 , 3 , 31 , 1 , 59 , 59 , 999999 )
229+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
230+ self .assertEqual (3600 , dt .offset )
231+ self .assertFalse (dt .is_dst )
232+
233+ dt = dt .add (microseconds = 1 )
234+
235+ self .assertPendulum (dt , 2013 , 3 , 31 , 3 , 0 , 0 , 0 )
236+ self .assertEqual ('Europe/Paris' , dt .timezone_name )
237+ self .assertEqual (7200 , dt .offset )
238+ self .assertTrue (dt .is_dst )
0 commit comments