Projet

Général

Profil

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

root / drupal7 / sites / all / modules / date / date_api / tests / DateApiTestCase.test @ 599a39cd

1
<?php
2

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

    
8
/**
9
 * Test Date API functions.
10
 */
11
class DateApiTestCase extends DrupalWebTestCase {
12

    
13
  /**
14
   * @todo.
15
   */
16
  public static function getInfo() {
17
    return array(
18
      'name' => t('Date API'),
19
      'description' => t('Test Date API functions.') ,
20
      'group' => t('Date'),
21
    );
22
  }
23

    
24
  /**
25
   * {@inheritdoc}
26
   */
27
  public function setUp(array $modules = array()) {
28
    $modules[] = 'date_api';
29
    parent::setUp($modules);
30

    
31
    variable_set('date_api_use_iso8601', FALSE);
32
    variable_set('date_first_day', 1);
33
  }
34

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

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

    
97
    // Test days in February for a leap year and a non-leap year.
98
    $expected = 28;
99
    $value = date_days_in_month(2005, 2);
100
    $this->assertEqual($expected, $value, "Test date_days_in_month(2, 2005): should be $expected, found $value.");
101
    $expected = 29;
102
    $value = date_days_in_month(2004, 2);
103
    $this->assertEqual($expected, $value, "Test date_days_in_month(2, 2004): should be $expected, found $value.");
104

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
229
    $expected = 'UTC';
230
    $value = $date->getTimeZone()->getName();
231
    $this->assertEqual($expected, $value, "The current timezone is $value: should be $expected.");
232
    $expected = 0;
233
    $value = $date->getOffset();
234
    $this->assertEqual($expected, $value, "The current offset is $value: should be $expected.");
235

    
236
    $timezone = 'America/Los_Angeles';
237
    $date->setTimezone(new DateTimeZone($timezone));
238
    $value = $date->format('c');
239
    $expected = '1969-12-31T16:00:00-08:00';
240
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
241

    
242
    $expected = 'America/Los_Angeles';
243
    $value = $date->getTimeZone()->getName();
244
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
245
    $expected = '-28800';
246
    $value = $date->getOffset();
247
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
248

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

    
258
    $expected = 'America/Los_Angeles';
259
    $value = $date->getTimeZone()->getName();
260
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
261
    $expected = '-28800';
262
    $value = $date->getOffset();
263
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
264

    
265
    $timezone = 'UTC';
266
    $date->setTimezone(new DateTimeZone($timezone));
267
    $value = $date->format('c');
268
    $expected = '1970-01-01T00:00:00+00:00';
269
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
270

    
271
    $expected = 'UTC';
272
    $value = $date->getTimeZone()->getName();
273
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
274
    $expected = '0';
275
    $value = $date->getOffset();
276
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
277

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

    
286
    $expected = 'UTC';
287
    $value = $date->getTimeZone()->getName();
288
    $this->assertEqual($expected, $value, "The current timezone is $value: should be $expected.");
289
    $expected = 0;
290
    $value = $date->getOffset();
291
    $this->assertEqual($expected, $value, "The current offset is $value: should be $expected.");
292

    
293
    $timezone = 'America/Los_Angeles';
294
    $date->setTimezone(new DateTimeZone($timezone));
295
    $value = $date->format('c');
296
    $expected = '1969-12-31T16:00:00-08:00';
297
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
298

    
299
    $expected = 'America/Los_Angeles';
300
    $value = $date->getTimeZone()->getName();
301
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
302
    $expected = '-28800';
303
    $value = $date->getOffset();
304
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
305

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

    
315
    $expected = 'America/Los_Angeles';
316
    $value = $date->getTimeZone()->getName();
317
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
318
    $expected = '-28800';
319
    $value = $date->getOffset();
320
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
321

    
322
    $timezone = 'UTC';
323
    $date->setTimezone(new DateTimeZone($timezone));
324
    $value = $date->format('c');
325
    $expected = '1970-01-01T00:00:00+00:00';
326
    $this->assertEqual($expected, $value, "Test \$date->setTimezone(new DateTimeZone($timezone)): should be $expected, found $value.");
327

    
328
    $expected = 'UTC';
329
    $value = $date->getTimeZone()->getName();
330
    $this->assertEqual($expected, $value, "The current timezone should be $expected, found $value.");
331
    $expected = '0';
332
    $value = $date->getOffset();
333
    $this->assertEqual($expected, $value, "The current offset should be $expected, found $value.");
334

    
335
    // Create year-only date.
336
    $input = '2009';
337
    $timezone = NULL;
338
    $format = 'Y';
339
    $date = new dateObject($input, $timezone, $format);
340
    $value = $date->format('Y');
341
    $expected = '2009';
342
    $this->assertEqual($expected, $value, "Test new dateObject($input, $timezone, $format): should be $expected, found $value.");
343

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

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

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

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

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

    
405
    // Test Granularity.
406
    $input = '2005-06-01 10:30:45';
407
    $timezone = NULL;
408
    $format = 'Y-m-d H:i:s';
409

    
410
    $date = new dateObject($input, $timezone, $format);
411
    $date->removeGranularity('hour');
412
    $date->removeGranularity('second');
413
    $date->removeGranularity('minute');
414

    
415
    $value = $date->format($format);
416
    $expected = '2005-06-01';
417
    $this->assertEqual($expected, $value, "The date with removed granularity should be $expected, found $value.");
418

    
419
    $date->addGranularity('hour');
420
    $date->addGranularity('second');
421
    $date->addGranularity('minute');
422

    
423
    $value = $date->format($format);
424
    $expected = '2005-06-01 10:30:45';
425

    
426
    $this->assertEqual($expected, $value, "The date with added granularity should be $expected, found $value.");
427
  }
428

    
429
  /**
430
   * @todo.
431
   */
432
  public function tearDown() {
433
    variable_del('date_first_day');
434
    variable_del('date_api_use_iso8601');
435
    parent::tearDown();
436
  }
437

    
438
}