/**
* 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.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.opengamma.strata.basics.ReferenceData;
/**
* Test {@link AdjustableDate}.
*/
@Test
public class AdjustableDateTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
private static final BusinessDayAdjustment BDA_NONE = BusinessDayAdjustment.NONE;
private static final BusinessDayAdjustment BDA_FOLLOW_SAT_SUN =
BusinessDayAdjustment.of(BusinessDayConventions.FOLLOWING, HolidayCalendarIds.SAT_SUN);
private static final LocalDate THU_2014_07_10 = LocalDate.of(2014, 7, 10);
private static final LocalDate FRI_2014_07_11 = LocalDate.of(2014, 7, 11);
private static final LocalDate SAT_2014_07_12 = LocalDate.of(2014, 7, 12);
private static final LocalDate SUN_2014_07_13 = LocalDate.of(2014, 7, 13);
private static final LocalDate MON_2014_07_14 = LocalDate.of(2014, 7, 14);
private static final LocalDate TUE_2014_07_15 = LocalDate.of(2014, 7, 15);
//-------------------------------------------------------------------------
public void test_of_1arg() {
AdjustableDate test = AdjustableDate.of(FRI_2014_07_11);
assertEquals(test.getUnadjusted(), FRI_2014_07_11);
assertEquals(test.getAdjustment(), BDA_NONE);
assertEquals(test.toString(), "2014-07-11");
assertEquals(test.adjusted(REF_DATA), FRI_2014_07_11);
}
public void test_of_2args_withAdjustment() {
AdjustableDate test = AdjustableDate.of(FRI_2014_07_11, BDA_FOLLOW_SAT_SUN);
assertEquals(test.getUnadjusted(), FRI_2014_07_11);
assertEquals(test.getAdjustment(), BDA_FOLLOW_SAT_SUN);
assertEquals(test.toString(), "2014-07-11 adjusted by Following using calendar Sat/Sun");
assertEquals(test.adjusted(REF_DATA), FRI_2014_07_11);
}
public void test_of_2args_withNoAdjustment() {
AdjustableDate test = AdjustableDate.of(FRI_2014_07_11, BDA_NONE);
assertEquals(test.getUnadjusted(), FRI_2014_07_11);
assertEquals(test.getAdjustment(), BDA_NONE);
assertEquals(test.toString(), "2014-07-11");
assertEquals(test.adjusted(REF_DATA), FRI_2014_07_11);
}
public void test_of_null() {
assertThrowsIllegalArg(() -> AdjustableDate.of(null));
assertThrowsIllegalArg(() -> AdjustableDate.of(null, BDA_FOLLOW_SAT_SUN));
assertThrowsIllegalArg(() -> AdjustableDate.of(FRI_2014_07_11, null));
assertThrowsIllegalArg(() -> AdjustableDate.of(null, null));
}
//-------------------------------------------------------------------------
@DataProvider(name = "adjusted")
static Object[][] data_adjusted() {
return new Object[][] {
{THU_2014_07_10, THU_2014_07_10},
{FRI_2014_07_11, FRI_2014_07_11},
{SAT_2014_07_12, MON_2014_07_14},
{SUN_2014_07_13, MON_2014_07_14},
{MON_2014_07_14, MON_2014_07_14},
{TUE_2014_07_15, TUE_2014_07_15},
};
}
@Test(dataProvider = "adjusted")
public void test_adjusted(LocalDate date, LocalDate expected) {
AdjustableDate test = AdjustableDate.of(date, BDA_FOLLOW_SAT_SUN);
assertEquals(test.adjusted(REF_DATA), expected);
}
//-------------------------------------------------------------------------
public void equals() {
AdjustableDate a1 = AdjustableDate.of(FRI_2014_07_11, BDA_FOLLOW_SAT_SUN);
AdjustableDate a2 = AdjustableDate.of(FRI_2014_07_11, BDA_FOLLOW_SAT_SUN);
AdjustableDate b = AdjustableDate.of(SAT_2014_07_12, BDA_FOLLOW_SAT_SUN);
AdjustableDate c = AdjustableDate.of(FRI_2014_07_11, BDA_NONE);
assertEquals(a1.equals(a2), true);
assertEquals(a1.equals(b), false);
assertEquals(a1.equals(c), false);
}
//-------------------------------------------------------------------------
public void coverage() {
coverImmutableBean(AdjustableDate.of(FRI_2014_07_11, BDA_FOLLOW_SAT_SUN));
}
public void test_serialization() {
assertSerialization(AdjustableDate.of(FRI_2014_07_11, BDA_FOLLOW_SAT_SUN));
}
}