dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
479 lines (429 loc) • 20.5 kB
JavaScript
dojo.provide("dojox.date.tests.hebrew.Date");
dojo.require("dojox.date.hebrew");
dojo.require("dojox.date.hebrew.Date");
dojo.require("dojox.date.hebrew.locale");
dojo.require("dojo.date.locale");
dojo.requireLocalization("dojo.cldr", "gregorian");
dojo.requireLocalization("dojo.cldr", "hebrew");
tests.register("dojox.date.tests.hebrew.Date",
[
{
// see tests for dojo.date.locale for setup info
name: "setup",
setUp: function(){
var partLocaleList = ["he", "en"];
dojo.forEach(partLocaleList, function(locale){
dojo.requireLocalization("dojo.cldr", "gregorian", locale);
dojo.requireLocalization("dojo.cldr", "hebrew", locale);
});
},
runTest: function(t){
},
tearDown: function(){
//Clean up bundles that should not exist if
//the test is re-run.
// delete dojo.cldr.nls.gregorian;
// delete dojo.cldr.nls.hebrew;
}
},
{
name: "compare",
runTest: function(t){
var dateHebrew = new dojox.date.hebrew.Date(5769, 5, 16);
var dateHebrew1 = new dojox.date.hebrew.Date(5758, 10, 25);
t.is(1, dojo.date.compare(dateHebrew.toGregorian(), dateHebrew1.toGregorian()));
t.is(-1, dojo.date.compare(dateHebrew1.toGregorian(), dateHebrew.toGregorian()));
}
},
{
name: "toGregorian_fromGregorian",
runTest: function(t){
//Hebrew month names
var TISHRI = 0 , HESHVAN = 1, KISLEV = 2, TEVET = 3, SHVAT = 4 , ADARI = 5, ADAR = 6, NISAN= 7 , IYAR= 8 , SIVAN= 9 , TAMMUZ = 10, AV = 11 , ELUL = 12;
//hebrew.Date month names
//Gregorian Date month 1-12 - for readability
var dateTable = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[], //incorrect, not leap year , the month is set to ADAR
[],
[],
[],
[],
[],
[],
[],
[],
[]
];
var dateHebrew, dateGregorian;
//toGregorian
dojo.forEach(dateTable, function(d, i){
dateHebrew = new dojox.date.hebrew.Date(d[3], d[4], d[5]);
dateGregorian = dateHebrew.toGregorian();
t.is(0, dojo.date.compare(new Date(d[0], d[1]-1, d[2]), dateGregorian, "date"));
});
//fromGregorian
dojo.forEach(dateTable, function(d, i){
dateGregorian = new Date(d[0], d[1]-1, d[2]);
dateHebrew = new dojox.date.hebrew.Date(dateGregorian);
testHebrew = new dojox.date.hebrew.Date(d[3], d[4], d[5]);
t.is(0, dojo.date.compare(testHebrew.toGregorian() , dateHebrew.toGregorian(), "date"));
});
//test for invalid date, toGregorian and fromGregorian should return invalid date
var invDate = new Date("");
var hDate = new dojox.date.hebrew.Date(invDate);
var hebrInvDate = new dojox.date.hebrew.Date("");
t.is(true, isNaN(hDate));
t.is(true, isNaN(hDate.toGregorian()));
t.is(true, isNaN(hebrInvDate));
}
},
{
name: "getDay",
runTest: function(t){
var dateTable = [
[],
[],
[],
[],
[],
[],
[]
];
dojo.forEach(dateTable, function(d, i){
var date = new dojox.date.hebrew.Date(d[0], d[1], d[2]);
t.is(d[3], date.getDay());
});
}
},
{
name: "getDaysInHebrewMonth",
runTest: function(t){
var dateTable = [
[], //HESHVAN
[], //HESHVAN
[], //ADARI
[], //ADARI
[], //KISLEV,
[] //KISLEV,
];
dojo.forEach(dateTable, function(d, i){
var date = new dojox.date.hebrew.Date(d[0], d[1], 1);
t.is(d[2], dojox.date.hebrew.getDaysInMonth(date));
});
}
},
{
name: "add_difference",
runTest: function(t){
// 5766, 5767, 5769, 5770, 5772, 5772, 5773, 5775 - non leap
// 5765, 5768, 5771, 5774 - leap
//Hebrew month names
var TISHRI = 0 , HESHVAN = 1, KISLEV = 2, TEVET = 3, SHVAT = 4 , ADARI = 5, ADAR = 6, NISAN= 7 , IYAR= 8 , SIVAN= 9 , TAMMUZ = 10, AV = 11 , ELUL = 12;
var start = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
];
var add =[24, 60, 12, -24,-24, 2, -2, 2, -3, 1, -1];
var dateHebStart, dateHebEnd, res, dateHebRes;
dojo.forEach(start, function(s, i){
dateHebStart = new dojox.date.hebrew.Date( s[0], s[1], 1);
dateHebRes = dojox.date.hebrew.add(dateHebStart, "month", add[i]);
t.is(0, dateHebRes.getMonth() - s[3]);
t.is(0, dateHebRes.getFullYear() - s[2]);
});
//month difference
dojo.forEach(start, function(s, i){
dateHebRes = new dojox.date.hebrew.Date( s[2], s[3], 1);
dateHebStart = new dojox.date.hebrew.Date( s[0], s[1], 1);
t.is(add[i], dojox.date.hebrew.difference(dateHebStart , dateHebRes, "month"));
});
//different fields
var fields = [
[ 5757, TISHRI, 1, "year", 10, 5767, TISHRI, 1 ],
[ 5758, KISLEV, 30, "year", -1, 5757, KISLEV, 29 ],
[ 5769, NISAN, 30, "year", -1, 5768, NISAN, 30 ],
[ 5768, ADARI, 30, "year", 1, 5769, ADAR, 29 ],
[ 5757, TISHRI, 30, "month", 1, 5757, HESHVAN, 29 ],
[ 5762, AV, 30, "day", 1, 5762, ELUL, 1 ],
[ 5762, ELUL, 1, "day", -1, 5762, AV, 30 ],
[ 5769, TAMMUZ, 27, "day", 10, 5769, AV, 8],
[ 5757, KISLEV, 1, "day", 30, 5757, TEVET, 2 ], // 29-day month
[ 5758, KISLEV, 1, "day", 31, 5758, TEVET, 2 ], // 30-day month
[ 5769, AV, 27, "day", 10, 5769, ELUL, 7],
[ 5769, ELUL, 27, "day", 10, 5770, TISHRI, 8],
[ 5769, TAMMUZ, 27, "day", -30, 5769, SIVAN, 27],
[ 5769, AV, 1, "day", -60, 5769, IYAR, 29],
[ 5769, SHVAT, 30, "day", 1, 5769, ADAR, 1],
[ 5769, TAMMUZ, 27, "weekday", 10, 5769, AV, 12],
[ 5769, KISLEV, 1, "weekday", 1, 5769, KISLEV, 3],
[ 5769, NISAN, 1, "weekday", -5, 5769, ADAR, 23],
[ 5769, AV, 7, "weekday", -10, 5769, TAMMUZ, 22],
[ 5769, AV, 12, "weekday", -6, 5769, AV, 2],
[ 5769, AV, 11, "weekday", -6, 5769, AV, 2],
[ 5769, AV, 10, "weekday", -6, 5769,AV, 2],
[ 5769, AV, 11, "weekday", 6, 5769, AV, 19],
[ 5769, AV, 10, "weekday", 6, 5769, AV, 19],
[ 5769, AV, 11, "weekday", 12, 5769, AV, 27],
[ 5769, AV, 10, "weekday", 12, 5769, AV, 27],
[ 5769, AV, 9, "weekday", 12, 5769, AV, 27],
[ 5769, NISAN, 29, "week", 1, 5769, IYAR, 6],
[ 5771, NISAN, 1, "week", -4, 5771, ADAR, 2],
[ 5771, NISAN, 1, "week", -8, 5771, ADARI, 4],
[ 5769, AV, 17, "week", 2, 5769, ELUL, 1],
[ 5769, AV, 18, "week", -1, 5769, AV, 11] ];
//test add
dojo.forEach( fields, function(f, i){
dateHebStart = new dojox.date.hebrew.Date( f[0], f[1], f[2]);
dateHebEnd = dojox.date.hebrew.add(dateHebStart, f[3], f[4]);
dateHebRes = new dojox.date.hebrew.Date( f[5], f[6], f[7]);
t.is(0, dojo.date.compare (dateHebRes.toGregorian(), dateHebEnd.toGregorian()));
if(f[3] == "week"){
t.is(dateHebStart.getDay(), dateHebEnd.getDay());
}
});
//test difference
dojo.forEach( fields, function(f, i){
dateHebStart = new dojox.date.hebrew.Date( f[0], f[1], f[2]);
dateHebRes = new dojox.date.hebrew.Date( f[5], f[6], f[7]);
res = dojox.date.hebrew.difference(dateHebStart, dateHebRes, f[3]);
t.is(f[4], res);
});
// check that setMonth (getMonth + d) is not the same as add month (d), due to adar
dateHebStart = new dojox.date.hebrew.Date( 5769, KISLEV, 1);
var dateHebAdd = dojox.date.hebrew.add(dateHebStart, "month", 4);
dateHebStart.setMonth(dateHebStart.getMonth() +4);
t.assertFalse(dateHebStart.getMonth() == dateHebAdd.getMonth());
}
},
{
name: "consistency_of_add_and_difference",
runTest: function(t){
var dateHebrew = new dojox.date.hebrew.Date(5769, 4, 16);
var dateHebrewLeap = new dojox.date.hebrew.Date(5768, 5, 16);
// var m = ["TISHRI " , "HESHVAN", "KISLEV", "TEVET", "SHVAT" , "ADARI", "ADAR", "NISAN" , "IYAR" , "SIVAN" , "TAMMUZ", "AV" , "ELUL"];
var amounts = [2, 5, 6, 7, 8,12, 18,20, 24, 50, -3, -4, -5, -6, -7, -8, -9, -10, -50, 200, -200];
var dateHebrewAdd, dateHebrewAddLeap;
dojo.forEach( amounts, function(amount, i){
dateHebrewAdd = dojox.date.hebrew.add(dateHebrew, "month", amount);
dateHebrewAddLeap = dojox.date.hebrew.add(dateHebrewLeap, "month", amount);
t.is(dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "month"), amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dateHebrewAddLeap, "month"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "year", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "year"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "year", amount), "year"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "week", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "week"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "week", amount), "week"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "weekday", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "weekday"));
dateHebrewAddLeap = dojox.date.hebrew.add(dateHebrewLeap, "weekday", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "weekday", amount), "weekday"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "day", amount)
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "day"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "day", amount), "day"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "hour", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "hour"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "hour", amount), "hour"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "minute", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "minute"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "minute", amount), "minute"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "second", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "second"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "second", amount), "second"));
dateHebrewAdd= dojox.date.hebrew.add(dateHebrew, "millisecond", amount);
t.is(amount, dojox.date.hebrew.difference(dateHebrew, dateHebrewAdd, "millisecond"));
t.is(amount, dojox.date.hebrew.difference(dateHebrewLeap, dojox.date.hebrew.add(dateHebrewLeap, "millisecond", amount), "millisecond"));
});
var dateHebrewDiff = new dojox.date.hebrew.Date(5769, 4, 17);
t.is(1, dojox.date.hebrew.difference(dateHebrew, dateHebrewDiff));
}
},
{
name: "getMonth_setMonth",
runTest: function(t){
var nonLeap = "5766, 5767, 5769, 5770, 5772, 5772, 5773, 5775";
var leap = "5765, 5768, 5771, 5774";
// ELUL - 12, ADAR -6, ADARI -5
var dateHebrew = new dojox.date.hebrew.Date(5765, 1, 1);
for (var year = 5766; year < 5866; year++){
dateHebrew.setFullYear(year);
t.is(year,dateHebrew.getFullYear());
dateHebrew.setMonth(12);
t.is(12,dateHebrew.getMonth());
dateHebrew.setMonth(6);
t.is(6,dateHebrew.getMonth());
if (leap.match(year)){
dateHebrew.setMonth(5);
t.is(5,dateHebrew.getMonth());
}
if (nonLeap.match(year)){
dateHebrew.setMonth(5); // non leap year does not have ADARI, set month to ADAR
t.is(6,dateHebrew.getMonth());
}
}
}
},
{
name: "hebrew_numerals",
runTest: function(t){
var i, hebrNum;
for ( i = 1 ; i <= 30; i++){
//test day hebrew numerals
t.is(dojox.date.hebrew.numerals.parseDayHebrewLetters(dojox.date.hebrew.numerals.getDayHebrewLetters(i)), i);
t.is(dojox.date.hebrew.numerals.parseDayHebrewLetters(dojox.date.hebrew.numerals.getDayHebrewLetters(i, true)), i); //with geresh
//test month hebrew numerals
if ( i <= 13){
t.is(dojox.date.hebrew.numerals.parseMonthHebrewLetters(dojox.date.hebrew.numerals.getMonthHebrewLetters(i-1)), i-1);
}
}
//test year hebrew numerals
for ( i = 5001; i < 6000; i+=27){
t.is(dojox.date.hebrew.numerals.parseYearHebrewLetters(dojox.date.hebrew.numerals.getYearHebrewLetters(i)), i);
}
//hebrew numerals are not relevant for year < 5001 or > 5999
t.assertFalse (dojox.date.hebrew.numerals.parseYearHebrewLetters(dojox.date.hebrew.numerals.getYearHebrewLetters(2345)) == 2345);
t.assertFalse (dojox.date.hebrew.numerals.parseYearHebrewLetters(dojox.date.hebrew.numerals.getYearHebrewLetters(6789)) == 6789);
}
},
{
name: "parse_and_format",
runTest: function(t){
//test Hebrew and English locale
var dates = [
[],
[],
[], // "absolute" index of month, non-leap year
[],
[]
];
var dateHebrew, dateHebrew1;
dojo.forEach(dates, function(date, i){
dateHebrew = new dojox.date.hebrew.Date(date[0], date[1], date[2]);
var options = [{formatLength:'full', locale:'he'},{formatLength:'long', locale:'he'},{formatLength:'medium', locale:'he'},{formatLength:'short', locale:'he'},
{formatLength:'full', locale:'en'},{formatLength:'long', locale:'en'},{formatLength:'medium', locale:'en'},{formatLength:'short', locale:'en'}];
dojo.forEach(options, function(opt, i){
str= dojox.date.hebrew.locale.format(dateHebrew, opt);
var option = "{" +opt+", locale:'he'}";
dateHebrew1 = dojox.date.hebrew.locale.parse(str, opt);
t.is(0, dojo.date.compare(dateHebrew.toGregorian(), dateHebrew1.toGregorian(), 'date'));
});
var pattern = ['d M yy', 'dd/MM/yy h:m:s', 'dd#MM#yy HH$mm$ss', 'dd MMMM yyyy'];
dojo.forEach( pattern, function(pat, i){
options = {datePattern:pat, selector:'date', locale:'he'};
str= dojox.date.hebrew.locale.format(dateHebrew, options);
dateHebrew1 = dojox.date.hebrew.locale.parse(str, options);
t.is(0, dojo.date.compare(dateHebrew.toGregorian(), dateHebrew1.toGregorian(), 'date'));
});
});
dateHebrew = new dojox.date.hebrew.Date(5769, 6, 3, 15, 3, 59);
pattern = 'HH$mm$ss';
options = {timePattern:pattern, selector:'time'};
str= dojox.date.hebrew.locale.format(dateHebrew, options);
dateHebrew1 = dojox.date.hebrew.locale.parse(str, options);
var gregDate = dojo.date.locale.parse(str, options);
t.is(0, dojo.date.compare(gregDate, dateHebrew1.toGregorian(), 'time'));
pattern = "h:m:s";
options = {timePattern:pattern, selector:'time'};
str= dojox.date.hebrew.locale.format(dateHebrew, options);
t.is(str, "3:3:59");
}
},
{
name: "addMilliseconds",
runTest: function(t){
var hebrewDates = [
[],
[],
[], // "absolute" index of month, non-leap year
[],
[]
];
var dates = [
[],
[],
[], // "absolute" index of month, non-leap year
[],
[]
];
var traceAttributes = function(date){
console.log("getHours():" + date.getHours()+" getMinutes():"+date.getMinutes()+" getSeconds():"+date.getSeconds()+" getMilliseconds():"+date.getMilliseconds());
};
var dateHebrew, date2;
dojo.forEach(hebrewDates, function(date, i){
dateHebrew = new dojox.date.hebrew.Date(date[0], date[1], date[2], date[3], date[4]);
date2 = new Date(dates[i][0], dates[i][1], dates[i][2], dates[i][3], dates[i][4]);
var newHebrewDate = dojox.date.hebrew.add(dateHebrew, "millisecond", 1200);
var newDate = dojo.date.add(date2, "millisecond", 1200);
t.is(newHebrewDate.getHours(), newDate.getHours(), "Hours are different");
t.is(newHebrewDate.getMinutes(), newDate.getMinutes(), "Minutes are different");
t.is(newHebrewDate.getSeconds(), newDate.getSeconds(), "Seconds are different");
t.is(newHebrewDate.getMilliseconds(), newDate.getMilliseconds(), "Milliseconds are different");
//traceAttributes(newHebrewDate);
newHebrewDate = dojox.date.hebrew.add(dateHebrew, "millisecond", 12022);
newDate = dojo.date.add(date2, "millisecond", 12022);
t.is(newHebrewDate.getHours(), newDate.getHours(), "Hours are different");
t.is(newHebrewDate.getMinutes(), newDate.getMinutes(), "Minutes are different");
t.is(newHebrewDate.getSeconds(), newDate.getSeconds(), "Seconds are different");
t.is(newHebrewDate.getMilliseconds(), newDate.getMilliseconds(), "Milliseconds are different");
//traceAttributes(newHebrewDate);
newHebrewDate = dojox.date.hebrew.add(dateHebrew, "millisecond", 120422);
newDate = dojo.date.add(date2, "millisecond", 120422);
t.is(newHebrewDate.getHours(), newDate.getHours(), "Hours are different");
t.is(newHebrewDate.getMinutes(), newDate.getMinutes(), "Minutes are different");
t.is(newHebrewDate.getSeconds(), newDate.getSeconds(), "Seconds are different");
t.is(newHebrewDate.getMilliseconds(), newDate.getMilliseconds(), "Milliseconds are different");
//traceAttributes(newHebrewDate);
newHebrewDate = dojox.date.hebrew.add(dateHebrew, "millisecond", 1204422);
newDate = dojo.date.add(date2, "millisecond", 1204422);
t.is(newHebrewDate.getHours(), newDate.getHours(), "Hours are different");
t.is(newHebrewDate.getMinutes(), newDate.getMinutes(), "Minutes are different");
t.is(newHebrewDate.getSeconds(), newDate.getSeconds(), "Seconds are different");
t.is(newHebrewDate.getMilliseconds(), newDate.getMilliseconds(), "Milliseconds are different");
//traceAttributes(newHebrewDate);
});
}
}
]
);