///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.web.wicket.converter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import org.apache.wicket.util.convert.ConversionException; import org.junit.Test; import org.projectforge.common.DateHelper; import org.projectforge.test.TestBase; import org.projectforge.user.PFUserContext; import org.projectforge.user.PFUserDO; public class MyDateConverterTest extends TestBase { @Test public void preProcessInput() { final int year = Calendar.getInstance(Locale.GERMAN).get(Calendar.YEAR); final MyDateConverter conv = new MyDateConverter(); assertEquals("21.11.1970", conv.preProcessInput("21.11.1970", Locale.GERMAN)); assertEquals("21.11.1970", conv.preProcessInput(" 21 . 11 . 1970 ", Locale.GERMAN)); assertEquals("21.11." + year, conv.preProcessInput("21 .11.", Locale.GERMAN)); assertEquals("21.11." + year, conv.preProcessInput("21.11", Locale.GERMAN)); assertEquals("21.November 1970", conv.preProcessInput("21. November 1970", Locale.GERMAN)); assertEquals("21.November 1970", conv.preProcessInput("21 .November 1970", Locale.GERMAN)); assertEquals("21.November." + year, conv.preProcessInput("21 .November ", Locale.GERMAN)); // Parsing will fail, OK, won't fix. assertEquals("11/21/1970", conv.preProcessInput("11 / 21 / 1970", Locale.ENGLISH)); assertEquals("11/21/" + year, conv.preProcessInput("11/21/", Locale.ENGLISH)); assertEquals("11/21/" + year, conv.preProcessInput("11/21", Locale.ENGLISH)); } @Test public void convertToObject() { convertToObjectGerman(DateHelper.EUROPE_BERLIN); convertToObjectGerman(DateHelper.UTC); convertToObjectEnglish(DateHelper.EUROPE_BERLIN); convertToObjectEnglish(DateHelper.UTC); } @Test public void convertToObjetErrors() { final MyDateConverter conv = new MyDateConverter(); try { conv.convertToObject("31.11.09", Locale.GERMAN); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } try { conv.convertToObject("31.11.", Locale.GERMAN); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } try { conv.convertToObject("11/31/1970", Locale.ENGLISH); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } try { conv.convertToObject("11/31/70", Locale.ENGLISH); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } try { conv.convertToObject("11/31", Locale.ENGLISH); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } } @Test public void convertToString() { final MyDateConverter conv = new MyDateConverter(); final PFUserDO user = new PFUserDO(); user.setTimeZone(DateHelper.EUROPE_BERLIN); user.setLocale(Locale.GERMAN); user.setDateFormat("dd.MM.yyyy"); PFUserContext.setUser(user); Date testDate = createDate(1970, 10, 21, 0, 0, 0, 0, DateHelper.EUROPE_BERLIN); assertEquals("21.11.1970", conv.convertToString(testDate, Locale.GERMAN)); user.setLocale(Locale.ENGLISH); user.setDateFormat("MM/dd/yyyy"); assertEquals("11/21/1970", conv.convertToString(testDate, Locale.GERMAN)); user.setLocale(Locale.GERMAN); user.setDateFormat("dd.MM.yyyy"); testDate = createDate(2009, 1, 1, 0, 0, 0, 0, DateHelper.EUROPE_BERLIN); assertEquals("01.02.2009", conv.convertToString(testDate, Locale.GERMAN)); user.setLocale(Locale.ENGLISH); user.setDateFormat("MM/dd/yyyy"); assertEquals("02/01/2009", conv.convertToString(testDate, Locale.GERMAN)); } private void convertToObjectGerman(final TimeZone timeZone) { final MyDateConverter conv = new MyDateConverter(); assertNull(conv.convertToObject("", Locale.GERMAN)); final PFUserDO user = new PFUserDO(); user.setTimeZone(timeZone); user.setDateFormat("dd.MM.yyyy"); PFUserContext.setUser(user); Date testDate = createDate(1970, 9, 21, 0, 0, 0, 0, timeZone); Date date = conv.convertToObject("21.10.1970", Locale.GERMAN); assertDates(testDate, date); try { date = conv.convertToObject("21/10/1970", Locale.GERMAN); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } assertDates(testDate, date); date = conv.convertToObject("21.10.70", Locale.GERMAN); assertDates(testDate, date); // date = (Date) conv.convertToObject("21. Okt 1970", Locale.GERMAN); // assertDates(testDate, date); // date = (Date) conv.convertToObject("21. Oktober 1970", Locale.GERMAN); // assertDates(testDate, date); date = conv.convertToObject("1970-10-21", Locale.GERMAN); assertDates(testDate, date); date = conv.convertToObject("1970 - 10 - 21", Locale.GERMAN); assertDates(testDate, date); try { date = conv.convertToObject("1970.10.21", Locale.GERMAN); fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } try { date = conv.convertToObject(String.valueOf(testDate.getTime()), Locale.GERMAN); // millis not supported. fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } testDate = createDate(1970, 9, 1, 0, 0, 0, 0, timeZone); date = conv.convertToObject("1.10.1970", Locale.GERMAN); assertDates(testDate, date); date = conv.convertToObject("01.10.70", Locale.GERMAN); assertDates(testDate, date); final Calendar cal = Calendar.getInstance(timeZone); final int year = cal.get(Calendar.YEAR); testDate = createDate(year, 9, 21, 0, 0, 0, 0, timeZone); date = conv.convertToObject("21.10.", Locale.GERMAN); assertDates(testDate, date); date = conv.convertToObject("21.10", Locale.GERMAN); assertDates(testDate, date); // date = (Date) conv.convertToObject("21. Okt " + year, Locale.GERMAN); // assertDates(testDate, date); // date = (Date) conv.convertToObject("21. Oktober " + year, Locale.GERMAN); // assertDates(testDate, date); } private void convertToObjectEnglish(final TimeZone timeZone) { final MyDateConverter conv = new MyDateConverter(); final PFUserDO user = new PFUserDO(); user.setTimeZone(timeZone); PFUserContext.setUser(user); Date testDate = createDate(1970, 9, 21, 0, 0, 0, 0, timeZone); Date date = conv.convertToObject("10/21/1970", Locale.ENGLISH); assertDates(testDate, date); date = conv.convertToObject("10/21/70", Locale.ENGLISH); assertDates(testDate, date); date = conv.convertToObject("1970-10-21", Locale.ENGLISH); assertDates(testDate, date); try { date = conv.convertToObject(String.valueOf(testDate.getTime()), Locale.ENGLISH); // millis not supported. fail("ConversionException exprected."); } catch (final ConversionException ex) { // OK } final Calendar cal = Calendar.getInstance(timeZone); final int year = cal.get(Calendar.YEAR); testDate = createDate(year, 9, 21, 0, 0, 0, 0, timeZone); date = conv.convertToObject("10/21", Locale.ENGLISH); assertDates(testDate, date); } private void assertDates(final Date exptected, final Date actual) { assertEquals(DateHelper.formatAsUTC(exptected), DateHelper.formatAsUTC(actual)); assertEquals(exptected.getTime(), actual.getTime()); } private Date createDate(final int year, final int month, final int day, final int hour, final int minute, final int second, final int millisecond, final TimeZone timeZone) { final Calendar cal = Calendar.getInstance(timeZone); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); cal.set(Calendar.DAY_OF_MONTH, day); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); cal.set(Calendar.SECOND, second); cal.set(Calendar.MILLISECOND, millisecond); return cal.getTime(); } }