Projet

Général

Profil

Paste
Télécharger (17,1 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / date / tests / date_api.test @ ee46a8ed

1
<?php
2

    
3
/**
4
 * @file
5
 * Test Date API functions
6
 */
7

    
8
class DateAPITestCase extends DrupalWebTestCase {
9
  /**
10
   * @todo.
11
   */
12
  public static function getInfo() {
13
    return array(
14
      'name' => t('Date API'),
15
      'description' => t('Test Date API functions.') ,
16
      'group' => t('Date'),
17
    );
18
  }
19

    
20
  /**
21
   * @todo.
22
   */
23
  public function setUp() {
24
    // Load the date_api module.
25
    parent::setUp('date_api');
26
    variable_set('date_api_use_iso8601', FALSE);
27
    variable_set('date_first_day', 1);
28
  }
29

    
30
  /**
31
   * @todo.
32
   */
33
  public function testDateAPI() {
34
    // Test date_format_date().
35
    $formatters = array(
36
      'a',
37
      'A',
38
      'B',
39
      'c',
40
      'd',
41
      'D',
42
      'e',
43
      'F',
44
      'g',
45
      'G',
46
      'h',
47
      'H',
48
      'i',
49
      'I',
50
      'j',
51
      'l',
52
      'L',
53
      'm',
54
      'M',
55
      'n',
56
      'N',
57
      'o',
58
      'O',
59
      'P',
60
      'r',
61
      'R',
62
      's',
63
      'S',
64
      't',
65
      'T',
66
      'u',
67
      'U',
68
      'w',
69
      'W',
70
      'y',
71
      'Y',
72
      'z',
73
      'Z',
74
    );
75
    foreach ($formatters as $formatter) {
76
      $date_api_format = date_format_date(date_now(), 'custom', $formatter);
77
      $php_format = date_format(date_now(), $formatter);
78
      $this->assertEqual($date_api_format, $php_format, 'Test that the "' . $formatter . '" formatter is formatted correctly by date_format_date()');
79
    }
80

    
81
    // Test the order of the weeks days for a calendar that starts on Monday and
82
    // one that starts on Sunday.
83
    variable_set('date_first_day', 1);
84
    $expected = array(0 => t('Mon'), 1 => t('Tue'), 2 => t('Wed'), 3 => t('Thu'), 4 => t('Fri'), 5 => t('Sat'), 6 => t('Sun'));
85
    $days = date_week_days_ordered(date_week_days_abbr(1));
86
    $this->assertEqual($expected, $days, 'Test that date_week_days_ordered() array starts on Monday when the site first day is on Monday.');
87
    variable_set('date_first_day', 0);
88
    $expected = array(0 => t('Sun'), 1 => t('Mon'), 2 => t('Tue'), 3 => t('Wed'), 4 => t('Thu'), 5 => t('Fri'), 6 => t('Sat'));
89
    $days = date_week_days_ordered(date_week_days_abbr(1));
90
    $this->assertEqual($expected, $days, 'Test that date_week_days_ordered() array starts on Sunday when the site first day is on Sunday.');
91

    
92
    // Test days in February for a leap year and a non-leap year.
93
    $expected = 28;
94
    $value = date_days_in_month(2005, 2);
95
    $this->assertEqual($expected, $value, "Test date_days_in_month(2, 2005): should be $expected, found $value.");
96
    $expected = 29;
97
    $value = date_days_in_month(2004, 2);
98
    $this->assertEqual($expected, $value, "Test date_days_in_month(2, 2004): should be $expected, found $value.");
99

    
100
    // Test days in year for a leap year and a non-leap year.
101
    $expected = 365;
102
    $value = date_days_in_year('2005-06-01 00:00:00');
103
    $this->assertEqual($expected, $value, "Test date_days_in_year(2005-06-01): should be $expected, found $value.");
104
    $expected = 366;
105
    $value = date_days_in_year('2004-06-01 00:00:00');
106
    $this->assertEqual($expected, $value, "Test date_days_in_year(2004-06-01): should be $expected, found $value.");
107

    
108
    // Test ISO weeks for a leap year and a non-leap year.
109
    $expected = 52;
110
    $value = date_iso_weeks_in_year('2008-06-01 00:00:00');
111
    $this->assertEqual($expected, $value, "Test date_iso_weeks_in_year(2008-06-01): should be $expected, found $value.");
112
    $expected = 53;
113
    $value = date_iso_weeks_in_year('2009-06-01 00:00:00');
114
    $this->assertEqual($expected, $value, "Test date_iso_weeks_in_year(2009-06-01): should be $expected, found $value.");
115

    
116
    // Test day of week for March 1, the day after leap day.
117
    $expected = 6;
118
    $value = date_day_of_week('2008-03-01 00:00:00');
119
    $this->assertEqual($expected, $value, "Test date_day_of_week(2008-03-01): should be $expected, found $value.");
120
    $expected = 0;
121
    $value = date_day_of_week('2009-03-01 00:00:00');
122
    $this->assertEqual($expected, $value, "Test date_day_of_week(2009-03-01): should be $expected, found $value.");
123

    
124
    // Test day of week name for March 1, the day after leap day.
125
    $expected = 'Sat';
126
    $value = date_day_of_week_name('2008-03-01 00:00:00');
127
    $this->assertEqual($expected, $value, "Test date_day_of_week_name(2008-03-01): should be $expected, found $value.");
128
    $expected = 'Sun';
129
    $value = date_day_of_week_name('2009-03-01 00:00:00');
130
    $this->assertEqual($expected, $value, "Test date_day_of_week_name(2009-03-01): should be $expected, found $value.");
131

    
132
    // Test week range with calendar weeks.
133
    variable_set('date_first_day', 0);
134
    variable_set('date_api_use_iso8601', FALSE);
135
    $expected = '2008-01-27 to 2008-02-02';
136
    $result = date_week_range(5, 2008);
137
    $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
138
    $this->assertEqual($expected, $value, "Test calendar date_week_range(5, 2008): should be $expected, found $value.");
139
    $expected = '2009-01-25 to 2009-01-31';
140
    $result = date_week_range(5, 2009);
141
    $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
142
    $this->assertEqual($expected, $value, "Test calendar date_week_range(5, 2009): should be $expected, found $value.");
143

    
144
    // And now with ISO weeks.
145
    variable_set('date_first_day', 1);
146
    variable_set('date_api_use_iso8601', TRUE);
147
    $expected = '2008-01-28 to 2008-02-03';
148
    $result = date_week_range(5, 2008);
149
    $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
150
    $this->assertEqual($expected, $value, "Test ISO date_week_range(5, 2008): should be $expected, found $value.");
151
    $expected = '2009-01-26 to 2009-02-01';
152
    $result = date_week_range(5, 2009);
153
    $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
154
    $this->assertEqual($expected, $value, "Test ISO date_week_range(5, 2009): should be $expected, found $value.");
155
    variable_set('date_api_use_iso8601', FALSE);
156

    
157
    // Find calendar week for a date.
158
    variable_set('date_first_day', 0);
159
    $expected = '09';
160
    $value = date_week('2008-03-01');
161
    $this->assertEqual($expected, $value, "Test date_week(2008-03-01): should be $expected, found $value.");
162
    $expected = '10';
163
    $value = date_week('2009-03-01');
164
    $this->assertEqual($expected, $value, "Test date_week(2009-03-01): should be $expected, found $value.");
165

    
166
    // Create date object from datetime string.
167
    $input = '2009-03-07 10:30';
168
    $timezone = 'America/Chicago';
169
    $date = new dateObject($input, $timezone);
170
    $value = $date->format('c');
171
    $expected = '2009-03-07T10:30:00-06:00';
172
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone): should be $expected, found $value.");
173

    
174
    // Same during daylight savings time.
175
    $input = '2009-06-07 10:30';
176
    $timezone = 'America/Chicago';
177
    $date = new dateObject($input, $timezone);
178
    $value = $date->format('c');
179
    $expected = '2009-06-07T10:30:00-05:00';
180
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone): should be $expected, found $value.");
181

    
182
    // Create date object from date string.
183
    $input = '2009-03-07';
184
    $timezone = 'America/Chicago';
185
    $date = new dateObject($input, $timezone);
186
    $value = $date->format('c');
187
    $expected = '2009-03-07T00:00:00-06:00';
188
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone): should be $expected, found $value.");
189

    
190
    // Same during daylight savings time.
