/** * Copyright (C) 2015 - 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.HolidayCalendarIds.NO_HOLIDAYS; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.assertThrows; import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertSame; import java.time.LocalDate; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.ImmutableReferenceData; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.ReferenceDataNotFoundException; /** * Test {@link HolidayCalendarId}. */ @Test public class HolidayCalendarIdTest { public void test_of_single() { HolidayCalendarId test = HolidayCalendarId.of("GB"); assertEquals(test.getName(), "GB"); assertEquals(test.getReferenceDataType(), HolidayCalendar.class); assertEquals(test.toString(), "GB"); } public void test_of_combined() { HolidayCalendarId test = HolidayCalendarId.of("GB+EU"); assertEquals(test.getName(), "EU+GB"); assertEquals(test.getReferenceDataType(), HolidayCalendar.class); assertEquals(test.toString(), "EU+GB"); HolidayCalendarId test2 = HolidayCalendarId.of("EU+GB"); assertSame(test, test2); } public void test_of_combined_NoHolidays() { HolidayCalendarId test = HolidayCalendarId.of("GB+NoHolidays+EU"); assertEquals(test.getName(), "EU+GB"); assertEquals(test.getReferenceDataType(), HolidayCalendar.class); assertEquals(test.toString(), "EU+GB"); } //------------------------------------------------------------------------- public void test_resolve_single() { HolidayCalendarId gb = HolidayCalendarId.of("GB"); HolidayCalendarId eu = HolidayCalendarId.of("EU"); HolidayCalendar gbCal = HolidayCalendars.SAT_SUN; ReferenceData refData = ImmutableReferenceData.of(gb, gbCal); assertEquals(gb.resolve(refData), gbCal); assertThrows(() -> eu.resolve(refData), ReferenceDataNotFoundException.class); assertEquals(refData.getValue(gb), gbCal); } public void test_resolve_combined_direct() { HolidayCalendarId gb = HolidayCalendarId.of("GB"); HolidayCalendar gbCal = HolidayCalendars.SAT_SUN; HolidayCalendarId eu = HolidayCalendarId.of("EU"); HolidayCalendar euCal = HolidayCalendars.FRI_SAT; HolidayCalendarId combined = gb.combinedWith(eu); HolidayCalendar combinedCal = euCal.combinedWith(gbCal); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of(combined, combinedCal)); assertEquals(combined.resolve(refData), combinedCal); assertEquals(refData.getValue(combined), combinedCal); } public void test_resolve_combined_indirect() { HolidayCalendarId gb = HolidayCalendarId.of("GB"); HolidayCalendar gbCal = HolidayCalendars.SAT_SUN; HolidayCalendarId eu = HolidayCalendarId.of("EU"); HolidayCalendar euCal = HolidayCalendars.FRI_SAT; HolidayCalendarId combined = gb.combinedWith(eu); HolidayCalendar combinedCal = euCal.combinedWith(gbCal); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of(gb, gbCal, eu, euCal)); assertEquals(combined.resolve(refData), combinedCal); assertEquals(refData.getValue(combined), combinedCal); } @Test public void testImmutableReferenceDataWithMergedHolidays() { HolidayCalendar hc = HolidayCalendars.FRI_SAT.combinedWith(HolidayCalendars.SAT_SUN); ImmutableReferenceData referenceData = ImmutableReferenceData.of(hc.getId(), hc); LocalDate date = BusinessDayAdjustment.of(BusinessDayConventions.PRECEDING, hc.getId()).adjust(LocalDate.of(2016, 8, 20), referenceData); assertEquals(LocalDate.of(2016, 8, 18), date); } //------------------------------------------------------------------------- public void test_combinedWith() { HolidayCalendarId gb = HolidayCalendarId.of("GB"); HolidayCalendarId eu = HolidayCalendarId.of("EU"); HolidayCalendarId us = HolidayCalendarId.of("US"); HolidayCalendarId combined1 = eu.combinedWith(us).combinedWith(gb); HolidayCalendarId combined2 = us.combinedWith(eu).combinedWith(gb.combinedWith(us)); assertEquals(combined1.getName(), "EU+GB+US"); assertEquals(combined1.toString(), "EU+GB+US"); assertEquals(combined2.getName(), "EU+GB+US"); assertEquals(combined2.toString(), "EU+GB+US"); assertEquals(combined1.equals(combined2), true); } public void test_combinedWithSelf() { HolidayCalendarId gb = HolidayCalendarId.of("GB"); assertEquals(gb.combinedWith(gb), gb); assertEquals(gb.combinedWith(NO_HOLIDAYS), gb); assertEquals(NO_HOLIDAYS.combinedWith(gb), gb); assertEquals(NO_HOLIDAYS.combinedWith(NO_HOLIDAYS), NO_HOLIDAYS); } //------------------------------------------------------------------------- public void test_equalsHashCode() { HolidayCalendarId a = HolidayCalendarId.of("GB"); HolidayCalendarId a2 = HolidayCalendarId.of("GB"); HolidayCalendarId b = HolidayCalendarId.of("EU"); assertEquals(a.hashCode(), a2.hashCode()); assertEquals(a.equals(a), true); assertEquals(a.equals(a2), true); assertEquals(a.equals(b), false); assertEquals(a.equals(null), false); assertEquals(a.equals("Rubbish"), false); } //------------------------------------------------------------------------- public void coverage() { coverPrivateConstructor(HolidayCalendarIds.class); } public void test_serialization() { HolidayCalendarId test = HolidayCalendarId.of("US"); assertSerialization(test); } }