summaryrefslogtreecommitdiffstats
path: root/test/tests.js
blob: bf5e7310af55559088531feabcc162066f3fa7b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
module('jQuery Week Calendar v2.0-dev');
function formatTimeZone() {
  var TZ = -(new Date('Apr 21 2011')).getTimezoneOffset();
  var TZ = {
    'sign': (TZ < 0 ? '-' : '+'),
    'hour': (Math.floor(TZ / 60)),
    'minute': (TZ % 60)};

  return TZ['sign'] + (TZ['hour'] < 10 ? '0' : '') + TZ['hour'] + ':' + (TZ['minute'] < 10 ? '0' : '') + TZ['minute'];
}

test('Default Options', function() {

    var $calendar = $('#calendar');
    $calendar.weekCalendar();

    expect(30);

    deepEqual($calendar.weekCalendar('option', 'alwaysDisplayTimeMinutes'), true);
    deepEqual($calendar.weekCalendar('option', 'use24Hour'), false);
    deepEqual($calendar.weekCalendar('option', 'firstDayOfWeek')(), 0);
    deepEqual($calendar.weekCalendar('option', 'daysToShow'), 7);
    deepEqual($calendar.weekCalendar('option', 'minBodyHeight'), 100);
    deepEqual($calendar.weekCalendar('option', 'useShortDayNames'), false);
    deepEqual($calendar.weekCalendar('option', 'timeSeparator'), ' to ');
    deepEqual($calendar.weekCalendar('option', 'startParam'), 'start');
    deepEqual($calendar.weekCalendar('option', 'endParam'), 'end');
    deepEqual($calendar.weekCalendar('option', 'businessHours').start, 8);
    deepEqual($calendar.weekCalendar('option', 'businessHours').end, 18);
    deepEqual($calendar.weekCalendar('option', 'businessHours').limitDisplay, false);
    deepEqual($calendar.weekCalendar('option', 'newEventText'), 'New Event');
    deepEqual($calendar.weekCalendar('option', 'timeslotHeight'), 20);
    deepEqual($calendar.weekCalendar('option', 'defaultEventLength'), 2);
    deepEqual($calendar.weekCalendar('option', 'timeslotsPerHour'), 4);
    deepEqual($calendar.weekCalendar('option', 'minDate'), null);
    deepEqual($calendar.weekCalendar('option', 'maxDate'), null);
    deepEqual($calendar.weekCalendar('option', 'buttons'), true);
    deepEqual($calendar.weekCalendar('option', 'scrollToHourMillis'), 500);
    deepEqual($calendar.weekCalendar('option', 'allowCalEventOverlap'), false);
    deepEqual($calendar.weekCalendar('option', 'overlapEventsSeparate'), false);
    deepEqual($calendar.weekCalendar('option', 'readonly'), false);
    deepEqual($calendar.weekCalendar('option', 'allowEventCreation'), true);

    deepEqual($calendar.weekCalendar('option', 'displayOddEven'), false);
    deepEqual($calendar.weekCalendar('option', 'textSize'), 13);
    deepEqual($calendar.weekCalendar('option', 'headerSeparator'), '<br />');
    deepEqual($calendar.weekCalendar('option', 'getHeaderDate'), null);
    deepEqual($calendar.weekCalendar('option', 'preventDragOnEventCreation'), false);

    deepEqual($calendar.weekCalendar('option', 'draggable')(), true);

});