191
    $input = '2009-06-07';
192
    $timezone = 'America/Chicago';
193
    $date = new dateObject($input, $timezone);
194
    $value = $date->format('c');
195
    $expected = '2009-06-07T00:00:00-05:00';
196
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone): should be $expected, found $value.");
197

    
198
    // Create date object from date array, date only.
199
    $input = array('year' => 2010, 'month' => 2, 'day' => 28);
200
    $timezone = 'America/Chicago';
201
    $date = new dateObject($input, $timezone);
202
    $value = $date->format('c');
203
    $expected = '2010-02-28T00:00:00-06:00';
204
    $this->assertEqual($expected, $value, "Test new dateObject(array('year' => 2010, 'month' => 2, 'day' => 28), $timezone): should be $expected, found $value.");
205

    
206
    // Create date object from date array with hour.
207
    $input = array('year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10);
208
    $timezone = 'America/Chicago';
209
    $date = new dateObject($input, $timezone);
210
    $value = $date->format('c');
211
    $expected = '2010-02-28T10:00:00-06:00';
212
    $this->assertEqual($expected, $value, "Test new dateObject(array('year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10), $timezone): should be $expected, found $value.");
213

    
214
    // 0 = January 1, 1970 00:00:00 (UTC);
215
    // 1000000000 = September 9, 2001 01:46:40 (UTC);
216
    // Create date object from unix timestamp and convert it to a local date.
217
    $input = 0;
218
    $timezone = 'UTC';
219
    $date = new dateObject($input, $timezone);
220
    $value = $date->format('c');
221
    $expected = '1970-01-01T00:00:00+00:00';
222
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone): should be $expected, found $value.");
223

    
224
    $expected = 'UTC';
