@@ -115,3 +115,124 @@ def test_add_to_fixed_timezones(self):
115
115
self .assertPendulum (dt , 2015 , 3 , 15 , 1 , 0 , 0 )
116
116
self .assertEqual ('-06:00' , dt .timezone_name )
117
117
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