/* * ObjectLab, http://www.objectlab.co.uk/open is sponsoring the ObjectLab Kit. * * Based in London, we are world leaders in the design and development * of bespoke applications for the securities financing markets. * * <a href="http://www.objectlab.co.uk/open">Click here to learn more</a> * ___ _ _ _ _ _ * / _ \| |__ (_) ___ ___| |_| | __ _| |__ * | | | | '_ \| |/ _ \/ __| __| | / _` | '_ \ * | |_| | |_) | | __/ (__| |_| |__| (_| | |_) | * \___/|_.__// |\___|\___|\__|_____\__,_|_.__/ * |__/ * * www.ObjectLab.co.uk * * $Id$ * * Copyright 2006 the original author or authors. * * 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 net.objectlab.kit.datecalc.common; import java.io.Serializable; import java.util.Set; import junit.framework.Assert; public abstract class AbstractDateCalculatorFactoryTest<E extends Serializable> extends AbstractDateTestCase<E> { public void testGetCalendarsNoHoliday() { final DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNotNull("cal1", cal1); Assert.assertEquals("name", "bla", cal1.getName()); Assert.assertTrue("no holiday", cal1.getHolidayCalendar().getHolidays().isEmpty()); final DateCalculator<E> cal2 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNotNull("cal2", cal2); Assert.assertEquals("name", "bla", cal2.getName()); Assert.assertTrue("no holiday", cal2.getHolidayCalendar().getHolidays().isEmpty()); Assert.assertNotSame(cal1, cal2); } public void testGetCalendarsNoHolidayButSomeRegistered() { getDateCalculatorFactory().registerHolidays("UK", createUKHolidayCalendar()); final DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNotNull("cal1", cal1); Assert.assertEquals("name", "bla", cal1.getName()); Assert.assertTrue("no holiday", cal1.getHolidayCalendar().getHolidays().isEmpty()); final DateCalculator<E> cal2 = getDateCalculatorFactory().getDateCalculator("UK", null); Assert.assertNotNull("cal2", cal2); Assert.assertEquals("name cal2", "UK", cal2.getName()); Assert.assertEquals("UK holidays", 4, cal2.getHolidayCalendar().getHolidays().size()); Assert.assertNotSame(cal1, cal2); } public void testGetCalendarsNames() { getDateCalculatorFactory().registerHolidays("UK", createUKHolidayCalendar()); getDateCalculatorFactory().registerHolidays("US", createUSHolidayCalendar()); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 2, cals.size()); Assert.assertTrue("UK", cals.contains("UK")); Assert.assertTrue("US", cals.contains("US")); Assert.assertTrue("BLA", !cals.contains("BLA")); } // unregister 1 name that does not exist getDateCalculatorFactory().unregisterHolidayCalendar("ZZZ"); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 2, cals.size()); Assert.assertTrue("UK", cals.contains("UK")); Assert.assertTrue("US", cals.contains("US")); Assert.assertTrue("BLA", !cals.contains("BLA")); } // unregister 1 name that does exist getDateCalculatorFactory().unregisterHolidayCalendar("UK"); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 1, cals.size()); Assert.assertTrue("UK", !cals.contains("UK")); Assert.assertTrue("US", cals.contains("US")); Assert.assertTrue("BLA", !cals.contains("BLA")); } // unregister 1 name that does exist getDateCalculatorFactory().unregisterHolidayCalendar("US"); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 0, cals.size()); } // re-register getDateCalculatorFactory().registerHolidays("UK", createUKHolidayCalendar()); getDateCalculatorFactory().registerHolidays("US", createUSHolidayCalendar()); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 2, cals.size()); Assert.assertTrue("UK", cals.contains("UK")); Assert.assertTrue("US", cals.contains("US")); Assert.assertTrue("BLA", !cals.contains("BLA")); } // unregister all getDateCalculatorFactory().unregisterAllHolidayCalendars(); { final Set<String> cals = getDateCalculatorFactory().getRegisteredHolidayCalendarNames(); Assert.assertNotNull("cal1", cals); Assert.assertEquals("cals size", 0, cals.size()); } } // ----------------------------------------------------------------------- // // ObjectLab, world leaders in the design and development of bespoke // applications for the securities financing markets. // www.ObjectLab.co.uk // // ----------------------------------------------------------------------- public void testGetCorrectAlgo() { DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNull("No algo", cal1.getHolidayHandlerType()); cal1 = getDateCalculatorFactory().getDateCalculator("bla", HolidayHandlerType.BACKWARD); Assert.assertEquals("Type", HolidayHandlerType.BACKWARD, cal1.getHolidayHandlerType()); cal1 = getDateCalculatorFactory().getDateCalculator("bla", HolidayHandlerType.FORWARD); Assert.assertEquals("Type", HolidayHandlerType.FORWARD, cal1.getHolidayHandlerType()); cal1 = getDateCalculatorFactory().getDateCalculator("bla", HolidayHandlerType.MODIFIED_FOLLOWING); Assert.assertEquals("Type", HolidayHandlerType.MODIFIED_FOLLOWING, cal1.getHolidayHandlerType()); cal1 = getDateCalculatorFactory().getDateCalculator("bla", HolidayHandlerType.MODIFIED_PRECEDING); Assert.assertEquals("Type", HolidayHandlerType.MODIFIED_PRECEDING, cal1.getHolidayHandlerType()); } public void testGetIncorrectAlgo() { try { getDateCalculatorFactory().getDateCalculator("bla", "bliobl"); fail("Should have thrown UnsupportedOperationException"); } catch (final IllegalArgumentException e) { // all ok } } public void testSetHolCal() { final DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNotNull("No algo", cal1); Assert.assertNotNull("No hol", cal1.getHolidayCalendar().getHolidays()); Assert.assertTrue("empty hol", cal1.getHolidayCalendar().getHolidays().isEmpty()); cal1.setHolidayCalendar(null); Assert.assertNotNull("empty", cal1.getHolidayCalendar().getHolidays()); Assert.assertTrue("empty hol", cal1.getHolidayCalendar().getHolidays().isEmpty()); } public void testUseDefault() { final DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("bla", null); Assert.assertNotNull("No algo", cal1); Assert.assertNotNull("No hol", cal1.getHolidayCalendar().getHolidays()); Assert.assertTrue("empty hol", cal1.getHolidayCalendar().getHolidays().isEmpty()); E date = cal1.moveByDays(0).getCurrentBusinessDate(); Assert.assertEquals("default today", newDate(null), date); cal1.setStartDate(null); date = cal1.moveByDays(0).getCurrentBusinessDate(); Assert.assertEquals("default today", newDate(null), date); cal1.setStartDate(newDate("2006-08-08")); cal1.setCurrentBusinessDate(null); date = cal1.moveByDays(0).getCurrentBusinessDate(); Assert.assertEquals("default today", newDate(null), date); } public void testHolNoAlgo() { getDateCalculatorFactory().registerHolidays("UK", createUKHolidayCalendar()); final DateCalculator<E> cal1 = getDateCalculatorFactory().getDateCalculator("UK", null); Assert.assertNotNull("No algo", cal1); Assert.assertNotNull("No hol", cal1.getHolidayCalendar().getHolidays()); Assert.assertTrue("non empty hol", !cal1.getHolidayCalendar().getHolidays().isEmpty()); cal1.setCurrentBusinessDate(newDate("2006-12-25")); Assert.assertTrue("current date is holiday", cal1.isCurrentDateNonWorking()); cal1.setCurrentBusinessDate(newDate("2006-12-24")); Assert.assertTrue("current date is weekend", cal1.isCurrentDateNonWorking()); } public void testHolidayCalendar() { final Set<E> uk = createUKHolidays(); final HolidayCalendar<E> ukCal = new DefaultHolidayCalendar<E>(uk); getDateCalculatorFactory().registerHolidays("UK", ukCal); assertNull("Early boundary", ukCal.getEarlyBoundary()); assertNull("Late boundary", ukCal.getLateBoundary()); } } /* * ObjectLab, http://www.objectlab.co.uk/open is sponsoring the ObjectLab Kit. * * Based in London, we are world leaders in the design and development * of bespoke applications for the securities financing markets. * * <a href="http://www.objectlab.co.uk/open">Click here to learn more about us</a> * ___ _ _ _ _ _ * / _ \| |__ (_) ___ ___| |_| | __ _| |__ * | | | | '_ \| |/ _ \/ __| __| | / _` | '_ \ * | |_| | |_) | | __/ (__| |_| |__| (_| | |_) | * \___/|_.__// |\___|\___|\__|_____\__,_|_.__/ * |__/ * * www.ObjectLab.co.uk */