/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.time; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.testng.annotations.Test; import org.threeten.bp.LocalDateTime; import org.threeten.bp.ZoneId; import org.threeten.bp.ZoneOffset; import org.threeten.bp.ZonedDateTime; import com.opengamma.util.test.TestGroup; /** * Test Expiry. */ @Test(groups = TestGroup.UNIT) public class ExpiryTest { private static final FudgeContext s_fudgeContext = new FudgeContext(); static { s_fudgeContext.getTypeDictionary().addType(ExpiryFudgeBuilder.SECONDARY_TYPE_INSTANCE); s_fudgeContext.getObjectDictionary().addBuilder(Expiry.class, new ExpiryFudgeBuilder()); } private static FudgeMsg cycleMessage(final FudgeMsg message) { final byte[] encoded = s_fudgeContext.toByteArray(message); return s_fudgeContext.deserialize(encoded).getMessage(); } private static void testExpiry(final Expiry expiry) { final FudgeSerializer serializer = new FudgeSerializer(s_fudgeContext); final MutableFudgeMsg messageIn = serializer.newMessage(); serializer.addToMessage(messageIn, "test", null, expiry); final FudgeMsg messageOut = cycleMessage(messageIn); final FudgeDeserializer dsrContext = new FudgeDeserializer(s_fudgeContext); final Expiry result = dsrContext.fieldValueToObject(Expiry.class, messageOut.getByName("test")); assertEquals(expiry, result); assertEquals(expiry.getExpiry().getZone(), result.getExpiry().getZone()); } public void testFudgeMessageUTC() { for (ExpiryAccuracy accuracy : ExpiryAccuracy.values()) { testExpiry(new Expiry(ZonedDateTime.of(LocalDateTime.now(), ZoneOffset.UTC), accuracy)); } } public void testFudgeMessageNonUTC() { for (ExpiryAccuracy accuracy : ExpiryAccuracy.values()) { testExpiry(new Expiry(ZonedDateTime.of(LocalDateTime.now(), ZoneId.of("GMT+02:00")), accuracy)); } } public void testEqualsToAccuracy() { final ZonedDateTime zdtMinute = ZonedDateTime.of(LocalDateTime.of(2011, 7, 12, 12, 30, 0, 0), ZoneOffset.UTC); final ZonedDateTime zdtHour = ZonedDateTime.of(LocalDateTime.of(2011, 7, 12, 12, 45, 0, 0), ZoneOffset.UTC); final ZonedDateTime zdtDay = ZonedDateTime.of(LocalDateTime.of(2011, 7, 12, 11, 45, 0, 0), ZoneOffset.UTC); final ZonedDateTime zdtMonth = ZonedDateTime.of(LocalDateTime.of(2011, 7, 11, 11, 45, 0, 0), ZoneOffset.UTC); final ZonedDateTime zdtYear = ZonedDateTime.of(LocalDateTime.of(2011, 6, 11, 11, 45, 0, 0), ZoneOffset.UTC); final ZonedDateTime zdtNone = ZonedDateTime.of(LocalDateTime.of(2010, 6, 11, 11, 45, 0, 0), ZoneOffset.UTC); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.MIN_HOUR_DAY_MONTH_YEAR, zdtMinute, zdtMinute)); assertFalse(Expiry.equalsToAccuracy(ExpiryAccuracy.MIN_HOUR_DAY_MONTH_YEAR, zdtMinute, zdtHour)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.HOUR_DAY_MONTH_YEAR, zdtHour, zdtMinute)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.HOUR_DAY_MONTH_YEAR, zdtHour, zdtHour)); assertFalse(Expiry.equalsToAccuracy(ExpiryAccuracy.HOUR_DAY_MONTH_YEAR, zdtHour, zdtDay)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.DAY_MONTH_YEAR, zdtDay, zdtHour)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.DAY_MONTH_YEAR, zdtDay, zdtDay)); assertFalse(Expiry.equalsToAccuracy(ExpiryAccuracy.DAY_MONTH_YEAR, zdtDay, zdtMonth)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.MONTH_YEAR, zdtMonth, zdtDay)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.MONTH_YEAR, zdtMonth, zdtMonth)); assertFalse(Expiry.equalsToAccuracy(ExpiryAccuracy.MONTH_YEAR, zdtMonth, zdtYear)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.YEAR, zdtYear, zdtMinute)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.YEAR, zdtYear, zdtMonth)); assertTrue(Expiry.equalsToAccuracy(ExpiryAccuracy.YEAR, zdtYear, zdtYear)); assertFalse(Expiry.equalsToAccuracy(ExpiryAccuracy.YEAR, zdtYear, zdtNone)); } }