UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

869 lines (702 loc) 30.9 kB
/* ************************************************************************ 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 : function() { qx.locale.Manager.getInstance().resetLocale(); }, __fillNumber : function(number, minSize) { var str = "" + number; while (str.length < minSize) { str = "0" + str; } return str; }, __getExpectedYear : function(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 : function(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 : function() { 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 : function() { // 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 : function() { 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 : function() { 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 : function() { 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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 : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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_ : function(){ 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 : function(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 : function() { 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"); // var isodf = new qx.util.format.DateFormat('isoUtcDateTime'); // var df = new qx.util.format.DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // var isoDateFormatted = isodf.format(date); // var dateFormatted = df.format(date); // this.assertEquals(isodf.parse(isoDateFormatted).getTime(),df.parse(dateFormatted).getTime()); } }, testChangingLocales : function() { 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(); var frenchFormatteddateString = dfFR.format(d); 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)); manager.setLocale('fr_FR'); this.assertEquals(df.format(d),dfFR.format(d)); df.resetLocale(); this.assertEquals(df.format(d),dfUS.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: function() { return !(qx.core.Environment.get("browser.name") == "edge"); } } });