test('date parsing', function() {
  var $calendar = $('#calendar');
  $calendar.weekCalendar();

  expect(15);

  var _cleanDate = $.proxy($calendar.data('weekCalendar'), '_cleanDate'),
      _curdate,
      testData = [
        {value: new Date('Fri Jul 16 2010 14:15:00'), expected: new Date('Fri Jul 16 2010 14:15:00').getTime()},
        {value: 1276683300000, expected: 1276683300000},
        {value: '1276683300000', expected: 1276683300000},
        {value: '2010-06-16T12:15:00+02:00', expected: 1276683300000},
        {value: '2010-06-16T12:15:00.000+02:00', expected: 1276683300000},
        {value: 'Wed Jun 16 2010 12:15:00 GMT+0200', expected: 1276683300000},
        {value: '2010-06-16T12:15', expected: 1276683300000},
      ];

  ok($.isFunction($calendar.data('weekCalendar')._cleanDate), 'check _cleanDate is a function');

  $(testData).each(function(i, item) {
    _curdate = $calendar.data('weekCalendar')._cleanDate(item.value);
    ok(_curdate instanceof Date, 'Case ' + i + ': "_cleanDate" returns a Date instance');
    equal(_curdate.getTime(), item.expected, 'Case ' + i + ': The returned date is correct.');
  });
});

test('Date internationalization', function() {

  var $calendar = $('#calendar');
  $calendar.weekCalendar({
      date: new Date('Apr 21 2011'),
      firstDayOfWeek: $.datepicker.regional['fr'].firstDay,
      shortDays: $.datepicker.regional['fr'].dayNamesShort,
      longDays: $.datepicker.regional['fr'].dayNames,
      shortMonths: $.datepicker.regional['fr'].monthNamesShort,
      longMonths: $.datepicker.regional['fr'].monthNames,
      dateFormat: 'd F y'
    });

  expect(53);

  // default format
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 20 2011 14:50:32 GMT+0200')), '20 Avril 11');
  // force format
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 20 2011 14:50:32 GMT+0200'), 'l j M Y'), 'Mercredi 20 Avril 2011');


  //Barbarian test
  $calendar.weekCalendar('option', {
                              dateFormat: 'd D j l N S w F m M n t Y y a A g G h H i s O P Z r U',
                              firstDayOfWeek: $.datepicker.regional['en-GB'].firstDay,
                              shortDays: $.datepicker.regional['en-GB'].dayNamesShort,
                              longDays: $.datepicker.regional['en-GB'].dayNames,
                              shortMonths: $.datepicker.regional['en-GB'].monthNamesShort,
                              longMonths: $.datepicker.regional['en-GB'].monthNames
                          });
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200')), '01 Fri 1 Friday 5 st 5 April 04 Apr 4 30 2011 11 pm PM 2 14 02 14 50 32 +0200 +02:00 7200 Fri, 01 Apr 2011 14:50:32 +0200 1301662232');

//Day

  //test 'd' - 01 to 31 Day
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'd'), '01');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 10 2011 14:50:32 GMT+0200'), 'd'), '10');

  //test 'j' - 1 to 31 Day
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'j'), '1');

  //test 'D' Three letter Day
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'D'), 'Fri');

  //test 'l' - Full Text Day
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'l'), 'Friday');

  //test 'N' - number of the day in the week
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 18 2011 14:50:32 GMT+0200'), 'N'), '1');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 19 2011 14:50:32 GMT+0200'), 'N'), '2');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 20 2011 14:50:32 GMT+0200'), 'N'), '3');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 21 2011 14:50:32 GMT+0200'), 'N'), '4');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 22 2011 14:50:32 GMT+0200'), 'N'), '5');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 23 2011 14:50:32 GMT+0200'), 'N'), '6');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 24 2011 14:50:32 GMT+0200'), 'N'), '7');

  //test 'S' - Ordinal suffix
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'S'), 'st');

  //test 'w' - Numeric representation
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 18 2011 14:50:32 GMT+0200'), 'w'), '1');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 19 2011 14:50:32 GMT+0200'), 'w'), '2');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 20 2011 14:50:32 GMT+0200'), 'w'), '3');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 21 2011 14:50:32 GMT+0200'), 'w'), '4');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 22 2011 14:50:32 GMT+0200'), 'w'), '5');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 23 2011 14:50:32 GMT+0200'), 'w'), '6');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 24 2011 14:50:32 GMT+0200'), 'w'), '0');

