dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
380 lines (314 loc) • 16.1 kB
JavaScript
define([
'intern!object',
'intern/chai!assert',
'../../../date/locale',
'dojo/_base/kernel',
'dojo/_base/array',
'dojo/i18n',
'dojo/Deferred'
], function (registerSuite, assert, locale, kernel, array, i18n, Deferred) {
/* jshint maxlen: false */
function assertDates(date1, date2) {
assert.ok(date1, 'Date 1 does not have a value');
assert.ok(date2, 'Date 2 does not have a value.');
assert.instanceOf(date1, Date);
assert.instanceOf(date2, Date);
assert.equal(date1.getTime(), date2.getTime());
}
registerSuite({
name: 'dojo/date/locale',
setup: (function () {
function loadAsync(partLocaleList) {
var dfd = new Deferred();
var deps = array.map(partLocaleList, function (locale) {
return i18n.getL10nName('dojo/cldr', 'gregorian', locale);
});
require(deps, dfd.resolve);
return dfd;
}
function loadSync(partLocaleList) {
array.forEach(partLocaleList, function (locale) {
/* global dojo */
dojo.requireLocalization('dojo.cldr', 'gregorian', locale);
});
}
return function () {
var partLocaleList = ['en-us', 'fr-fr', 'es', 'de-at', 'ja-jp', 'zh-cn'];
if (kernel.isAsync) {
return loadAsync(partLocaleList);
} else { // tests for the v1.x loader/i18n machinery
loadSync(partLocaleList);
}
};
})(),
'.isWeekend': function () {
var thursday = new Date(2006, 8, 21);
var friday = new Date(2006, 8, 22);
var saturday = new Date(2006, 8, 23);
var sunday = new Date(2006, 8, 24);
var monday = new Date(2006, 8, 25);
assert.isFalse(locale.isWeekend(thursday, 'en-us'));
assert.isFalse(locale.isWeekend(friday, 'en-us'));
assert.isTrue(locale.isWeekend(saturday, 'en-us'));
assert.isTrue(locale.isWeekend(sunday, 'en-us'));
assert.isFalse(locale.isWeekend(monday, 'en-us'));
},
'.format': (function () {
var date = new Date(2006, 7, 11, 0, 55, 12, 345);
return {
'full': function () {
assert.equal(locale.format(date, {formatLength: 'full', selector: 'date', locale: 'en-us'}), 'Friday, August 11, 2006');
assert.equal(locale.format(date, {formatLength: 'full', selector: 'date', locale: 'fr-fr'}), 'vendredi 11 ao\xFBt 2006');
assert.equal(locale.format(date, {formatLength: 'full', selector: 'date', locale: 'de-at'}), 'Freitag, 11. August 2006');
assert.equal(locale.format(date, {formatLength: 'full', selector: 'date', locale: 'ja-jp'}), '2006\u5E748\u670811\u65E5\u91D1\u66DC\u65E5');
},
'short': function () {
assert.equal(locale.format(date, {formatLength: 'short', selector: 'date', locale: 'en-us'}), '8/11/06');
assert.equal(locale.format(date, {formatLength: 'short', selector: 'date', locale: 'fr-fr'}), '11/08/2006');
assert.equal(locale.format(date, {formatLength: 'short', selector: 'date', locale: 'de-at'}), '11.08.06');
assert.equal(locale.format(date, {formatLength: 'short', selector: 'date', locale: 'ja-jp'}), '2006/08/11');
},
'time': function () {
assert.equal(locale.format(date, {datePattern: 'E', selector: 'date'}), '6');
assert.equal(locale.format(date, {selector: 'date', datePattern: 'EEE, MMM d, yyyy G', locale:'en-us' }), 'Fri, Aug 11, 2006 AD');
assert.equal(locale.format(date, {formatLength: 'short', selector: 'time', locale: 'en-us'}), '12:55 AM');
assert.equal(locale.format(date, {timePattern: 'h:m:s', selector: 'time'}), '12:55:12');
assert.equal(locale.format(date, {timePattern: 'h:m:s.SS', selector: 'time'}), '12:55:12.35');
assert.equal(locale.format(date, {timePattern: 'k:m:s.SS', selector: 'time'}), '24:55:12.35');
assert.equal(locale.format(date, {timePattern: 'H:m:s.SS', selector: 'time'}), '0:55:12.35');
assert.equal(locale.format(date, {timePattern: 'K:m:s.SS', selector: 'time'}), '0:55:12.35');
assert.equal(locale.format(date, {formatLength: 'full', selector: 'time', locale: 'zh-cn'}).replace(/^.*(\u4e0a\u5348.*)/, '$1'), '\u4e0a\u534812:55:12');
},
'date': function () {
var options = {datePattern: 'ddMMyyyy', selector: 'date'};
assert.equal(locale.format(date, options), '11082006');
options = {datePattern: 'hh \'o\'\'clock\' a', selector: 'date', locale: 'en'};
assert.equal(locale.format(date, options), '12 o\'clock AM');
options = {datePattern: 'dd/MM/yyyy', timePattern: 'hh:mma', locale: 'en', am: 'am', pm: 'pm'};
assert.equal(locale.format(date, options), '11/08/2006, 12:55am');
}
};
}()),
'.parse': (function () {
var AUG_11_2006 = new Date(2006, 7, 11, 0);
var AUG_11_2006_12_30_AM = new Date(2006, 7, 11, 0, 30);
var AUG_11_2006_12_30_PM = new Date(2006, 7, 11, 12, 30);
return {
// in the en locale the date format is M/d/yy
// the time format is M/d/yy h:mm a
'short format': {
'leading zero month': function () {
assertDates(locale.parse('08/11/06', {formatLength: 'short', selector: 'date', locale: 'en'}), AUG_11_2006);
},
'single digit month': function () {
assertDates(locale.parse('8/11/06', {formatLength: 'short', selector: 'date', locale: 'en'}), AUG_11_2006);
},
'tolerate four digit year': function () {
assertDates(locale.parse('8/11/2006', {formatLength: 'short', selector: 'date', locale: 'en'}), AUG_11_2006);
},
'four digit year in strict mode returns null': function () {
assert.isNull(locale.parse('8/11/2006', {formatLength: 'short', selector: 'date', locale: 'en', strict: true}));
},
'upper case PM in time': function () {
assertDates(locale.parse('08/11/06, 12:30 PM', {formatLength: 'short', locale: 'en'}, 'PM'), AUG_11_2006_12_30_PM);
},
'lower case pm in time': function () {
assertDates(locale.parse('08/11/06, 12:30 pm', {formatLength: 'short', locale: 'en'}, 'pm'), AUG_11_2006_12_30_PM);
},
'lower case pm fails in strict mode': function () {
assert.isNull(locale.parse('8/11/06, 12:30 pm', {formatLength: 'short', locale: 'en', strict: true}));
},
'upper case PM passes in strict mode': function () {
assert.ok(locale.parse('8/11/06, 12:30 PM', {formatLength: 'short', locale: 'en', strict: true}));
},
'upper case AM in time': function () {
assertDates(locale.parse('08/11/06, 12:30 AM', {formatLength: 'short', locale: 'en'}, 'AM'), AUG_11_2006_12_30_AM);
}
},
// in the en locale the format is MMM d, yyyy
'medium format': {
'basic usage': function () {
assertDates(locale.parse('Aug 11, 2006', {formatLength: 'medium', selector: 'date', locale: 'en'}), AUG_11_2006);
},
'tolerate peroid in month abbreviation': function () {
assertDates(locale.parse('Aug. 11, 2006', {formatLength: 'medium', selector: 'date', locale: 'en'}), AUG_11_2006);
},
'period in month abbreviation returns null in strict mode': function () {
assert.isNull(locale.parse('Aug. 11, 2006', {formatLength: 'medium', selector: 'date', locale: 'en', strict: true}));
}
},
// in the en locale the format is MMMM d, yyyy
'long format': {
'basic usage': function () {
assertDates(locale.parse('August 11, 2006', {formatLength: 'long', selector: 'date', locale: 'en'}), AUG_11_2006);
}
},
// in the en locale the format is EEEE, MMMM d, yyyy
'full format': {
'basic usage': function () {
assertDates(locale.parse('Friday, August 11, 2006', {formatLength: 'full', selector: 'date', locale: 'en'}), AUG_11_2006);
}
},
'date pattern': {
'ddMMyyyy': function () {
assertDates(locale.parse('11082006', {datePattern: 'ddMMyyyy', selector: 'date'}), new Date(2006, 7, 11));
},
'ddMMMyyyy': function () {
assertDates(locale.parse('31Aug2006', {datePattern: 'ddMMMyyyy', selector: 'date', locale: 'en'}), new Date(2006, 7, 31));
},
'DDD': function () {
assertDates(locale.parse('007', {datePattern: 'DDD', selector: 'date'}), new Date(1970, 0, 7));
assertDates(locale.parse('031', {datePattern: 'DDD', selector: 'date'}), new Date(1970, 0, 31));
assertDates(locale.parse('100', {datePattern: 'DDD', selector: 'date'}), new Date(1970, 3, 10));
}
},
'de locale': function () {
assertDates(locale.parse('11.08.06', {formatLength: 'short', selector: 'date', locale: 'de'}), AUG_11_2006);
assert.isNull(locale.parse('11.8/06', {formatLength: 'short', selector: 'date', locale: 'de'}));
assert.isNull(locale.parse('11.8x06', {formatLength: 'short', selector: 'date', locale: 'de'}));
assert.isNull(locale.parse('11.0.06', {formatLength: 'short', selector: 'date', locale: 'de'}));
assert.isNull(locale.parse('11.13.06', {formatLength: 'short', selector: 'date', locale: 'de'}));
assert.isNull(locale.parse('32.08.06', {formatLength: 'short', selector: 'date', locale: 'de'}));
},
'es locale': {
'short format': {
'leading zero month': function () {
assertDates(locale.parse('11/08/06', {formatLength: 'short', selector: 'date', locale: 'es'}), AUG_11_2006);
},
'single digit month': function () {
assertDates(locale.parse('11/8/06', {formatLength: 'short', selector: 'date', locale: 'es'}), AUG_11_2006);
},
'tolerate four digit year': function () {
assertDates(locale.parse('11/8/2006', {formatLength: 'short', selector: 'date', locale: 'es'}), AUG_11_2006);
},
'four digit year in strict mode returns null': function () {
assert.isNull(locale.parse('11/8/2006', {formatLength: 'short', selector: 'date', locale: 'es', strict: true}));
}
},
'long format': {
'basic usage': function () {
assertDates(locale.parse('11 de agosto de 2006', {formatLength: 'long', selector: 'date', locale: 'es'}), AUG_11_2006);
},
'case-insensitive month': function () {
assertDates(locale.parse('11 de Agosto de 2006', {formatLength: 'long', selector: 'date', locale: 'es'}), AUG_11_2006);
},
'case-insensitive month fails in strict mode': function () {
assert.isNull(locale.parse('Viernes, 11 de agosto de 2006', {formatLength: 'full', selector: 'date', locale: 'es', strict: true}));
}
}
},
//Japanese (ja)
//note: to avoid garbling from non-utf8-aware editors that may touch this file, using the \uNNNN format
//for expressing double-byte chars.
//toshi (year): \u5e74
//getsu (month): \u6708
//nichi (day): \u65e5
//kinyoubi (Friday): \u91d1\u66dc\u65e5
//zenkaku space: \u3000
'ja locale': {
'short format': {
'leading zero month': function () {
assertDates(locale.parse('06/08/11', {formatLength: 'short', selector: 'date', locale: 'ja'}), AUG_11_2006);
},
'single digit month': function () {
assertDates(locale.parse('06/8/11', {formatLength: 'short', selector: 'date', locale: 'ja'}), AUG_11_2006);
},
'tolerate four digit year': function () {
assertDates(locale.parse('2006/8/11', {formatLength: 'short', selector: 'date', locale: 'ja'}), AUG_11_2006);
}
// 'four digit year in strict mode returns null': function () {
// assert.isNull(locale.parse('2006\u5E748\u670811\u65E5', {formatLength: 'short', selector: 'date', locale: 'ja', strict: true}));
// }
},
'medium format': {
'leading zero month': function () {
assertDates(locale.parse('2006/08/11', {formatLength: 'medium', selector: 'date', locale: 'ja'}), AUG_11_2006);
},
'single digit month': function () {
assertDates(locale.parse('2006/8/11', {formatLength: 'medium', selector: 'date', locale: 'ja'}), AUG_11_2006);
}
},
'long format': {
'basic usage': function () {
assertDates(locale.parse('2006\u5e748\u670811\u65e5', {formatLength: 'long', selector: 'date', locale: 'ja'}), AUG_11_2006);
}
},
'full format': {
'basic usage': function () {
assertDates(locale.parse('2006\u5e748\u670811\u65e5\u91d1\u66dc\u65e5', {formatLength: 'full', selector: 'date', locale: 'ja'}), AUG_11_2006);
}
}
},
'fr-fr locale': {
'medium format': {
'tolerance for abbreviations': function () {
assertDates(locale.parse('11 avr 06', { formatLength: 'medium', selector: 'date', locale: 'fr-fr' }), new Date(2006, 3, 11, 0));
},
'round trip': function () {
var options = { formatLength: 'medium', selector: 'date', locale: 'fr-fr' };
assertDates(locale.parse(locale.format(AUG_11_2006, options), options), AUG_11_2006);
}
}
},
'he locale': {
'basic usage via roundtrip': function () {
var options = {locale: 'he', formatLength: 'full', selector: 'date'};
assert.ok(locale.parse(locale.format(new Date(), options), options));
}
},
'times': function () {
var time = new Date(2006, 7, 11, 12, 30);
var tformat = {selector: 'time', strict: true, timePattern: 'h:mm a', locale: 'en'};
assert.equal(locale.parse('12:30 PM', tformat).getHours(), time.getHours());
assert.equal(locale.parse('12:30 PM', tformat).getMinutes(), time.getMinutes());
},
'format patterns': function () {
var time = new Date(2006, 7, 11, 12, 30);
var tformat;
tformat = {selector: 'time', strict: true, timePattern: 'h \'o\'\'clock\'', locale: 'en'};
assert.equal(locale.parse('12 o\'clock', tformat).getHours(), time.getHours());
tformat = {selector: 'time', strict: true, timePattern: ' \'Hour is\' h', locale: 'en'};
assert.equal(locale.parse(' Hour is 12', tformat).getHours(), time.getHours());
tformat = {selector: 'time', strict: true, timePattern: '\'Hour is\' h', locale: 'en'};
assert.equal(locale.parse('Hour is 12', tformat).getHours(), time.getHours());
},
'invalid dates fail': function () {
assert.isNull(locale.parse('2/29/2007', {formatLength: 'short', selector: 'date', locale: 'en'}));
assert.isNull(locale.parse('4/31/2007', {formatLength: 'short', selector: 'date', locale: 'en'}));
assert.isNull(locale.parse('Decemb 30, 2007', {formatLength: 'long', selector: 'date', locale: 'en'}));
},
'month > 12 fails': function () {
assert.isNull(locale.parse('15/1/2005', {formatLength: 'short', selector: 'date', locale: 'en'}));
},
'day of month > number days in month fails': function () {
assert.isNull(locale.parse('Aug 32, 2006', {formatLength: 'medium', selector: 'date', locale: 'en'}));
},
'pre-epoch date': function () {
var AUG_11_06CE = new Date(2006, 7, 11, 0);
AUG_11_06CE.setFullYear(6); // literally the year 6 C.E.
assertDates(locale.parse('Aug 11, 06', {selector: 'date', datePattern: 'MMM dd, yyyy', locale: 'en', strict: true}), AUG_11_06CE);
},
'dates with no spaces': function () {
assertDates(locale.parse('11Aug2006', {selector: 'date', datePattern: 'ddMMMyyyy', locale: 'en'}), AUG_11_2006);
assertDates(locale.parse('Aug2006', {selector: 'date', datePattern: 'MMMyyyy', locale: 'en'}), new Date(2006, 7, 1));
assertDates(locale.parse('111910', {fullyear: false, datePattern: 'MMddyy', selector: 'date'}), new Date(2010, 10, 19));
}
};
})(),
'._getDayOfYear': function () {
assert.equal(locale._getDayOfYear(new Date(2006, 0, 1)), 1);
assert.equal(locale._getDayOfYear(new Date(2006, 1, 1)), 32);
assert.equal(locale._getDayOfYear(new Date(2007, 2, 13, 0, 13)), 72);
assert.equal(locale._getDayOfYear(new Date(2007, 2, 13, 1, 13)), 72);
},
'._getWeekOfYear': function () {
assert.equal(locale._getWeekOfYear(new Date(2000, 0, 1)), 0);
assert.equal(locale._getWeekOfYear(new Date(2000, 0, 2)), 1);
assert.equal(locale._getWeekOfYear(new Date(2000, 0, 2), 1), 0);
assert.equal(locale._getWeekOfYear(new Date(2007, 0, 1)), 0);
assert.equal(locale._getWeekOfYear(new Date(2007, 0, 1), 1), 1);
assert.equal(locale._getWeekOfYear(new Date(2007, 6, 14)), 27);
assert.equal(locale._getWeekOfYear(new Date(2007, 6, 14), 1), 28);
}
});
});