225
    $value = $date->getTimeZone()->getName();
226
    $this->assertEqual($expected, $value, "The current timezone is $value: should be $expected.");
227
    $expected = 0;
228
    $value = $date->getOffset();
229
    $this->assertEqual($expected, $value, "The current offset is $value: should be $expected.");
230

    
231
    $timezone = 'America/Los_Angeles';
232
    $date->setTimezone(new DateTimeZone($timezone));
233
    $value = $date->format('c');
234
    $expected = '1969-12-31T16:00:00-08:00';
235
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
236

    
237
    $expected = 'America/Los_Angeles';
238
    $value = $date->getTimeZone()->getName();
239
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
240
    $expected = '-28800';
241
    $value = $date->getOffset();
242
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
243

    
244
    // Convert the local version of a timestamp to UTC.
245
    $input = 0;
246
    $timezone = 'America/Los_Angeles';
247
    $date = new dateObject($input, $timezone);
248
    $offset = $date->getOffset();
249
    $value = $date->format('c');
250
    $expected = '1969-12-31T16:00:00-08:00';
251
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone):  should be $expected, found $value.");
252

    
253
    $expected = 'America/Los_Angeles';
254
    $value = $date->getTimeZone()->getName();
255
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
256
    $expected = '-28800';
257
    $value = $date->getOffset();
258
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
259

    
260
    $timezone = 'UTC';
261
    $date->setTimezone(new DateTimeZone($timezone));
262
    $value = $date->format('c');
263
    $expected = '1970-01-01T00:00:00+00:00';
264
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
265

    
266
    $expected = 'UTC';
267
    $value = $date->getTimeZone()->getName();
268
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
269
    $expected = '0';
270
    $value = $date->getOffset();
271
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
272

    
273
     // Create date object from datetime string and convert it to a local date.
274
    $input = '1970-01-01 00:00:00';
275
    $timezone = 'UTC';
276
    $date = new dateObject($input, $timezone);
277
    $value = $date->format('c');
278
    $expected = '1970-01-01T00:00:00+00:00';
279
    $this->assertEqual($expected, $value, "Test new dateObject('$input', '$timezone'): should be $expected, found $value.");
280

    
281
    $expected = 'UTC';
282
    $value = $date->getTimeZone()->getName();
283
    $this->assertEqual($expected, $value, "The current timezone is $value: should be $expected.");
284
    $expected = 0;
285
    $value = $date->getOffset();
286
    $this->assertEqual($expected, $value, "The current offset is $value: should be $expected.");
287

    
288
    $timezone = 'America/Los_Angeles';
289
    $date->setTimezone(new DateTimeZone($timezone));
290
    $value = $date->format('c');
291
    $expected = '1969-12-31T16:00:00-08:00';
292
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
293

    
294
    $expected = 'America/Los_Angeles';
295
    $value = $date->getTimeZone()->getName();
296
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
297
    $expected = '-28800';
298
    $value = $date->getOffset();
299
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
300

    
301
    // Convert the local version of a datetime string to UTC.
302
    $input = '1969-12-31 16:00:00';
303
    $timezone = 'America/Los_Angeles';
304
    $date = new dateObject($input, $timezone);
305
    $offset = $date->getOffset();