//Month

  //test 'F' - Full Text
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'F'), 'April');

  //test 'm' - 01 to 12
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'm'), '04');

  //test 'M' -Three letter
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'M'), 'Apr');

  //test 'n' - 1 to 12
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'n'), '4');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Nov 01 2011 14:50:32 GMT+0200'), 'n'), '11');

  //test 't' -number of the day in month
    deepEqual($calendar.weekCalendar('formatDate', new Date('Feb 01 2011 14:50:32 GMT+0200'), 't'), '28');
    deepEqual($calendar.weekCalendar('formatDate', new Date('Feb 01 1900 14:50:32 GMT+0200'), 't'), '28');
    deepEqual($calendar.weekCalendar('formatDate', new Date('Feb 01 2000 14:50:32 GMT+0200'), 't'), '29');
    deepEqual($calendar.weekCalendar('formatDate', new Date('Feb 01 2004 14:50:32 GMT+0200'), 't'), '29');
    deepEqual($calendar.weekCalendar('formatDate', new Date('Jun 01 2011 14:50:32 GMT+0200'), 't'), '30');
    deepEqual($calendar.weekCalendar('formatDate', new Date('May 01 2011 14:50:32 GMT+0200'), 't'), '31');


//Year

  //test 'Y' - full Year
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'Y'), '2011');

  //test 'y' - short Year
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'y'), '11');

//Time
  //test 'a' - am or pm
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'a'), 'pm');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 11:50:32 GMT+0200'), 'a'), 'am');


  //test 'A' - AM or PM
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'A'), 'PM');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 11:50:32 GMT+0200'), 'A'), 'AM');

  //test 'g' and 'G' - 12h&24 format-(1 to 12) and (0 to 23)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'g'), '2');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'G'), '14');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 00:50:32 GMT+0200'), 'G'), '0');

  //test 'h' and 'H' - 12h&24 format-(01 to 12) and (00 to 23)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'h'), '02');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'H'), '14');
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 00:50:32 GMT+0200'), 'H'), '00');

  //test 'i' - minute (00 to 59)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:00:32 GMT+0200'), 'i'), '00');

  //test 's' - sec (00 to 59)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:00:32 GMT+0200'), 's'), '32');

//Timezone
  //test 'O' - Greenwitch difference (+0200)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:00:32 GMT+0200'), 'O'), '+0200');

  //test 'P' - Greenwitch difference (+02:00)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:00:32 GMT+0200'), 'P'), '+02:00');

  //test 'Z' - Greenwitch difference in sec (+0200)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:00:32 GMT+0200'), 'Z'), '7200');

//FullTime

  //test 'r' - RFC2822 : Thu, 21 Dec 2000 16:01:07 +0200
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:51:32 GMT+0200'), 'r'), 'Fri, 01 Apr 2011 14:51:32 +0200');

  //test 'U'- TimeStamp (since 1/1/1970)
  deepEqual($calendar.weekCalendar('formatDate', new Date('Apr 01 2011 14:50:32 GMT+0200'), 'U'), '1301662232');

});

