/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.basics.date;
import static com.opengamma.strata.basics.date.PeriodAdditionConventions.LAST_BUSINESS_DAY;
import static com.opengamma.strata.basics.date.PeriodAdditionConventions.LAST_DAY;
import static com.opengamma.strata.basics.date.PeriodAdditionConventions.NONE;
import static com.opengamma.strata.collect.TestHelper.assertJodaConvert;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.coverEnum;
import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import java.time.Period;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
/**
* Test {@link PeriodAdditionConvention}.
*/
@Test
public class PeriodAdditionConventionTest {
@DataProvider(name = "types")
static Object[][] data_types() {
StandardPeriodAdditionConventions[] conv = StandardPeriodAdditionConventions.values();
Object[][] result = new Object[conv.length][];
for (int i = 0; i < conv.length; i++) {
result[i] = new Object[] {conv[i]};
}
return result;
}
@Test(dataProvider = "types")
public void test_null(PeriodAdditionConvention type) {
assertThrowsIllegalArg(() -> type.adjust(null, Period.ofMonths(3), HolidayCalendars.NO_HOLIDAYS));
assertThrowsIllegalArg(() -> type.adjust(date(2014, 7, 11), null, HolidayCalendars.NO_HOLIDAYS));
assertThrowsIllegalArg(() -> type.adjust(date(2014, 7, 11), Period.ofMonths(3), null));
assertThrowsIllegalArg(() -> type.adjust(null, null, null));
}
//-------------------------------------------------------------------------
@DataProvider(name = "convention")
static Object[][] data_convention() {
return new Object[][] {
// None
{NONE, date(2014, 7, 11), 1, date(2014, 8, 11)}, // Fri, Mon
{NONE, date(2014, 7, 31), 1, date(2014, 8, 31)}, // Thu, Sun
{NONE, date(2014, 6, 30), 2, date(2014, 8, 30)}, // Mon, Sat
// LastDay
{LAST_DAY, date(2014, 7, 11), 1, date(2014, 8, 11)}, // Fri, Mon
{LAST_DAY, date(2014, 7, 31), 1, date(2014, 8, 31)}, // Thu, Sun
{LAST_DAY, date(2014, 6, 30), 2, date(2014, 8, 31)}, // Mon, Sun
// LastBusinessDay
{LAST_BUSINESS_DAY, date(2014, 7, 11), 1, date(2014, 8, 11)}, // Fri, Mon
{LAST_BUSINESS_DAY, date(2014, 7, 31), 1, date(2014, 8, 29)}, // Thu, Sun to Fri
{LAST_BUSINESS_DAY, date(2014, 6, 30), 2, date(2014, 8, 29)}, // Mon, Sun to Fri
};
}
@Test(dataProvider = "convention")
public void test_convention(PeriodAdditionConvention convention, LocalDate input, int months, LocalDate expected) {
assertEquals(convention.adjust(input, Period.ofMonths(months), HolidayCalendars.SAT_SUN), expected);
}
//-------------------------------------------------------------------------
@DataProvider(name = "name")
static Object[][] data_name() {
return new Object[][] {
{NONE, "None"},
{LAST_DAY, "LastDay"},
{LAST_BUSINESS_DAY, "LastBusinessDay"},
};
}
@Test(dataProvider = "name")
public void test_name(PeriodAdditionConvention convention, String name) {
assertEquals(convention.getName(), name);
}
@Test(dataProvider = "name")
public void test_toString(PeriodAdditionConvention convention, String name) {
assertEquals(convention.toString(), name);
}
@Test(dataProvider = "name")
public void test_of_lookup(PeriodAdditionConvention convention, String name) {
assertEquals(PeriodAdditionConvention.of(name), convention);
}
@Test(dataProvider = "name")
public void test_extendedEnum(PeriodAdditionConvention convention, String name) {
ImmutableMap<String, PeriodAdditionConvention> map = PeriodAdditionConvention.extendedEnum().lookupAll();
assertEquals(map.get(name), convention);
}
public void test_of_lookup_notFound() {
assertThrowsIllegalArg(() -> PeriodAdditionConvention.of("Rubbish"));
}
public void test_of_lookup_null() {
assertThrowsIllegalArg(() -> PeriodAdditionConvention.of(null));
}
//-------------------------------------------------------------------------
public void coverage() {
coverPrivateConstructor(PeriodAdditionConventions.class);
coverEnum(StandardPeriodAdditionConventions.class);
}
public void test_serialization() {
assertSerialization(LAST_DAY);
}
public void test_jodaConvert() {
assertJodaConvert(PeriodAdditionConvention.class, NONE);
assertJodaConvert(PeriodAdditionConvention.class, LAST_BUSINESS_DAY);
}
}