@qooxdoo/framework
Version:
The JS Framework for Coders
1,138 lines (942 loc) • 35 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Fabian Jakobs (fjakobs)
************************************************************************ */
qx.Class.define("qx.test.util.DateFormat", {
extend: qx.dev.unit.TestCase,
include: qx.dev.unit.MRequirements,
members: {
// result contain an object with what should be expected, the result to test the date against
__dates: [
{ date: new Date(2000, 2, 14), result: {} },
{ date: new Date(2006, 2, 14), result: {} },
{ date: new Date(2007, 3, 14), result: {} },
{ date: new Date(2009, 10, 30), result: {} },
{ date: new Date(2009, 8, 30), result: {} },
{ date: new Date(2011, 3, 15), result: {} },
{ date: new Date(2011, 3, 16), result: {} },
{ date: new Date(2011, 3, 17), result: {} },
{ date: new Date(2011, 0, 26), result: { weekOfYear: 4 } },
{ date: new Date(2011, 0, 1), result: { weekOfYear: 52 } },
{ date: new Date(2011, 0, 3), result: { weekOfYear: 1 } },
{ date: new Date(2011, 0, 10), result: { weekOfYear: 2 } },
{
date: new Date(2011, 9, 3),
result: {
dayOfYear: 276,
era: { abbrev: "AD", fullName: "Anno Domini", narrow: "A" }
}
},
{ date: new Date(2011, 0, 4), result: { dayOfYear: 4, dayOfWeek: 2 } },
{ date: new Date(2011, 0, 4), result: { dayOfYear: 4, dayOfWeek: 2 } },
{
date: new Date(2011, 0, 4, 9, 9, 9),
result: { h_hour: 9, K_hour: 9, H_hour: 9, k_hour: 9 }
},
{
date: new Date(2011, 0, 4, 14, 9, 9),
result: { h_hour: 2, K_hour: 2, H_hour: 14, k_hour: 14 }
},
{
date: new Date(2011, 0, 4, 0, 9, 9),
result: { h_hour: 12, K_hour: 0, H_hour: 0, k_hour: 24 }
},
{
date: new Date(2011, 0, 4, 12, 9, 9),
result: { h_hour: 12, K_hour: 0, H_hour: 12, k_hour: 12 }
},
{
date: new Date(2010, 12, 4, 0, 0, 0),
result: { h_hour: 12, K_hour: 0, H_hour: 0, k_hour: 24 }
},
{
date: new Date(-20, 10, 14),
result: {
era: { abbrev: "BC", fullName: "Before Christ", narrow: "B" }
}
},
{ date: new Date(2012, 4, 24, 11, 49, 57, 1), result: {} },
{ date: new Date(2012, 4, 24, 11, 49, 57, 12), result: {} },
{ date: new Date(2012, 4, 24, 11, 49, 57, 123), result: {} }
],
tearDown() {
qx.locale.Manager.getInstance().resetLocale();
},
__fillNumber(number, minSize) {
var str = "" + number;
while (str.length < minSize) {
str = "0" + str;
}
return str;
},
__getExpectedYear(absYear, formattedSize, yearsign) {
var expectedYear = absYear + "";
if (expectedYear.length < formattedSize) {
for (var j = expectedYear.length; j < formattedSize; j++) {
expectedYear = "0" + expectedYear;
}
}
return yearsign === "-" ? yearsign + expectedYear : expectedYear;
},
_testDateParse(date, formatString, locale) {
var dateFmt = new qx.util.format.DateFormat(formatString, locale);
var dateStr = dateFmt.format(date);
var parsedDate = dateFmt.parse(dateStr);
this.assertEquals(date.getFullYear(), parsedDate.getFullYear());
this.assertEquals(date.getMonth(), parsedDate.getMonth());
this.assertEquals(date.getDate(), parsedDate.getDate());
this.assertEquals(date.getDay(), parsedDate.getDay());
if (formatString.indexOf(":") > 0) {
this.assertEquals(date.getHours(), parsedDate.getHours());
this.assertEquals(date.getMinutes(), parsedDate.getMinutes());
}
dateFmt.dispose();
},
testDateParse() {
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
this._testDateParse(date, "EEEE dd. MMM yyyy", "de_DE");
this._testDateParse(date, "yyyyMMdd", "en_US");
this._testDateParse(date, "ddMMyyyyy", "en_US");
this._testDateParse(date, "yyyyyyyyyddMM", "de_DE");
this._testDateParse(date, "yyMMdd", "en_US");
this._testDateParse(date, "yMMdd", "de_DE");
this._testDateParse(date, "yyyMMdd", "en_US");
this._testDateParse(date, "EEE dd. MM yyyy", "de_DE");
this._testDateParse(date, "EE dd. M yyyy", "de_DE");
this._testDateParse(date, "EEEE dd. MMM yyyy", "fr_FR");
this._testDateParse(date, "MMM d, y h:mm a", "en_US");
this._testDateParse(date, "MMM d, y KK:mm a", "en_US");
this._testDateParse(date, "YYYY/MM/dd", "en_US");
}
},
testInvalidDate() {
// Note:
// * Edge parses even invalid dates and calculates
// from the "overflowing" days and months the
// next "logical" date. In the example below
// the date parsed is "2011-12-02".
this.require(["noEdge"]);
var invalidDate = new Date("2011-11-32");
var dateFmt = new qx.util.format.DateFormat();
this.assertNull(dateFmt.format(invalidDate));
dateFmt.dispose();
},
testWeeksInDateParsing() {
var dateFormat, testDate, parsedDate;
dateFormat = new qx.util.format.DateFormat("EEEE d MMMM yyyy ww");
qx.locale.Manager.getInstance().setLocale("en_US");
testDate = new Date(2014, 0, 1).getTime();
parsedDate = dateFormat.parse("Wednesday 1 January 2014 01");
this.assertIdentical(
testDate,
parsedDate.getTime(),
"ww - 01, should have been parsed"
);
try {
parsedDate = dateFormat.parse("Wednesday 1 January 2014 1");
} catch (e) {
parsedDate = new Date();
}
this.assertNotIdentical(
testDate,
parsedDate.getTime(),
"ww - 1, should not have been parsed"
);
try {
parsedDate = dateFormat.parse("Wednesday 1 January 2014 ");
} catch (e) {
parsedDate = new Date();
}
this.assertNotIdentical(
testDate,
parsedDate.getTime(),
"ww - '', should not have been parsed"
);
testDate = new Date(2014, 4, 6).getTime();
parsedDate = dateFormat.parse("Tuesday 6 May 2014 19");
this.assertIdentical(
testDate,
parsedDate.getTime(),
"ww - 19, should have been parsed"
);
dateFormat = new qx.util.format.DateFormat("EEEE d MMMM yyyy w");
parsedDate = dateFormat.parse("Tuesday 6 May 2014 19");
this.assertIdentical(
testDate,
parsedDate.getTime(),
"w - 19, should have been parsed"
);
testDate = new Date(2014, 0, 1).getTime();
parsedDate = dateFormat.parse("Wednesday 1 January 2014 01");
this.assertIdentical(
testDate,
parsedDate.getTime(),
"w - 01, should have been parsed"
);
parsedDate = dateFormat.parse("Wednesday 1 January 2014 1");
this.assertIdentical(
testDate,
parsedDate.getTime(),
"w - 1, should have been parsed"
);
try {
parsedDate = dateFormat.parse("Wednesday 1 January 2014 ");
} catch (e) {
parsedDate = new Date();
}
this.assertNotIdentical(
testDate,
parsedDate.getTime(),
"w - '', should not have been parsed"
);
},
testTimeZone() {
var date = new qx.test.util.DateMock({
timezoneOffset: -60,
time: 1316000836451
});
var formatStr = "z";
var dateFmt = new qx.util.format.DateFormat(formatStr, "de_DE");
this.assertEquals("GMT+01:00", dateFmt.format(date));
date.dispose();
date = new qx.test.util.DateMock({
timezoneOffset: 60,
time: 1316000836451
});
this.assertEquals("GMT-01:00", dateFmt.format(date));
date.dispose();
date = new qx.test.util.DateMock({
timezoneOffset: -90,
time: 1316000836451
});
this.assertEquals("GMT+01:30", dateFmt.format(date));
date.dispose();
date = new qx.test.util.DateMock({
timezoneOffset: 90,
time: 1316000836451
});
this.assertEquals("GMT-01:30", dateFmt.format(date));
date.dispose();
dateFmt.dispose();
},
testLocalizedDates() {
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var formatStr = qx.locale.Date.getDateFormat("short", "fr_FR");
this._testDateParse(date, formatStr, "fr_FR");
formatStr = qx.locale.Date.getDateFormat("medium", "fr_FR");
this._testDateParse(date, formatStr, "fr_FR");
formatStr = qx.locale.Date.getDateFormat("long", "fr_FR");
this._testDateParse(date, formatStr, "fr_FR");
formatStr = qx.locale.Date.getDateFormat("full", "fr_FR");
this._testDateParse(date, formatStr, "fr_FR");
formatStr = qx.locale.Date.getDateFormat("short", "de_DE");
this._testDateParse(date, formatStr, "de_DE");
var formatStr = qx.locale.Date.getDateFormat("medium", "de_DE");
this._testDateParse(date, formatStr, "de_DE");
var formatStr = qx.locale.Date.getDateFormat("long", "de_DE");
this._testDateParse(date, formatStr, "de_DE");
var formatStr = qx.locale.Date.getDateFormat("full", "de_DE");
this._testDateParse(date, formatStr, "de_DE");
}
},
testPattern_y_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var yearsign = date.getFullYear() > 0 ? "+" : "-";
var absYear = "" + Math.abs(date.getFullYear());
var fullYear = date.getFullYear() + "";
var lastTwoDigitsYear = fullYear.substring(absYear.length - 2);
df = new qx.util.format.DateFormat("yyyy");
var expectedYear = this.__getExpectedYear(absYear, 4, yearsign);
this.assertEquals(expectedYear, df.format(date));
var parsedDate = df.parse(df.format(date));
this.assertEquals(date.getFullYear(), parsedDate.getFullYear());
df.dispose();
// case y
df = new qx.util.format.DateFormat("y");
this.assertEquals(fullYear, df.format(date));
df.dispose();
// case yy
df = new qx.util.format.DateFormat("yy");
this.assertEquals(lastTwoDigitsYear, df.format(date));
df.dispose();
// case yyy
df = new qx.util.format.DateFormat("yyy");
var expectedYear = this.__getExpectedYear(absYear, 3, yearsign);
this.assertEquals(expectedYear, df.format(date));
df.dispose();
// case yyyy
df = new qx.util.format.DateFormat("yyyy");
var expectedYear = this.__getExpectedYear(absYear, 4, yearsign);
this.assertEquals(expectedYear, df.format(date));
df.dispose();
// case yyyyy
df = new qx.util.format.DateFormat("yyyyy");
var expectedYear = this.__getExpectedYear(absYear, 5, yearsign);
this.assertEquals(expectedYear, df.format(date));
df.dispose();
// case yyyyy
df = new qx.util.format.DateFormat("yyyyyyyyyyy");
var expectedYear = this.__getExpectedYear(absYear, 11, yearsign);
this.assertEquals(expectedYear, df.format(date));
df.dispose();
}
},
testPattern_M_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var absYear = "" + Math.abs(date.getFullYear());
var yearsign = date.getFullYear() > 0 ? "+" : "-";
var expectedYear = this.__getExpectedYear(absYear, 4, yearsign);
var month = date.getMonth();
var realMonth = month + 1 + "";
df = new qx.util.format.DateFormat("yyyy/MM");
this.assertEquals(
expectedYear + "/" + this.__fillNumber(realMonth, 2),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/M");
this.assertEquals(expectedYear + "/" + realMonth, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("yyyy/MMM");
this.assertEquals(
expectedYear +
"/" +
qx.locale.Date.getMonthName(
"abbreviated",
month,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/MMMM");
this.assertEquals(
expectedYear +
"/" +
qx.locale.Date.getMonthName("wide", month, locale, "format", true),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/MMMMM");
this.assertEquals(
expectedYear +
"/" +
qx.locale.Date.getMonthName(
"narrow",
month,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
}
},
testPattern_L_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var month = date.getMonth();
var realMonth = month + 1 + "";
df = new qx.util.format.DateFormat("LL");
this.assertEquals(this.__fillNumber(realMonth, 2), df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("L");
this.assertEquals(realMonth, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("LLL");
this.assertEquals(
qx.locale.Date.getMonthName(
"abbreviated",
month,
locale,
"stand-alone",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("LLLL");
this.assertEquals(
qx.locale.Date.getMonthName(
"wide",
month,
locale,
"stand-alone",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("LLLLL");
this.assertEquals(
qx.locale.Date.getMonthName(
"narrow",
month,
locale,
"stand-alone",
true
),
df.format(date)
);
df.dispose();
}
},
testPattern_w_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.weekOfYear) {
var date = this.__dates[i].date;
var weekOfYear = this.__dates[i].result.weekOfYear + "";
df = new qx.util.format.DateFormat("w");
this.assertEquals(weekOfYear, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("ww");
this.assertEquals(this.__fillNumber(weekOfYear, 2), df.format(date));
df.dispose();
}
}
},
testPattern_d_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var dayOfMonth = date.getDate();
df = new qx.util.format.DateFormat("d");
this.assertEquals(dayOfMonth + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("dd");
this.assertEquals(this.__fillNumber(dayOfMonth, 2), df.format(date));
df.dispose();
}
},
testPattern_D_() {
var df, dateStr;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
if (this.__dates[i].result.dayOfYear) {
var dayOfYear = this.__dates[i].result.dayOfYear + "";
df = new qx.util.format.DateFormat("D");
this.assertEquals(dayOfYear, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("DD");
this.assertEquals(this.__fillNumber(dayOfYear, 2), df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("DDD");
this.assertEquals(this.__fillNumber(dayOfYear, 3), df.format(date));
df.dispose();
}
var dateFmt = new qx.util.format.DateFormat("MM / yyy / DDD");
dateStr = dateFmt.format(date);
var parsedDate = dateFmt.parse(dateStr);
this.assertEquals(date.getFullYear(), parsedDate.getFullYear());
this.assertEquals(date.getMonth(), parsedDate.getMonth());
this.assertEquals(date.getDate(), parsedDate.getDate());
this.assertEquals(date.getDay(), parsedDate.getDay());
dateFmt.dispose();
}
},
testPattern_E_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.dayOfWeek) {
var date = this.__dates[i].date;
var fullYear = "" + date.getFullYear();
var dayOfWeek = this.__dates[i].result.dayOfWeek;
df = new qx.util.format.DateFormat("yyyy/E");
this.assertEquals(
fullYear +
"/" +
qx.locale.Date.getDayName(
"abbreviated",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/EE");
this.assertEquals(
fullYear +
"/" +
qx.locale.Date.getDayName(
"abbreviated",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/EEE");
this.assertEquals(
fullYear +
"/" +
qx.locale.Date.getDayName(
"abbreviated",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/EEEE");
this.assertEquals(
fullYear +
"/" +
qx.locale.Date.getDayName(
"wide",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("yyyy/EEEEE");
this.assertEquals(
fullYear +
"/" +
qx.locale.Date.getDayName(
"narrow",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
}
}
},
testPattern_c_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
var locales = [locale, "en_US", "ro_RO", "de_DE", "fr_FR"];
for (var k = 0; k < locales.length; k++) {
qx.locale.Manager.getInstance().setLocale(locales[k]);
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var dayOfWeek = date.getDay();
var startOfWeek = qx.locale.Date.getWeekStart(locales[k]);
var expectedDayOfWeek =
1 +
(dayOfWeek - startOfWeek >= 0
? dayOfWeek - startOfWeek
: 7 + (dayOfWeek - startOfWeek));
df = new qx.util.format.DateFormat("c", locales[k]);
this.assertEquals(expectedDayOfWeek + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("ccc", locales[k]);
this.assertEquals(
qx.locale.Date.getDayName(
"abbreviated",
dayOfWeek,
locales[k],
"stand-alone",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("cccc", locales[k]);
this.assertEquals(
qx.locale.Date.getDayName(
"wide",
dayOfWeek,
locales[k],
"stand-alone",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("ccccc", locales[k]);
this.assertEquals(
qx.locale.Date.getDayName(
"narrow",
dayOfWeek,
locales[k],
"stand-alone",
true
),
df.format(date)
);
df.dispose();
}
}
qx.locale.Manager.getInstance().setLocale(locale);
},
testPattern_e_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var dayOfWeek = date.getDay();
var startOfWeek = qx.locale.Date.getWeekStart(locale);
var expectedDayOfWeek =
1 +
(dayOfWeek - startOfWeek >= 0
? dayOfWeek - startOfWeek
: 7 + (dayOfWeek - startOfWeek));
df = new qx.util.format.DateFormat("e");
this.assertEquals(expectedDayOfWeek + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("ee");
this.assertEquals("0" + expectedDayOfWeek, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("eee");
this.assertEquals(
qx.locale.Date.getDayName(
"abbreviated",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("eeee");
this.assertEquals(
qx.locale.Date.getDayName("wide", dayOfWeek, locale, "format", true),
df.format(date)
);
df.dispose();
df = new qx.util.format.DateFormat("eeeee");
this.assertEquals(
qx.locale.Date.getDayName(
"narrow",
dayOfWeek,
locale,
"format",
true
),
df.format(date)
);
df.dispose();
}
},
testPattern_e_parse() {
var df, parsedDate;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var dayOfWeek = date.getDay();
df = new qx.util.format.DateFormat("e-yyyy-MM-dd");
parsedDate = df.parse(df.format(date));
this.assertEquals(dayOfWeek, parsedDate.getDay());
df.dispose();
df = new qx.util.format.DateFormat("ee-yyyy-MM-dd");
parsedDate = df.parse(df.format(date));
this.assertEquals(dayOfWeek, parsedDate.getDay());
df.dispose();
df = new qx.util.format.DateFormat("eee-yyyy-MM-dd");
parsedDate = df.parse(df.format(date));
this.assertEquals(dayOfWeek, parsedDate.getDay());
df.dispose();
df = new qx.util.format.DateFormat("eeee-yyyy-MM-dd");
parsedDate = df.parse(df.format(date));
this.assertEquals(dayOfWeek, parsedDate.getDay());
df.dispose();
df = new qx.util.format.DateFormat("eeeee-yyyy-MM-dd");
parsedDate = df.parse(df.format(date));
this.assertEquals(dayOfWeek, parsedDate.getDay());
df.dispose();
}
},
testPattern_a_() {
var df;
var locale = qx.locale.Manager.getInstance().getLocale();
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var hour = date.getHours();
df = new qx.util.format.DateFormat("a", locale);
this.assertEquals(
hour < 12
? qx.locale.Date.getAmMarker(locale).toString()
: qx.locale.Date.getPmMarker(locale).toString(),
df.format(date)
);
df.dispose();
}
},
testPattern_h_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.h_hour) {
var date = this.__dates[i].date;
var hour = this.__dates[i].result.h_hour;
df = new qx.util.format.DateFormat("h");
this.assertEquals(hour + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("hh");
this.assertEquals(this.__fillNumber(hour, 2), df.format(date));
df.dispose();
}
}
},
testPattern_H_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.H_hour) {
var date = this.__dates[i].date;
var hour = this.__dates[i].result.H_hour;
df = new qx.util.format.DateFormat("H");
this.assertEquals(hour + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("HH");
this.assertEquals(this.__fillNumber(hour, 2), df.format(date));
df.dispose();
}
}
},
testPattern_k_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.k_hour) {
var date = this.__dates[i].date;
var hour = this.__dates[i].result.k_hour;
df = new qx.util.format.DateFormat("k");
this.assertEquals(hour + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("kk");
this.assertEquals(this.__fillNumber(hour, 2), df.format(date));
df.dispose();
}
}
},
testPattern_K_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.K_hour) {
var date = this.__dates[i].date;
var hour = this.__dates[i].result.K_hour;
df = new qx.util.format.DateFormat("K");
this.assertEquals(hour + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("KK");
this.assertEquals(this.__fillNumber(hour, 2), df.format(date));
df.dispose();
}
}
},
testPattern_m_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var min = date.getMinutes();
df = new qx.util.format.DateFormat("m");
this.assertEquals(min + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("mm");
this.assertEquals(this.__fillNumber(min, 2), df.format(date));
df.dispose();
}
},
testPattern_s_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var sec = date.getSeconds();
df = new qx.util.format.DateFormat("s");
this.assertEquals(sec + "", df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("ss");
this.assertEquals(this.__fillNumber(sec, 2), df.format(date));
df.dispose();
}
},
testPattern_S_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
// pad milliseconds to become a fraction of second
var msec = this.__fillNumber(date.getMilliseconds(), 3);
df = new qx.util.format.DateFormat("S");
this.assertEquals(msec.substring(0, 1), df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("SS");
this.assertEquals(msec.substring(0, 2), df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("SSS");
this.assertEquals(msec.substring(0, 3), df.format(date));
df.dispose();
// check that remaining format specification is padded with zeros
df = new qx.util.format.DateFormat("SSSS");
this.assertEquals(msec.substring(0, 3) + "0", df.format(date));
df.dispose();
}
},
// z and Z can be tested when knowing the timezoneoffset of the machines the test will run on
// here it is EET
testPattern_z_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
var timezoneOffset = date.getTimezoneOffset();
var timezoneSign = timezoneOffset > 0 ? 1 : -1;
var timezoneHours = Math.floor(Math.abs(timezoneOffset) / 60);
var timezoneMinutes = Math.abs(timezoneOffset) % 60;
var localTimeZone =
"GMT" +
(timezoneSign > 0 ? "-" : "+") +
this.__fillNumber(Math.abs(timezoneHours), 2) +
":" +
this.__fillNumber(timezoneMinutes, 2);
df = new qx.util.format.DateFormat("z");
this.assertEquals(localTimeZone, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("zz");
this.assertEquals(localTimeZone, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("zzz");
this.assertEquals(localTimeZone, df.format(date));
df.dispose();
}
},
testPattern_G_() {
var df;
for (var i = 0; i < this.__dates.length; i++) {
if (this.__dates[i].result.era) {
var date = this.__dates[i].date;
var era = this.__dates[i].result.era;
df = new qx.util.format.DateFormat("G");
this.assertEquals(era.abbrev, df.format(date));
df.dispose();
df = new qx.util.format.DateFormat("yyyy MM dd G");
var dateFormatted = df.format(date);
var parsedDate = df.parse(dateFormatted);
this.assertEquals(date.getFullYear(), parsedDate.getFullYear());
this.assertEquals(date.getMonth(), parsedDate.getMonth());
this.assertEquals(date.getDate(), parsedDate.getDate());
this.assertEquals(date.getDay(), parsedDate.getDay());
df.dispose();
}
}
},
_testIsoMasks(date, isoFormat, dateFormat) {
var isodf = new qx.util.format.DateFormat(isoFormat);
var df = new qx.util.format.DateFormat(dateFormat);
var isoDateFormatted = isodf.format(date);
var dateFormatted = df.format(date);
this.assertEquals(isoDateFormatted, dateFormatted);
this.assertEquals(
isodf.parse(isoDateFormatted).getTime(),
df.parse(dateFormatted).getTime()
);
isodf.dispose();
df.dispose();
},
testIsoMasks() {
for (var i = 0; i < this.__dates.length; i++) {
var date = this.__dates[i].date;
this._testIsoMasks(date, "isoDate", "yyyy-MM-dd");
this._testIsoMasks(date, "isoTime", "HH:mm:ss");
this._testIsoMasks(date, "isoDateTime", "yyyy-MM-dd'T'HH:mm:ss");
this._testIsoMasks(date, "isoDateTimeTz", "yyyy-MM-dd'T'HH:mm:ssZ");
//this._testIsoMasks(date, 'isoUtcDateTime', "yyyy-MM-dd'T'HH:mm:ss'Z'");
}
},
testIsoTz() {
var isodf = new qx.util.format.DateFormat("isoDateTimeTz");
var parsedDate = isodf.parse("2013-01-01T00:00:00+0000");
this.assertEquals(parsedDate.getUTCFullYear(), 2013);
this.assertEquals(parsedDate.getUTCMonth(), 0);
this.assertEquals(parsedDate.getUTCDate(), 1);
this.assertEquals(parsedDate.getUTCHours(), 0);
this.assertEquals(parsedDate.getUTCMinutes(), 0);
this.assertEquals(parsedDate.getUTCSeconds(), 0);
this.assertEquals(parsedDate.getUTCMilliseconds(), 0);
parsedDate = isodf.parse("2004-04-04T04:04:04-0500");
this.assertEquals(parsedDate.getUTCFullYear(), 2004);
this.assertEquals(parsedDate.getUTCMonth(), 3);
this.assertEquals(parsedDate.getUTCDate(), 3);
this.assertEquals(parsedDate.getUTCHours(), 23);
this.assertEquals(parsedDate.getUTCMinutes(), 4);
this.assertEquals(parsedDate.getUTCSeconds(), 4);
this.assertEquals(parsedDate.getUTCMilliseconds(), 0);
},
testUtc() {
var isodf = new qx.util.format.DateFormat("isoUtcDateTime");
var parsedDate = isodf.parse("2013-01-01T00:00:00Z");
this.assertEquals(parsedDate.getUTCFullYear(), 2013);
this.assertEquals(parsedDate.getUTCMonth(), 0);
this.assertEquals(parsedDate.getUTCDate(), 1);
this.assertEquals(parsedDate.getUTCHours(), 0);
this.assertEquals(parsedDate.getUTCMinutes(), 0);
this.assertEquals(parsedDate.getUTCSeconds(), 0);
this.assertEquals(parsedDate.getUTCMilliseconds(), 0);
// checks that UTC hours are calculated correctly
parsedDate = isodf.parse("2004-04-04T04:04:04Z");
this.assertEquals(parsedDate.getUTCHours(), 4);
// checks that UTC format does not parse a date with a timezone
this.assertException(function () {
isodf.parse("2004-04-04T04:04:04+05:00");
}, Error);
},
testChangingLocales() {
var manager = qx.locale.Manager.getInstance();
manager.resetLocale();
var initialLocale = manager.getLocale();
manager.setLocale("en_US");
var df = new qx.util.format.DateFormat("EEEE yyyy-mm-dd");
var dfinitial = new qx.util.format.DateFormat(
"EEEE yyyy-mm-dd",
initialLocale
);
var dfFR = new qx.util.format.DateFormat("EEEE yyyy-mm-dd", "fr_FR");
var dfDE = new qx.util.format.DateFormat("EEEE yyyy-mm-dd", "de_DE");
var dfUS = new qx.util.format.DateFormat("EEEE yyyy-mm-dd", "en_US");
var d = new Date();
this.assertEquals(df.format(d), dfUS.format(d));
manager.setLocale("fr_FR");
this.assertEquals(df.format(d), dfFR.format(d));
manager.setLocale("de_DE");
this.assertEquals(df.format(d), dfDE.format(d));
manager.resetLocale();
this.assertEquals(df.format(d), dfinitial.format(d));
df.setLocale("fr_FR");
this.assertEquals(df.format(d), dfFR.format(d));
df.resetLocale();
this.assertEquals(df.format(d), dfinitial.format(d));
dfFR.setLocale("de_DE");
this.assertEquals(dfFR.format(d), dfDE.format(d));
dfFR.resetLocale();
df.dispose();
dfinitial.dispose();
dfFR.dispose();
dfDE.dispose();
dfUS.dispose();
},
hasNoEdge() {
return !(qx.core.Environment.get("browser.name") == "edge");
}
}
});