package org.marketcetera.quickfix; import java.math.BigDecimal; import junit.framework.Test; import org.marketcetera.core.FIXVersionTestSuite; import org.marketcetera.core.FIXVersionedTestCase; import quickfix.Group; import quickfix.Message; import quickfix.field.AvgPx; import quickfix.field.ClOrdID; import quickfix.field.CumQty; import quickfix.field.CxlQty; import quickfix.field.ExecID; import quickfix.field.ExecTransType; import quickfix.field.ListID; import quickfix.field.MsgType; import quickfix.field.NoOrders; import quickfix.field.NoRpts; import quickfix.field.OrdStatus; import quickfix.field.OrderID; import quickfix.field.OrderQty; import quickfix.field.PutOrCall; import quickfix.field.RptSeq; import quickfix.field.Side; import quickfix.field.Symbol; public class FIXValueExtractorTest extends FIXVersionedTestCase { public FIXValueExtractorTest(String inName, FIXVersion version) { super(inName, version); } public static Test suite() { return new FIXVersionTestSuite(FIXValueExtractorTest.class,FIXVersion.values()); } public void testExtractHumanValue() throws Exception { FIXValueExtractor extractor = new FIXValueExtractor(fixDD.getDictionary(), msgFactory); Message message = msgFactory.createMessage(MsgType.EXECUTION_REPORT); message.setField(new OrderID("1")); //$NON-NLS-1$ message.setField(new ExecID("2")); //$NON-NLS-1$ message.setField(new ExecTransType(ExecTransType.NEW)); message.setField(new OrdStatus(OrdStatus.FILLED)); message.setField(new Symbol("R")); //$NON-NLS-1$ message.setField(new Side(Side.BUY)); message.setField(new OrderQty(new BigDecimal("123"))); //$NON-NLS-1$ message.setField(new CumQty(new BigDecimal("124"))); //$NON-NLS-1$ message.setField(new AvgPx(new BigDecimal("123.4"))); //$NON-NLS-1$ assertEquals("1", extractor.extractValue(message, OrderID.FIELD, null, null, null).toString()); //$NON-NLS-1$ assertEquals("2", extractor.extractValue(message, ExecID.FIELD, null, null, null).toString()); //$NON-NLS-1$ if (fixVersion!=FIXVersion.FIX44){ assertEquals("NEW", extractor.extractValue(message, ExecTransType.FIELD, null, null, null, true)); //$NON-NLS-1$ } assertEquals("FILLED", extractor.extractValue(message, OrdStatus.FIELD, null, null, null, true)); //$NON-NLS-1$ assertEquals("R", extractor.extractValue(message, Symbol.FIELD, null, null, null)); //$NON-NLS-1$ assertEquals(Side.BUY, ((String)extractor.extractValue(message, Side.FIELD, null, null, null)).charAt(0)); assertEquals("123", ((BigDecimal)extractor.extractValue(message, OrderQty.FIELD, null, null, null)).toPlainString()); //$NON-NLS-1$ assertEquals("124", ((BigDecimal)extractor.extractValue(message, CumQty.FIELD, null, null, null)).toPlainString()); //$NON-NLS-1$ assertEquals("123.4", ((BigDecimal)extractor.extractValue(message, AvgPx.FIELD, null, null, null)).toPlainString()); //$NON-NLS-1$ } public void testExtractValue() throws Exception { FIXValueExtractor extractor = new FIXValueExtractor(fixDD.getDictionary(), msgFactory); Message message = msgFactory.createMessage(MsgType.LIST_STATUS); message.setField(new ListID("1")); //$NON-NLS-1$ message.setField(new NoRpts(11)); message.setField(new RptSeq(7)); Group group = msgFactory.createGroup(MsgType.LIST_STATUS, NoOrders.FIELD); group.setField(new ClOrdID("1")); //$NON-NLS-1$ group.setField(new CumQty(new BigDecimal("123"))); //$NON-NLS-1$ group.setField(new CxlQty(new BigDecimal("123.400"))); //$NON-NLS-1$ group.setField(new AvgPx(new BigDecimal("123.40"))); //$NON-NLS-1$ message.addGroup(group); group = msgFactory.createGroup(MsgType.LIST_STATUS, NoOrders.FIELD); group.setField(new ClOrdID("2")); //$NON-NLS-1$ group.setField(new CumQty(new BigDecimal("124"))); //$NON-NLS-1$ group.setField(new CxlQty(new BigDecimal("124.400"))); //$NON-NLS-1$ group.setField(new AvgPx(new BigDecimal("124.40"))); //$NON-NLS-1$ message.addGroup(group); assertEquals("1", extractor.extractValue(message, ListID.FIELD, null, null, null).toString()); //$NON-NLS-1$ assertEquals("11", extractor.extractValue(message, NoRpts.FIELD, null, null, null).toString()); //$NON-NLS-1$ assertEquals("7", extractor.extractValue(message, RptSeq.FIELD, null, null, null).toString()); //$NON-NLS-1$ assertEquals("123", ((BigDecimal)extractor.extractValue(message, CumQty.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "1")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("123.400", ((BigDecimal)extractor.extractValue(message, CxlQty.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "1")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("123.40", ((BigDecimal)extractor.extractValue(message, AvgPx.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "1")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("124", ((BigDecimal)extractor.extractValue(message, CumQty.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "2")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("124.400", ((BigDecimal)extractor.extractValue(message, CxlQty.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "2")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("124.40", ((BigDecimal)extractor.extractValue(message, AvgPx.FIELD, NoOrders.FIELD, ClOrdID.FIELD, "2")).toPlainString()); //$NON-NLS-1$ //$NON-NLS-2$ } public void testPutOrCall() { FIXValueExtractor extractor = new FIXValueExtractor(fixDD .getDictionary(), msgFactory); if (fixDD.getDictionary().hasFieldValue(PutOrCall.FIELD)) { Message message = msgFactory .createMessage(MsgType.EXECUTION_REPORT); message.setField(new PutOrCall(PutOrCall.CALL)); assertEquals("CALL", extractor.extractValue(message, PutOrCall.FIELD, null, null, null, true)); message.setField(new PutOrCall(PutOrCall.PUT)); assertEquals("PUT", extractor.extractValue(message, PutOrCall.FIELD, null, null, null, true)); } } }