/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.time.impl; import java.io.*; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class CronExpressionTest extends SerializationTestSupport { private static final String[] VERSIONS = new String[] {"1.5.2"}; private static final TimeZone EST_TIME_ZONE = TimeZone.getTimeZone("US/Eastern"); /** * Get the object to serialize when generating serialized file for future * tests, and against which to validate deserialized object. */ protected Object getTargetObject() throws ParseException { CronExpression cronExpression = new CronExpression("0 15 10 * * ? 2005"); cronExpression.setTimeZone(EST_TIME_ZONE); return cronExpression; } /** * Get the Quartz versions for which we should verify * serialization backwards compatibility. */ protected String[] getVersions() { return VERSIONS; } /** * Verify that the target object and the object we just deserialized * match. */ protected void verifyMatch(Object target, Object deserialized) { CronExpression targetCronExpression = (CronExpression)target; CronExpression deserializedCronExpression = (CronExpression)deserialized; assertNotNull(deserializedCronExpression); assertEquals(targetCronExpression.getCronExpression(), deserializedCronExpression.getCronExpression()); assertEquals(targetCronExpression.getTimeZone(), deserializedCronExpression.getTimeZone()); } /* * Test method for 'org.quartz.CronExpression.isSatisfiedBy(Date)'. */ public void testIsSatisfiedBy() throws Exception { CronExpression cronExpression = new CronExpression("0 15 10 * * ? 2005"); Calendar cal = Calendar.getInstance(); cal.set(2005, Calendar.JUNE, 1, 10, 15, 0); assertTrue(cronExpression.isSatisfiedBy(cal.getTime())); cal.set(Calendar.YEAR, 2006); assertFalse(cronExpression.isSatisfiedBy(cal.getTime())); cal = Calendar.getInstance(); cal.set(2005, Calendar.JUNE, 1, 10, 16, 0); assertFalse(cronExpression.isSatisfiedBy(cal.getTime())); cal = Calendar.getInstance(); cal.set(2005, Calendar.JUNE, 1, 10, 14, 0); assertFalse(cronExpression.isSatisfiedBy(cal.getTime())); } /* * QUARTZ-571: Showing that expressions with months correctly serialize. */ public void testQuartz571() throws Exception { CronExpression cronExpression = new CronExpression("19 15 10 4 Apr ? "); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(cronExpression); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); CronExpression newExpression = (CronExpression) ois.readObject(); assertEquals(newExpression.getCronExpression(), cronExpression.getCronExpression()); // if broken, this will throw an exception newExpression.getNextValidTimeAfter(new Date()); } /* * QUARTZ-574: Showing that storeExpressionVals correctly calculates the month number */ public void testQuartz574() { try { CronExpression cronExpression = new CronExpression("* * * * Foo ? "); fail("Expected ParseException did not fire for non-existent month"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Invalid Month value:")); } try { CronExpression cronExpression = new CronExpression("* * * * Jan-Foo ? "); fail("Expected ParseException did not fire for non-existent month"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Invalid Month value:")); } } public void testQuartz621() { try { CronExpression cronExpression = new CronExpression("0 0 * * * *"); fail("Expected ParseException did not fire for wildcard day-of-month and day-of-week"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.")); } try { CronExpression cronExpression = new CronExpression("0 0 * 4 * *"); fail("Expected ParseException did not fire for specified day-of-month and wildcard day-of-week"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.")); } try { CronExpression cronExpression = new CronExpression("0 0 * * * 4"); fail("Expected ParseException did not fire for wildcard day-of-month and specified day-of-week"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.")); } } public void testQuartz640() throws ParseException { try { CronExpression cronExpression = new CronExpression("0 43 9 1,5,29,L * ?"); fail("Expected ParseException did not fire for L combined with other days of the month"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying 'L' and 'LW' with other days of the month is not implemented")); } try { CronExpression cronExpression = new CronExpression("0 43 9 ? * SAT,SUN,L"); fail("Expected ParseException did not fire for L combined with other days of the week"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying 'L' with other days of the week is not implemented")); } try { CronExpression cronExpression = new CronExpression("0 43 9 ? * 6,7,L"); fail("Expected ParseException did not fire for L combined with other days of the week"); } catch(ParseException pe) { assertTrue("Incorrect ParseException thrown", pe.getMessage().startsWith("Support for specifying 'L' with other days of the week is not implemented")); } try { CronExpression cronExpression = new CronExpression("0 43 9 ? * 5L"); } catch(ParseException pe) { fail("Unexpected ParseException thrown for supported '5L' expression."); } } public void testSerialization() { // TODO as we don't want to worry about this for now } }