/* * (c) Rob Gordon 2005 */ package org.oddjob.values.types; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.oddjob.ConverterHelper; import org.oddjob.Oddjob; import org.oddjob.OddjobDescriptorFactory; import org.oddjob.OddjobLookup; import org.oddjob.arooa.ArooaDescriptor; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.convert.ArooaConverter; import org.oddjob.arooa.standard.StandardFragmentParser; import org.oddjob.arooa.utils.DateHelper; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.state.ParentState; import org.oddjob.tools.ConsoleCapture; import org.oddjob.tools.ManualClock; /** * */ public class DateTypeTest extends TestCase { private static final Logger logger = Logger.getLogger(DateTypeTest.class); @Override protected void setUp() throws Exception { super.setUp(); logger.info("---------------- " + getName() + " -------------"); } // check we get date and string public void testConversions() throws Exception { DateType dt = new DateType(); dt.setDate("2005-12-25"); ArooaConverter converter = new ConverterHelper().getConverter(); Date date = converter.convert(dt, Date.class); assertEquals("date", new SimpleDateFormat("dd-MMM-yy").parse("25-DEC-05"), date); Calendar calendar = converter.convert(dt, Calendar.class); Calendar expectedCal = Calendar.getInstance(); expectedCal.clear(); expectedCal.set(2005, 11, 25); assertEquals("calendar", expectedCal, calendar); String string = converter.convert(dt, String.class); assertEquals("date", DateHelper.formatDateTime( DateHelper.parseDate("2005-12-25")), string); } public void testTimeZone() throws Exception { DateType dt = new DateType(); dt.setDate("2005-12-25"); dt.setTimeZone("US/Hawaii"); ArooaConverter converter = new ConverterHelper().getConverter(); Calendar calendar = converter.convert(dt, Calendar.class); Calendar expectedCal = Calendar.getInstance(TimeZone.getTimeZone("US/Hawaii")); expectedCal.clear(); expectedCal.set(2005, 11, 25); assertEquals(expectedCal.getTime(), calendar.getTime()); } public void testInOddjob() throws ArooaConversionException, ParseException { String xml = "<oddjob>" + " <job>" + " <variables id='v'>" + " <myDate>" + " <date date='2005-12-25'/>" + " </myDate>" + " <myDate2>" + " <date date='2005-12-25' format='yyyy-MM-dd' timeZone='US/Hawaii'/>" + " </myDate2>" + " </variables>" + " </job>" + "</oddjob>"; Oddjob oj = new Oddjob(); oj.setConfiguration(new XMLConfiguration("XML", xml)); oj.run(); Date result = new OddjobLookup(oj).lookup("v.myDate", Date.class); assertEquals(DateHelper.parseDate("2005-12-25"), result); Date result2 = new OddjobLookup(oj).lookup("v.myDate2", Date.class); assertEquals(DateHelper.parseDate("2005-12-25", TimeZone.getTimeZone("US/Hawaii")), result2); } public void testInvalidTimeZone() throws ParseException { DateType test = new DateType(); test.setDate("2009"); test.setFormat("yyyy"); test.setTimeZone("My Front Room"); Date result = test.toDate(); assertEquals(DateHelper.parseDate("2009-01-01", "GMT"), result); } public void testSimpleDateExample() throws ArooaParseException, ParseException { OddjobDescriptorFactory df = new OddjobDescriptorFactory(); ArooaDescriptor descriptor = df.createDescriptor( getClass().getClassLoader()); StandardFragmentParser parser = new StandardFragmentParser(descriptor); parser.parse(new XMLConfiguration( "org/oddjob/values/types/SimpleDateExample.xml", getClass().getClassLoader())); DateType date = (DateType) parser.getRoot(); Date expected = DateHelper.parseDateTime("2009-12-25 12:30"); assertEquals(expected, date.toDate()); } public void testFormatExample() throws ArooaParseException, ParseException { OddjobDescriptorFactory df = new OddjobDescriptorFactory(); ArooaDescriptor descriptor = df.createDescriptor( getClass().getClassLoader()); StandardFragmentParser parser = new StandardFragmentParser(descriptor); parser.parse(new XMLConfiguration( "org/oddjob/values/types/DateFormatExample.xml", getClass().getClassLoader())); DateType date = (DateType) parser.getRoot(); Date expected = DateHelper.parseDateTime("2009-12-25 12:30"); assertEquals(expected, date.toDate()); } public void testDateTimezoneExample() throws ParseException { logger.debug(TimeZone.getDefault()); Oddjob oj = new Oddjob(); oj.setConfiguration(new XMLConfiguration( "org/oddjob/values/types/DateWithTimeZoneExample.xml", getClass().getClassLoader())); ConsoleCapture console = new ConsoleCapture(); try (ConsoleCapture.Close close = console.captureConsole()) { oj.run(); } console.dump(logger); String[] lines = console.getLines(); Date there = DateHelper.parseDateTime("2009-12-25", "US/Hawaii"); assertEquals("Christmas in Hawaii starts at " + DateHelper.formatDateTime(there)+ ".", lines[0].trim()); assertEquals(1, lines.length); oj.destroy(); } public void testDateShortcuts() throws ParseException { DateType test = new DateType(); test.setClock(new ManualClock("2013-01-16 07:30")); test.setDate("TODAY"); assertEquals(DateHelper.parseDateTime("2013-01-16 00:00"), test.toDate()); test.setDate("NOW"); assertEquals(DateHelper.parseDateTime("2013-01-16 07:30"), test.toDate()); test.setDate("TOMORROW"); assertEquals(DateHelper.parseDateTime("2013-01-17 00:00"), test.toDate()); test.setDate("YESTERDAY"); assertEquals(DateHelper.parseDateTime("2013-01-15 00:00"), test.toDate()); } public void testDateShortcutsExample() throws ParseException { Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration( "org/oddjob/values/types/DateShortcutsExample.xml", getClass().getClassLoader())); ConsoleCapture console = new ConsoleCapture(); try (ConsoleCapture.Close close = console.captureConsole()) { oddjob.run(); } assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); console.dump(logger); oddjob.destroy(); } }