306
    $value = $date->format('c');
307
    $expected = '1969-12-31T16:00:00-08:00';
308
    $this->assertEqual($expected, $value, "Test new dateObject('$input', '$timezone'):  should be $expected, found $value.");
309

    
310
    $expected = 'America/Los_Angeles';
311
    $value = $date->getTimeZone()->getName();
312
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
313
    $expected = '-28800';
314
    $value = $date->getOffset();
315
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
316

    
317
    $timezone = 'UTC';
318
    $date->setTimezone(new DateTimeZone($timezone));
319
    $value = $date->format('c');
320
    $expected = '1970-01-01T00:00:00+00:00';
321
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
322

    
323
    $expected = 'UTC';
324
    $value = $date->getTimeZone()->getName();
325
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
326
    $expected = '0';
327
    $value = $date->getOffset();
328
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
329

    
330
     // Create year-only date.
331
    $input = '2009';
332
    $timezone = NULL;
333
    $format = 'Y';
334
    $date = new dateObject($input, $timezone, $format);
335
    $value = $date->format('Y');
336
    $expected = '2009';
337
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone, $format): should be $expected, found $value.");
338

    
339
     // Create month and year-only date.
340
    $input = '2009-10';
341
    $timezone = NULL;
342
    $format = 'Y-m';
343
    $date = new dateObject($input, $timezone, $format);
344
    $value = $date->format('Y-m');
345
    $expected = '2009-10';
346
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone, $format): should be $expected, found $value.");
347

    
348
     // Create time-only date.
349
    $input = '0000-00-00T10:30:00';
350
    $timezone = NULL;
351
    $format = 'Y-m-d\TH:i:s';
352
    $date = new dateObject($input, $timezone, $format);
353
    $value = $date->format('H:i:s');
354
    $expected = '10:30:00';
355
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone, $format): should be $expected, found $value.");
356

    
357
     // Create time-only date.
358
    $input = '10:30:00';
359
    $timezone = NULL;
360
    $format = 'H:i:s';
361
    $date = new dateObject($input, $timezone, $format);
362
    $value = $date->format('H:i:s');
363
    $expected = '10:30:00';
364
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone, $format): should be $expected, found $value.");
365

    
366
    // Test date ranges.
367
    $valid = array(
368
      '-20:+20',
369
      '-1:+0',
370
      '-10:-5',
371
      '2000:2020',
372
      '-10:2010',
373
      '1980:-10',
374
      '1920:+20',
375
    );
376
    $invalid = array(
377
      'abc',
378
      'abc:+20',
379
      '1920:+20a',
380
      '+-20:+-30',
381
      '12:12',
382
      '0:+20',
383
      '-20:0',
384
    );
385
    foreach ($valid as $range) {
386
      $this->assertTrue(date_range_valid($range), "$range recognized as a valid date range.");
387
    }
388
    foreach ($invalid as $range) {
389
      $this->assertFalse(date_range_valid($range), "$range recognized as an invalid date range.");
390
    }
391

    
392
    // Test for invalid month names when we are using a short version of the month
393
    $input = '23 abc 2012';
394
    $timezone = NULL;
395
    $format = 'd M Y';
396
    $date = @new dateObject($input, $timezone, $format);
397
    $this->assertNotEqual(count($date->errors), 0, '23 abc 2012 should be an invalid date');
398

    
399
    // Test Granularity.
400
    $input = '2005-06-01 10:30:45';
401
    $timezone = NULL;
402
    $format = 'Y-m-d H:i:s';
403

    
404
    $date = new dateObject($input, $timezone, $format);
405
    $date->removeGranularity('hour');
406
    $date->removeGranularity('second');
407
    $date->removeGranularity('minute');
408

    
409
    $value = $date->format($format);
410
    $expected = '2005-06-01';
411
    $this->assertEqual($expected, $value, "The date with removed granularity should be $expected, found $value.");
412

    
413
    $date->addGranularity('hour');
414
    $date->addGranularity('second');
415
    $date->addGranularity('minute');
416

    
417
    $value = $date->format($format);
418
    $expected = '2005-06-01 10:30:45';
419

    
420
    $this->assertEqual($expected, $value, "The date with added granularity should be $expected, found $value.");
421
  }
422

    
423
  /**
424
   * @todo.
425
   */
426
  public function tearDown() {
427
    variable_del('date_first_day');
428
    variable_del('date_api_use_iso8601');
429
    parent::tearDown();
430
  }
431
}