test("issue # 60: eventHeader doesn't take care of use24Hour option", function() {
  var $calendar = $('#calendar');
  $calendar.weekCalendar({
    'use24Hour': false,
    'timeSeparator': ' -> '
  });
  //get local timezone:
  var TZ = formatTimeZone();

  expect(5);
  var _events = [{
      'id': 1,
      'start': '2009-05-10T13:15:00' + TZ,
      'end': '2009-05-10T14:15:00' + TZ,
      'title': 'Lunch with Mike'}, {
      'id': 1,
      'start': '2009-05-10T10:15:00' + TZ,
      'end': '2009-05-10T12:15:00' + TZ,
      'title': 'Lunch with Mike'}
      ];
  // trick to call private function
  var _privateWeekCalendar = $calendar.data('weekCalendar');
  _events = _privateWeekCalendar._cleanEvents.call(_privateWeekCalendar, _events);

  var eventHeaderFunc = $calendar.weekCalendar('option', 'eventHeader');

  ok($.isFunction(eventHeaderFunc), 'check eventHeader is a function');

  // test without use24Hour option
  deepEqual(eventHeaderFunc(_events[0], $calendar), '01:15 pm -> 02:15 pm');
  deepEqual(eventHeaderFunc(_events[1], $calendar), '10:15 am -> 12:15 pm');

  // now force use24Hour to true
  $calendar.weekCalendar('option', 'use24Hour', true);

  deepEqual(eventHeaderFunc(_events[0], $calendar), '13:15 -> 14:15');
  deepEqual(eventHeaderFunc(_events[1], $calendar), '10:15 -> 12:15');

  //check for title when

});
//Test date Last|First Day|Milli OfWeek()
test('issue #49: wrong calculation of DateLastMilliOfWeek', function() {
  var $calendar = $('#calendar');
  $calendar.weekCalendar({
    date: new Date('Apr 21 2011'),
    daysToShow: 7,
    firstDayOfWeek: 1,
    startOnFirstDayOfWeek: true
  });

  var TZ = formatTimeZone();

  expect(30);

  var _events = [{
      'id': 1,
      'start': '2009-05-10T13:15:00' + TZ,
      'end': '2009-05-10T14:15:00' + TZ,
      'title': 'Lunch with Mike'}, {
      'id': 1,
      'start': '2009-05-10T10:15:00' + TZ,
      'end': '2009-05-10T12:15:00' + TZ,
      'title': 'Lunch with Mike'}
      ];

  var _privateInstance = $calendar.data('weekCalendar');
  ok($.isFunction(_privateInstance._dateLastDayOfWeek), 'check _dateLastDayOfWeek is a function');
  ok($.isFunction(_privateInstance._dateFirstDayOfWeek), 'check _dateFirstDayOfWeek is a function');
  ok($.isFunction(_privateInstance._dateLastMilliOfWeek), 'check _dateLastMilliOfWeek is a function');

  // create a closure to ease testing
  var _dateLastDayOfWeek = function() {return _privateInstance._dateLastDayOfWeek.apply(_privateInstance, arguments);};
  var _dateFirstDayOfWeek = function() {return _privateInstance._dateFirstDayOfWeek.apply(_privateInstance, arguments);};
  var _dateLastMilliOfWeek = function() {return _privateInstance._dateLastMilliOfWeek.apply(_privateInstance, arguments);};
  var _curDate, date;

  _curDate = _dateFirstDayOfWeek(new Date('Apr 21 2011'));
  ok(_curDate instanceof Date, '_dateFirstDayOfWeek returns a date');
  equals(_curDate.toString(), (new Date('Apr 18 2011')).toString(), '_dateFirstDayOfWeek returns monday');

  _curDate = _dateLastDayOfWeek(new Date('Apr 21 2011'));
  ok(_curDate instanceof Date, '_dateLastDayOfWeek returns a date');
  equals(_curDate.toString(), (new Date('Apr 24 2011')).toString(), '_dateLastDayOfWeek returns sunday');

  _curDate = _dateLastMilliOfWeek(new Date('Apr 21 2011'));

  ok(_curDate instanceof Date, '_dateLastMilliOfWeek returns a date');
  equals(_curDate.toString(), (new Date('Apr 25 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next monday midnight');

  //change firstDayOvWeek to sunday
  $calendar.weekCalendar('option', 'firstDayOfWeek', 0);

  //Middle of month
  _curDate = _dateFirstDayOfWeek(new Date('Apr 21 2011'));
  equals(_curDate.toString(), (new Date('Apr 17 2011')).toString(), '_dateFirstDayOfWeek returns sunday');

  _curDate = _dateLastDayOfWeek(new Date('Apr 21 2011'));
  equals(_curDate.toString(), (new Date('Apr 23 2011')).toString(), '_dateLastDayOfWeek returns monday');

  _curDate = _dateLastMilliOfWeek(new Date('Apr 21 2011'));
  equals(_curDate.toString(), (new Date('Apr 24 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next sunday midnight');

  // case date for start of mont
  _curDate = _dateFirstDayOfWeek(new Date('Apr 01 2011'));
  equals(_curDate.toString(), (new Date('Mar 27 2011')).toString(), '_dateFirstDayOfWeek returns sunday 27 Mar');

  _curDate = _dateLastDayOfWeek(new Date('Apr 01 2011'));
  equals(_curDate.toString(), (new Date('Apr 2 2011')).toString(), '_dateLastDayOfWeek returns Sat 2 APr');

  _curDate = _dateLastMilliOfWeek(new Date('Apr 01 2011'));
  equals(_curDate.toString(), (new Date('Apr 03 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next sunday midnight 3 Apr ');


  //change firstDayOvWeek to monday
  $calendar.weekCalendar('option', 'firstDayOfWeek', 1);

  // case date for end of month
  _curDate = _dateFirstDayOfWeek(new Date('Apr 30 2011'));
  equals(_curDate.toString(), (new Date('Apr 25 2011')).toString(), '_dateFirstDayOfWeek returns monday 25');

  _curDate = _dateLastDayOfWeek(new Date('Apr 30 2011'));
  equals(_curDate.toString(), (new Date('May 01 2011')).toString(), '_dateLastDayOfWeek returns Sun 1');

  _curDate = _dateLastMilliOfWeek(new Date('Apr 30 2011'));
  equals(_curDate.toString(), (new Date('May 02 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next monday midnight 2');

  //change firstDayOvWeek to sunday
  $calendar.weekCalendar('option', 'firstDayOfWeek', 0);

  // case date for end of week
  _curDate = _dateFirstDayOfWeek(new Date('Apr 23 2011'));
  equals(_curDate.toString(), (new Date('Apr 17 2011')).toString(), '_dateFirstDayOfWeek returns sunday 17');

  _curDate = _dateLastDayOfWeek(new Date('Apr 23 2011'));
  equals(_curDate.toString(), (new Date('Apr 23 2011')).toString(), '_dateLastDayOfWeek returns Saturday  23');

  _curDate = _dateLastMilliOfWeek(new Date('Apr 23 2011'));
  equals(_curDate.toString(), (new Date('Apr 24 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next sunday midnight 24');


  // case date in february leap year
  _curDate = _dateFirstDayOfWeek(new Date('Mar 01 2000'));
  equals(_curDate.toString(), (new Date('Feb 27 2000')).toString(), '_dateFirstDayOfWeek returns sunday 27');

  _curDate = _dateLastDayOfWeek(new Date('Mar 01 2000'));
  equals(_curDate.toString(), (new Date('Mar 04 2000')).toString(), '_dateLastDayOfWeek returns monday 4 ');

  _curDate = _dateLastMilliOfWeek(new Date('Mar 01 2000'));
  equals(_curDate.toString(), (new Date('Mar 05 2000 00:00:00')).toString(), '_dateLastMilliOfWeek returns next sunday midnight 5');

  //change firstDayOvWeek to monday
  $calendar.weekCalendar('option', 'firstDayOfWeek', 1);

  // case daylight saving +
  date = new Date('Mar 22 2011');
  _curDate = _dateFirstDayOfWeek(date);
  equals(_curDate.toString(), (new Date('Mar 21 2011')).toString(), '_dateFirstDayOfWeek returns monday 21');

  _curDate = _dateLastDayOfWeek(date);
  equals(_curDate.toString(), (new Date('Mar 27 2011')).toString(), '_dateLastDayOfWeek returns sunday 27');

  _curDate = _dateLastMilliOfWeek(date);
  equals(_curDate.toString(), (new Date('Mar 28 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next monday midnight 28');


  // case daylight saving -
  date = new Date('Oct 26 2011');
  _curDate = _dateFirstDayOfWeek(date);
  equals(_curDate.toString(), (new Date('Oct 24 2011')).toString(), '_dateFirstDayOfWeek returns monday 24');

  _curDate = _dateLastDayOfWeek(date);
  equals(_curDate.toString(), (new Date('Oct 30 2011')).toString(), '_dateLastDayOfWeek returns sunday 30 ');

  _curDate = _dateLastMilliOfWeek(date);
  equals(_curDate.toString(), (new Date('Oct 31 2011 00:00:00')).toString(), '_dateLastMilliOfWeek returns next monday midnight 31');


});