package org.marketcetera.quickfix; import org.marketcetera.core.MarketceteraTestSuite; import org.marketcetera.core.ClassVersion; import org.marketcetera.trade.Equity; import junit.framework.Test; import junit.framework.TestCase; import java.math.BigDecimal; import quickfix.Message; import quickfix.field.Side; import quickfix.field.TimeInForce; import quickfix.field.Price; import quickfix.field.OrderQty; /** * Verify that the round-tripping of BigDecimals works with QFJ * this is testing the fix for bug QFJ-300 (http://www.quickfixj.org/jira/browse/QFJ-300) * * @author toli * @version $Id: DecimalFieldTest.java 16154 2012-07-14 16:34:05Z colin $ */ @ClassVersion("$Id: DecimalFieldTest.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$ public class DecimalFieldTest extends TestCase { public DecimalFieldTest(String inName) { super(inName); } public static Test suite() { return new MarketceteraTestSuite(DecimalFieldTest.class); } /** Verify that the round-tripping of BigDecimals works with QFJ * this is testing the fix for bug QFJ-300 (http://www.quickfixj.org/jira/browse/QFJ-300) * */ public void testQFJ_BigDecimal() throws Exception { BigDecimal originalPrice = new BigDecimal("10.3000"); //$NON-NLS-1$ assertEquals(4, originalPrice.scale()); FIXMessageFactory msgFactory = FIXVersion.FIX42.getMessageFactory(); Message newOrder = msgFactory.newLimitOrder("ASDF", Side.BUY, new BigDecimal("100"), new Equity("FOO"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ originalPrice, TimeInForce.DAY, "123"); //$NON-NLS-1$ BigDecimal extractedPrice = newOrder.getDecimal(Price.FIELD); assertEquals(4, extractedPrice.scale()); assertEquals(new BigDecimal("10.3000"), extractedPrice); //$NON-NLS-1$ String newOrderString = newOrder.toString(); Message rehydratedMessage = new Message(newOrderString); BigDecimal rehydratedPrice = rehydratedMessage.getDecimal(Price.FIELD); assertEquals(new BigDecimal("10.3000"), rehydratedPrice); //$NON-NLS-1$ assertEquals(4, rehydratedPrice.scale()); } public void testZero() throws Exception { FIXMessageFactory msgFactory = FIXVersion.FIX42.getMessageFactory(); Message newOrder = msgFactory.newLimitOrder("ASDF", Side.BUY, new BigDecimal(0), new Equity("FOO"), //$NON-NLS-1$ //$NON-NLS-2$ BigDecimal.ZERO, TimeInForce.DAY, "123"); //$NON-NLS-1$ assertEquals(BigDecimal.ZERO, newOrder.getDecimal(Price.FIELD)); assertEquals(BigDecimal.ZERO, newOrder.getDecimal(OrderQty.FIELD)); } }