/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.convention.expirycalc;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.financial.convention.calendar.MondayToFridayCalendar;
import com.opengamma.util.test.TestGroup;
/**
* Tests the expiry adjuster that moves a date to a number of working days from the last working
* day of the month.
*/
@Test(groups = TestGroup.UNIT)
public class DaysFromEndOfMonthExpiryAdjusterTest {
/** The calendar */
private static final Calendar CALENDAR = new MondayToFridayCalendar("Weekend");
/**
* Tests adjuster for various dates when the number of days to adjust from the end of month is one.
*/
@Test
public void testOneDayAdjuster() {
final DaysFromEndOfMonthExpiryAdjuster adjuster = new DaysFromEndOfMonthExpiryAdjuster(1);
LocalDate date = LocalDate.of(2014, 2, 14);
LocalDate expected = LocalDate.of(2014, 2, 27);
assertEquals(expected, adjuster.getExpiryDate(1, date, CALENDAR));
expected = LocalDate.of(2014, 3, 28);
assertEquals(expected, adjuster.getExpiryDate(2, date, CALENDAR));
expected = LocalDate.of(2014, 4, 29);
assertEquals(expected, adjuster.getExpiryDate(3, date, CALENDAR));
expected = LocalDate.of(2014, 6, 27);
assertEquals(expected, adjuster.getExpiryDate(5, date, CALENDAR));
date = LocalDate.of(2014, 1, 31);
expected = LocalDate.of(2014, 2, 27);
assertEquals(expected, adjuster.getExpiryDate(1, date, CALENDAR));
expected = LocalDate.of(2014, 3, 28);
assertEquals(expected, adjuster.getExpiryDate(2, date, CALENDAR));
expected = LocalDate.of(2014, 4, 29);
assertEquals(expected, adjuster.getExpiryDate(3, date, CALENDAR));
expected = LocalDate.of(2014, 6, 27);
assertEquals(expected, adjuster.getExpiryDate(5, date, CALENDAR));
}
/**
* Tests adjuster for various dates when the number of days to adjust from the end of month is five;
* this will hit holidays.
*/
@Test
public void testFiveDayAdjuster() {
final DaysFromEndOfMonthExpiryAdjuster adjuster = new DaysFromEndOfMonthExpiryAdjuster(5);
LocalDate date = LocalDate.of(2014, 2, 14);
LocalDate expected = LocalDate.of(2014, 2, 21);
assertEquals(expected, adjuster.getExpiryDate(1, date, CALENDAR));
expected = LocalDate.of(2014, 3, 24);
assertEquals(expected, adjuster.getExpiryDate(2, date, CALENDAR));
expected = LocalDate.of(2014, 4, 23);
assertEquals(expected, adjuster.getExpiryDate(3, date, CALENDAR));
expected = LocalDate.of(2014, 6, 23);
assertEquals(expected, adjuster.getExpiryDate(5, date, CALENDAR));
date = LocalDate.of(2014, 1, 31);
expected = LocalDate.of(2014, 2, 21);
assertEquals(expected, adjuster.getExpiryDate(1, date, CALENDAR));
expected = LocalDate.of(2014, 3, 24);
assertEquals(expected, adjuster.getExpiryDate(2, date, CALENDAR));
expected = LocalDate.of(2014, 4, 23);
assertEquals(expected, adjuster.getExpiryDate(3, date, CALENDAR));
expected = LocalDate.of(2014, 6, 23);
assertEquals(expected, adjuster.getExpiryDate(5, date, CALENDAR));
}
}