]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojo/tests/date.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojo / tests / date.js
diff --git a/static/dojo-release-1.1.1/dojo/tests/date.js b/static/dojo-release-1.1.1/dojo/tests/date.js
new file mode 100644 (file)
index 0000000..57df0fd
--- /dev/null
@@ -0,0 +1,716 @@
+if(!dojo._hasResource["tests.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["tests.date"] = true;
+dojo.provide("tests.date");
+
+dojo.require("dojo.date");
+
+tests.register("tests.date.util", 
+       [
+
+/* Informational Functions
+ **************************/
+
+function test_date_getDaysInMonth(t){
+       // months other than February
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,0,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,2,1)));
+       t.is(30, dojo.date.getDaysInMonth(new Date(2006,3,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,4,1)));
+       t.is(30, dojo.date.getDaysInMonth(new Date(2006,5,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,6,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,7,1)));
+       t.is(30, dojo.date.getDaysInMonth(new Date(2006,8,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,9,1)));
+       t.is(30, dojo.date.getDaysInMonth(new Date(2006,10,1)));
+       t.is(31, dojo.date.getDaysInMonth(new Date(2006,11,1)));
+
+       // Februarys
+       t.is(28, dojo.date.getDaysInMonth(new Date(2006,1,1)));
+       t.is(29, dojo.date.getDaysInMonth(new Date(2004,1,1)));
+       t.is(29, dojo.date.getDaysInMonth(new Date(2000,1,1)));
+       t.is(28, dojo.date.getDaysInMonth(new Date(1900,1,1)));
+       t.is(28, dojo.date.getDaysInMonth(new Date(1800,1,1)));
+       t.is(28, dojo.date.getDaysInMonth(new Date(1700,1,1)));
+       t.is(29, dojo.date.getDaysInMonth(new Date(1600,1,1)));
+},
+
+function test_date_isLeapYear(t){
+       t.f(dojo.date.isLeapYear(new Date(2006,0,1)));
+       t.t(dojo.date.isLeapYear(new Date(2004,0,1)));
+       t.t(dojo.date.isLeapYear(new Date(2000,0,1)));
+       t.f(dojo.date.isLeapYear(new Date(1900,0,1)));
+       t.f(dojo.date.isLeapYear(new Date(1800,0,1)));
+       t.f(dojo.date.isLeapYear(new Date(1700,0,1)));
+       t.t(dojo.date.isLeapYear(new Date(1600,0,1)));
+},
+
+// The getTimezone function pulls from either the date's toString or
+// toLocaleString method -- it's really just a string-processing
+// function (assuming the Date obj passed in supporting both toString 
+// and toLocaleString) and as such can be tested for multiple browsers
+// by manually settting up fake Date objects with the actual strings
+// produced by various browser/OS combinations.
+// FIXME: the function and tests are not localized.
+function test_date_getTimezoneName(t){
+       
+       // Create a fake Date object with toString and toLocaleString
+       // results manually set to simulate tests for multiple browsers
+       function FakeDate(str, strLocale){
+               this.str = str || '';
+               this.strLocale = strLocale || '';
+               this.toString = function() {
+                       return this.str;
+               };
+               this.toLocaleString = function(){
+                       return this.strLocale;
+               };
+       }
+       var dt = new FakeDate();
+       
+       // FF 1.5 Ubuntu Linux (Breezy)
+       dt.str = 'Sun Sep 17 2006 22:25:51 GMT-0500 (CDT)';
+       dt.strLocale = 'Sun 17 Sep 2006 10:25:51 PM CDT';
+       t.is('CDT', dojo.date.getTimezoneName(dt));
+
+       // Safari 2.0 Mac OS X 10.4
+       dt.str = 'Sun Sep 17 2006 22:55:01 GMT-0500';
+       dt.strLocale = 'September 17, 2006 10:55:01 PM CDT';
+       t.is('CDT', dojo.date.getTimezoneName(dt));
+
+       // FF 1.5 Mac OS X 10.4
+       dt.str = 'Sun Sep 17 2006 22:57:18 GMT-0500 (CDT)';
+       dt.strLocale = 'Sun Sep 17 22:57:18 2006';
+       t.is('CDT', dojo.date.getTimezoneName(dt));
+
+       // Opera 9 Mac OS X 10.4 -- no TZ data expect empty string return
+       dt.str = 'Sun, 17 Sep 2006 22:58:06 GMT-0500';
+       dt.strLocale = 'Sunday September 17, 22:58:06 GMT-0500 2006';
+       t.is('', dojo.date.getTimezoneName(dt));
+       
+       // IE 6 Windows XP
+       dt.str = 'Mon Sep 18 11:21:07 CDT 2006';
+       dt.strLocale = 'Monday, September 18, 2006 11:21:07 AM';
+       t.is('CDT', dojo.date.getTimezoneName(dt));
+
+       // Opera 9 Ubuntu Linux (Breezy) -- no TZ data expect empty string return 
+       dt.str = 'Mon, 18 Sep 2006 13:30:32 GMT-0500';
+       dt.strLocale = 'Monday September 18, 13:30:32 GMT-0500 2006';
+       t.is('', dojo.date.getTimezoneName(dt));
+       
+       // IE 5.5 Windows 2000
+       dt.str = 'Mon Sep 18 13:49:22 CDT 2006';
+       dt.strLocale = 'Monday, September 18, 2006 1:49:22 PM';
+       t.is('CDT', dojo.date.getTimezoneName(dt));
+}
+       ]
+);
+
+tests.register("tests.date.math", 
+       [
+function test_date_compare(t){
+       var d1=new Date();
+       d1.setHours(0);
+       var d2=new Date();
+       d2.setFullYear(2005);
+       d2.setHours(12);
+       t.is(0, dojo.date.compare(d1, d1));
+       t.is(1, dojo.date.compare(d1, d2, "date"));
+       t.is(-1, dojo.date.compare(d2, d1, "date"));
+       t.is(-1, dojo.date.compare(d1, d2, "time"));
+       t.is(1, dojo.date.compare(d1, d2, "datetime"));
+},
+function test_date_add(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       
+       interv = "year";
+       dtA = new Date(2005, 11, 27);
+       dtB = new Date(2006, 11, 27);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2005, 11, 27);
+       dtB = new Date(2004, 11, 27);
+       t.is(dtB, dojo.date.add(dtA, interv, -1));
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2001, 1, 28);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2005, 1, 28);
+       t.is(dtB, dojo.date.add(dtA, interv, 5));
+       
+       dtA = new Date(1900, 11, 31);
+       dtB = new Date(1930, 11, 31);
+       t.is(dtB, dojo.date.add(dtA, interv, 30));
+       
+       dtA = new Date(1995, 11, 31);
+       dtB = new Date(2030, 11, 31);
+       t.is(dtB, dojo.date.add(dtA, interv, 35));
+
+       interv = "quarter";
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(2000, 3, 1);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2000, 7, 29);
+       t.is(dtB, dojo.date.add(dtA, interv, 2));
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2001, 1, 28);
+       t.is(dtB, dojo.date.add(dtA, interv, 4));
+       
+       interv = "month";
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(2000, 1, 1);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2000, 0, 31);
+       dtB = new Date(2000, 1, 29);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2001, 1, 28);
+       t.is(dtB, dojo.date.add(dtA, interv, 12));
+       
+       interv = "week";
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(2000, 0, 8);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       interv = "day";
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(2000, 0, 2);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2001, 0, 1);
+       dtB = new Date(2002, 0, 1);
+       t.is(dtB, dojo.date.add(dtA, interv, 365));
+       
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(2001, 0, 1);
+       t.is(dtB, dojo.date.add(dtA, interv, 366));
+       
+       dtA = new Date(2000, 1, 28);
+       dtB = new Date(2000, 1, 29);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2001, 1, 28);
+       dtB = new Date(2001, 2, 1);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       dtA = new Date(2000, 2, 1);
+       dtB = new Date(2000, 1, 29);
+       t.is(dtB, dojo.date.add(dtA, interv, -1));
+       
+       dtA = new Date(2001, 2, 1);
+       dtB = new Date(2001, 1, 28);
+       t.is(dtB, dojo.date.add(dtA, interv, -1));
+       
+       dtA = new Date(2000, 0, 1);
+       dtB = new Date(1999, 11, 31);
+       t.is(dtB, dojo.date.add(dtA, interv, -1));
+       
+       interv = "weekday";
+       // Sat, Jan 1
+       dtA = new Date(2000, 0, 1);
+       // Should be Mon, Jan 3
+       dtB = new Date(2000, 0, 3);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Mon, Jan 3
+       dtB = new Date(2000, 0, 3);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Fri, Jan 7
+       dtB = new Date(2000, 0, 7);
+       t.is(dtB, dojo.date.add(dtA, interv, 5));
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Mon, Jan 10
+       dtB = new Date(2000, 0, 10);
+       t.is(dtB, dojo.date.add(dtA, interv, 6));
+       
+       // Mon, Jan 3
+       dtA = new Date(2000, 0, 3);
+       // Should be Mon, Jan 17
+       dtB = new Date(2000, 0, 17);
+       t.is(dtB, dojo.date.add(dtA, interv, 10));
+       
+       // Sat, Jan 8
+       dtA = new Date(2000, 0, 8);
+       // Should be Mon, Jan 3
+       dtB = new Date(2000, 0, 3);
+       t.is(dtB, dojo.date.add(dtA, interv, -5));
+       
+       // Sun, Jan 9
+       dtA = new Date(2000, 0, 9);
+       // Should be Wed, Jan 5
+       dtB = new Date(2000, 0, 5);
+       t.is(dtB, dojo.date.add(dtA, interv, -3));
+       
+       // Sun, Jan 23
+       dtA = new Date(2000, 0, 23);
+       // Should be Fri, Jan 7
+       dtB = new Date(2000, 0, 7);
+       t.is(dtB, dojo.date.add(dtA, interv, -11));
+       
+       interv = "hour";
+       dtA = new Date(2000, 0, 1, 11);
+       dtB = new Date(2000, 0, 1, 12);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       dtA = new Date(2001, 9, 28, 0);
+       dtB = new Date(dtA.getTime() + (60 * 60 * 1000));
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       dtA = new Date(2001, 9, 28, 23);
+       dtB = new Date(2001, 9, 29, 0);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       dtA = new Date(2001, 11, 31, 23);
+       dtB = new Date(2002, 0, 1, 0);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       interv = "minute";
+       dtA = new Date(2000, 11, 31, 23, 59);
+       dtB = new Date(2001, 0, 1, 0, 0);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       dtA = new Date(2000, 11, 27, 12, 2);
+       dtB = new Date(2000, 11, 27, 13, 2);
+       t.is(dtB, dojo.date.add(dtA, interv, 60));
+       
+       interv = "second";
+       dtA = new Date(2000, 11, 31, 23, 59, 59);
+       dtB = new Date(2001, 0, 1, 0, 0, 0);
+       t.is(dtB, dojo.date.add(dtA, interv, 1));
+
+       dtA = new Date(2000, 11, 27, 8, 10, 59);
+       dtB = new Date(2000, 11, 27, 8, 11, 59);
+       t.is(dtB, dojo.date.add(dtA, interv, 60));
+       
+       // Test environment JS Date doesn't support millisec?
+       //interv = "millisecond";
+       //
+       //dtA = new Date(2000, 11, 31, 23, 59, 59, 999);
+       //dtB = new Date(2001, 0, 1, 0, 0, 0, 0);
+       //t.is(dtB, dojo.date.add(dtA, interv, 1));
+       //
+       //dtA = new Date(2000, 11, 27, 8, 10, 53, 2);
+       //dtB = new Date(2000, 11, 27, 8, 10, 54, 2);
+       //t.is(dtB, dojo.date.add(dtA, interv, 1000));
+},
+function test_date_diff(t){
+       var dtA = null; // First date to compare
+       var dtB = null; // Second date to compare
+       var interv = ''; // Interval to compare on (e.g., year, month)
+       
+       interv = "year";
+       dtA = new Date(2005, 11, 27);
+       dtB = new Date(2006, 11, 27);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 31);
+       dtB = new Date(2001, 0, 1);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "quarter";
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2001, 2, 1);
+       t.is(4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 1);
+       dtB = new Date(2001, 0, 1);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "month";
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2001, 2, 1);
+       t.is(13, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 1);
+       dtB = new Date(2001, 0, 1);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "week";
+       dtA = new Date(2000, 1, 1);
+       dtB = new Date(2000, 1, 8);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 1, 28);
+       dtB = new Date(2000, 2, 6);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 2, 6);
+       dtB = new Date(2000, 1, 28);
+       t.is(-1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "day";
+       dtA = new Date(2000, 1, 29);
+       dtB = new Date(2000, 2, 1);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 31);
+       dtB = new Date(2001, 0, 1);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       // DST leap -- check for rounding err
+       // This is dependent on US calendar, but
+       // shouldn't break in other locales
+       dtA = new Date(2005, 3, 3);
+       dtB = new Date(2005, 3, 4);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "weekday";
+       dtA = new Date(2006, 7, 3);
+       dtB = new Date(2006, 7, 11);
+       t.is(6, dojo.date.difference(dtA, dtB, interv));
+       
+       // Positive diffs
+       dtA = new Date(2006, 7, 4);
+       dtB = new Date(2006, 7, 11);
+       t.is(5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 5);
+       dtB = new Date(2006, 7, 11);
+       t.is(5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 6);
+       dtB = new Date(2006, 7, 11);
+       t.is(5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 7);
+       dtB = new Date(2006, 7, 11);
+       t.is(4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 7);
+       dtB = new Date(2006, 7, 13);
+       t.is(4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 7);
+       dtB = new Date(2006, 7, 14);
+       t.is(5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 7);
+       dtB = new Date(2006, 7, 15);
+       t.is(6, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 7);
+       dtB = new Date(2006, 7, 28);
+       t.is(15, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 2, 2);
+       dtB = new Date(2006, 2, 28);
+       t.is(18, dojo.date.difference(dtA, dtB, interv));
+       
+       // Negative diffs
+       dtA = new Date(2006, 7, 11);
+       dtB = new Date(2006, 7, 4);
+       t.is(-5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 11);
+       dtB = new Date(2006, 7, 5);
+       t.is(-4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 11);
+       dtB = new Date(2006, 7, 6);
+       t.is(-4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 11);
+       dtB = new Date(2006, 7, 7);
+       t.is(-4, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 13);
+       dtB = new Date(2006, 7, 7);
+       t.is(-5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 14);
+       dtB = new Date(2006, 7, 7);
+       t.is(-5, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 15);
+       dtB = new Date(2006, 7, 7);
+       t.is(-6, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 7, 28);
+       dtB = new Date(2006, 7, 7);
+       t.is(-15, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2006, 2, 28);
+       dtB = new Date(2006, 2, 2);
+       t.is(-18, dojo.date.difference(dtA, dtB, interv));
+
+       // Two days on the same weekend -- no weekday diff
+       dtA = new Date(2006, 7, 5);
+       dtB = new Date(2006, 7, 6);
+       t.is(0, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "hour";
+       dtA = new Date(2000, 11, 31, 23);
+       dtB = new Date(2001, 0, 1, 0);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 31, 12);
+       dtB = new Date(2001, 0, 1, 0);
+       t.is(12, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "minute";
+       dtA = new Date(2000, 11, 31, 23, 59);
+       dtB = new Date(2001, 0, 1, 0, 0);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 1, 28, 23, 59);
+       dtB = new Date(2000, 1, 29, 0, 0);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "second";
+       dtA = new Date(2000, 11, 31, 23, 59, 59);
+       dtB = new Date(2001, 0, 1, 0, 0, 0);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       interv = "millisecond";
+       dtA = new Date(2000, 11, 31, 23, 59, 59, 999);
+       dtB = new Date(2001, 0, 1, 0, 0, 0, 0);
+       t.is(1, dojo.date.difference(dtA, dtB, interv));
+       
+       dtA = new Date(2000, 11, 31, 23, 59, 59, 0);
+       dtB = new Date(2001, 0, 1, 0, 0, 0, 0);
+       t.is(1000, dojo.date.difference(dtA, dtB, interv));
+},
+function test_date_add_diff_year(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       
+       interv = "year";
+       dtA = new Date(2005, 11, 27);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2005, 11, 27);
+       dtB = dojo.date.add(dtA, interv, -1);
+       t.is(dojo.date.difference(dtA, dtB, interv), -1);
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = dojo.date.add(dtA, interv, 5);
+       t.is(dojo.date.difference(dtA, dtB, interv), 5);
+       
+       dtA = new Date(1900, 11, 31);
+       dtB = dojo.date.add(dtA, interv, 30);
+       t.is(dojo.date.difference(dtA, dtB, interv), 30);
+       
+       dtA = new Date(1995, 11, 31);
+       dtB = dojo.date.add(dtA, interv, 35);
+       t.is(dojo.date.difference(dtA, dtB, interv), 35);
+},
+function test_date_add_diff_quarter(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "quarter";
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = dojo.date.add(dtA, interv, 2);
+       t.is(dojo.date.difference(dtA, dtB, interv), 2);
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = dojo.date.add(dtA, interv, 4);
+       t.is(dojo.date.difference(dtA, dtB, interv), 4);
+},
+function test_date_add_diff_month(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "month";
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2000, 0, 31);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2000, 1, 29);
+       dtB = dojo.date.add(dtA, interv, 12);
+       t.is(dojo.date.difference(dtA, dtB, interv), 12);
+},
+function test_date_add_diff_week(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "week";
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+},
+function test_date_add_diff_day(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "day";
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2001, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 365);
+       t.is(dojo.date.difference(dtA, dtB, interv), 365);
+       
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, 366);
+       t.is(dojo.date.difference(dtA, dtB, interv), 366);
+       
+       dtA = new Date(2000, 1, 28);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2001, 1, 28);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       dtA = new Date(2000, 2, 1);
+       dtB = dojo.date.add(dtA, interv, -1);
+       t.is(dojo.date.difference(dtA, dtB, interv), -1);
+       
+       dtA = new Date(2001, 2, 1);
+       dtB = dojo.date.add(dtA, interv, -1);
+       t.is(dojo.date.difference(dtA, dtB, interv), -1);
+       
+       dtA = new Date(2000, 0, 1);
+       dtB = dojo.date.add(dtA, interv, -1);
+       t.is(dojo.date.difference(dtA, dtB, interv), -1);
+},
+function test_date_add_diff_weekday(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "weekday";
+       // Sat, Jan 1
+       dtA = new Date(2000, 0, 1);
+       // Should be Mon, Jan 3
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Mon, Jan 3
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Fri, Jan 7
+       dtB = dojo.date.add(dtA, interv, 5);
+       t.is(dojo.date.difference(dtA, dtB, interv), 5);
+       
+       // Sun, Jan 2
+       dtA = new Date(2000, 0, 2);
+       // Should be Mon, Jan 10
+       dtB = dojo.date.add(dtA, interv, 6);
+       t.is(dojo.date.difference(dtA, dtB, interv), 6);
+       
+       // Mon, Jan 3
+       dtA = new Date(2000, 0, 3);
+       // Should be Mon, Jan 17
+       dtB = dojo.date.add(dtA, interv, 10);
+       t.is(dojo.date.difference(dtA, dtB, interv), 10);
+       
+       // Sat, Jan 8
+       dtA = new Date(2000, 0, 8);
+       // Should be Mon, Jan 3
+       dtB = dojo.date.add(dtA, interv, -5);
+       t.is(dojo.date.difference(dtA, dtB, interv), -5);
+       
+       // Sun, Jan 9
+       dtA = new Date(2000, 0, 9);
+       // Should be Wed, Jan 5
+       dtB = dojo.date.add(dtA, interv, -3);
+       t.is(dojo.date.difference(dtA, dtB, interv), -3);
+       
+       // Sun, Jan 23
+       dtA = new Date(2000, 0, 23);
+       // Should be Fri, Jan 7
+       dtB = dojo.date.add(dtA, interv, -11);
+       t.is(dojo.date.difference(dtA, dtB, interv), -11);
+},
+function test_date_add_diff_hour(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "hour";
+       dtA = new Date(2000, 0, 1, 11);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+
+       dtA = new Date(2001, 9, 28, 0);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+
+       dtA = new Date(2001, 9, 28, 23);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+
+       dtA = new Date(2001, 11, 31, 23);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+},
+function test_date_add_diff_minute(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       interv = "minute";
+       dtA = new Date(2000, 11, 31, 23, 59);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+
+       dtA = new Date(2000, 11, 27, 12, 2);
+       dtB = dojo.date.add(dtA, interv, 60);
+       t.is(dojo.date.difference(dtA, dtB, interv), 60);
+},
+function test_date_add_diff_second(t){
+       var interv = ''; // Interval (e.g., year, month)
+       var dtA = null; // Date to increment
+       var dtB = null; // Expected result date
+       console.debug("second");
+       interv = "second";
+       dtA = new Date(2000, 11, 31, 23, 59, 59);
+       dtB = dojo.date.add(dtA, interv, 1);
+       t.is(dojo.date.difference(dtA, dtB, interv), 1);
+
+       dtA = new Date(2000, 11, 27, 8, 10, 59);
+       dtB = dojo.date.add(dtA, interv, 60);
+       t.is(dojo.date.difference(dtA, dtB, interv), 60);
+       
+       // Test environment JS Date doesn't support millisec?
+       //interv = "millisecond";
+       //
+       //dtA = new Date(2000, 11, 31, 23, 59, 59, 999);
+       //dtB = dojo.date.add(dtA, interv, 1);
+       //t.is(dojo.date.difference(dtA, dtB, interv), 1);
+       //
+       //dtA = new Date(2000, 11, 27, 8, 10, 53, 2);
+       //dtB = dojo.date.add(dtA, interv, 1000);
+       //t.is(dojo.date.difference(dtA, dtB, interv), 1000);
+}
+       ]
+);
+
+dojo.require("tests.date.locale");
+dojo.require("tests.date.stamp");
+
+}