package org.marketcetera.event.beans; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import java.math.BigDecimal; import java.util.Date; import org.junit.Test; import org.marketcetera.marketdata.DateUtils; import org.marketcetera.module.ExpectedFailure; import org.marketcetera.trade.Equity; import org.marketcetera.trade.Instrument; import org.marketcetera.trade.Option; import org.marketcetera.trade.OptionType; import org.marketcetera.util.test.EqualityAssert; /* $License$ */ /** * Tests {@link MarketstatBean}. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: MarketstatBeanTest.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ public class MarketstatBeanTest extends AbstractEventBeanTestBase<MarketstatBean> { /** * Tests {@link MarketstatBean#copy(MarketstatBean)}. * * @throws Exception if an unexpected error occurs */ @Test public void copy() throws Exception { EventBeanTest.doCopyTest(new MarketstatBean()); doCopyTest(new MarketstatBean()); } /** * Tests {@link MarketstatBean#getOpen()} and {@link MarketstatBean#setOpen(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void open() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getOpen()); bean.setOpen(null); assertNull(bean.getOpen()); BigDecimal open = new BigDecimal("-10"); bean.setOpen(open); assertEquals(open, bean.getOpen()); open = BigDecimal.ZERO; bean.setOpen(open); assertEquals(open, bean.getOpen()); open = BigDecimal.TEN; bean.setOpen(open); assertEquals(open, bean.getOpen()); } /** * Tests {@link MarketstatBean#getHigh()} and {@link MarketstatBean#setHigh(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void high() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getHigh()); bean.setHigh(null); assertNull(bean.getHigh()); BigDecimal high = new BigDecimal("-10"); bean.setHigh(high); assertEquals(high, bean.getHigh()); high = BigDecimal.ZERO; bean.setHigh(high); assertEquals(high, bean.getHigh()); high = BigDecimal.TEN; bean.setHigh(high); assertEquals(high, bean.getHigh()); } /** * Tests {@link MarketstatBean#getLow()} and {@link MarketstatBean#setLow(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void low() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getLow()); bean.setLow(null); assertNull(bean.getLow()); BigDecimal low = new BigDecimal("-10"); bean.setLow(low); assertEquals(low, bean.getLow()); low = BigDecimal.ZERO; bean.setLow(low); assertEquals(low, bean.getLow()); low = BigDecimal.TEN; bean.setLow(low); assertEquals(low, bean.getLow()); } /** * Tests {@link MarketstatBean#getClose()} and {@link MarketstatBean#setClose(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void close() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getClose()); bean.setClose(null); assertNull(bean.getClose()); BigDecimal close = new BigDecimal("-10"); bean.setClose(close); assertEquals(close, bean.getClose()); close = BigDecimal.ZERO; bean.setClose(close); assertEquals(close, bean.getClose()); close = BigDecimal.TEN; bean.setClose(close); assertEquals(close, bean.getClose()); } /** * Tests {@link MarketstatBean#getPreviousClose()} and {@link MarketstatBean#setPreviousClose(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void previousClose() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getPreviousClose()); bean.setPreviousClose(null); assertNull(bean.getPreviousClose()); BigDecimal previousClose = new BigDecimal("-10"); bean.setPreviousClose(previousClose); assertEquals(previousClose, bean.getPreviousClose()); previousClose = BigDecimal.ZERO; bean.setPreviousClose(previousClose); assertEquals(previousClose, bean.getPreviousClose()); previousClose = BigDecimal.TEN; bean.setPreviousClose(previousClose); assertEquals(previousClose, bean.getPreviousClose()); } /** * Tests {@link MarketstatBean#getVolume()} and {@link MarketstatBean#setVolume(BigDecimal)}. * * @throws Exception if an unexpected error occurs */ @Test public void volume() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getVolume()); bean.setVolume(null); assertNull(bean.getVolume()); BigDecimal volume = new BigDecimal("-10"); bean.setVolume(volume); assertEquals(volume, bean.getVolume()); volume = BigDecimal.ZERO; bean.setVolume(volume); assertEquals(volume, bean.getVolume()); volume = BigDecimal.TEN; bean.setVolume(volume); assertEquals(volume, bean.getVolume()); } /** * Tests {@link MarketstatBean#getCloseDate()} and {@link MarketstatBean#setCloseDate(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void closeDate() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getCloseDate()); bean.setCloseDate(null); assertNull(bean.getCloseDate()); bean.setCloseDate(""); assertEquals("", bean.getCloseDate()); String closeDate = DateUtils.dateToString(new Date()); bean.setCloseDate(closeDate); assertEquals(closeDate, bean.getCloseDate()); } /** * Tests {@link MarketstatBean#getPreviousCloseDate()} and {@link MarketstatBean#setPreviousCloseDate(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void previousCloseDate() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getPreviousCloseDate()); bean.setPreviousCloseDate(null); assertNull(bean.getPreviousCloseDate()); bean.setPreviousCloseDate(""); assertEquals("", bean.getPreviousCloseDate()); String previousCloseDate = DateUtils.dateToString(new Date()); bean.setPreviousCloseDate(previousCloseDate); assertEquals(previousCloseDate, bean.getPreviousCloseDate()); } /** * Tests {@link MarketstatBean#getTradeHighTime()} and {@link MarketstatBean#setTradeHighTime(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void tradeHighTime() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getTradeHighTime()); bean.setTradeHighTime(null); assertNull(bean.getTradeHighTime()); bean.setTradeHighTime(""); assertEquals("", bean.getTradeHighTime()); String tradeHighTime = DateUtils.dateToString(new Date()); bean.setTradeHighTime(tradeHighTime); assertEquals(tradeHighTime, bean.getTradeHighTime()); } /** * Tests {@link MarketstatBean#getTradeLowTime()} and {@link MarketstatBean#setTradeLowTime(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void tradeLowTime() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getTradeLowTime()); bean.setTradeLowTime(null); assertNull(bean.getTradeLowTime()); bean.setTradeLowTime(""); assertEquals("", bean.getTradeLowTime()); String tradeLowTime = DateUtils.dateToString(new Date()); bean.setTradeLowTime(tradeLowTime); assertEquals(tradeLowTime, bean.getTradeLowTime()); } /** * Tests {@link MarketstatBean#getOpenExchange()} and {@link MarketstatBean#setOpenExchange(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void openExchange() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getOpenExchange()); bean.setOpenExchange(null); assertNull(bean.getOpenExchange()); bean.setOpenExchange(""); assertEquals("", bean.getOpenExchange()); String openExchange = "test exchange"; bean.setOpenExchange(openExchange); assertEquals(openExchange, bean.getOpenExchange()); } /** * Tests {@link MarketstatBean#getHighExchange()} and {@link MarketstatBean#setHighExchange(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void highExchange() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getHighExchange()); bean.setHighExchange(null); assertNull(bean.getHighExchange()); bean.setHighExchange(""); assertEquals("", bean.getHighExchange()); String highExchange = "test exchange"; bean.setHighExchange(highExchange); assertEquals(highExchange, bean.getHighExchange()); } /** * Tests {@link MarketstatBean#getLowExchange()} and {@link MarketstatBean#setLowExchange(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void lowExchange() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getLowExchange()); bean.setLowExchange(null); assertNull(bean.getLowExchange()); bean.setLowExchange(""); assertEquals("", bean.getLowExchange()); String lowExchange = "test exchange"; bean.setLowExchange(lowExchange); assertEquals(lowExchange, bean.getLowExchange()); } /** * Tests {@link MarketstatBean#getCloseExchange()} and {@link MarketstatBean#setCloseExchange(String)}. * * @throws Exception if an unexpected error occurs */ @Test public void closeExchange() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getCloseExchange()); bean.setCloseExchange(null); assertNull(bean.getCloseExchange()); bean.setCloseExchange(""); assertEquals("", bean.getCloseExchange()); String closeExchange = "test exchange"; bean.setCloseExchange(closeExchange); assertEquals(closeExchange, bean.getCloseExchange()); } /** * Tests {@link E#getInstrument()} and {@link E#setInstrument(org.marketcetera.trade.Instrument)}. * * @throws Exception if an unexpected error occurs */ @Test public void instrument() throws Exception { MarketstatBean bean = constructBean(); assertNull(bean.getInstrument()); assertNull(bean.getInstrumentAsString()); Equity equity = new Equity("METC"); Option option = new Option("METC", "201001", BigDecimal.TEN, OptionType.Put); bean.setInstrument(equity); assertEquals(equity, bean.getInstrument()); assertEquals(equity.getSymbol(), bean.getInstrumentAsString()); bean.setInstrument(option); assertEquals(option, bean.getInstrument()); assertEquals(option.getSymbol(), bean.getInstrumentAsString()); } /** * Tests {@link MarketstatBean#hashCode()} and {@link MarketstatBean#equals(Object)}. * * @throws Exception if an unexpected error occurs */ @Override public void hashCodeAndEquals() throws Exception { // test empty bean equality (and inequality with an object of a different class and null) // beans 1 & 2 will always be the same, bean 3 will always be different MarketstatBean bean1 = constructBean(); MarketstatBean bean2 = constructBean(); MarketstatBean bean3 = constructBean(); // verify that null attributes are still equal (mostly this is that equals/hashcode doesn't NPE with null attributes) assertNull(bean1.getClose()); assertNull(bean2.getClose()); assertNull(bean1.getCloseDate()); assertNull(bean2.getCloseDate()); assertNull(bean1.getCloseExchange()); assertNull(bean2.getCloseExchange()); assertNull(bean1.getHigh()); assertNull(bean2.getHigh()); assertNull(bean1.getHighExchange()); assertNull(bean2.getHighExchange()); assertNull(bean1.getInstrument()); assertNull(bean2.getInstrument()); assertNull(bean1.getLow()); assertNull(bean2.getLow()); assertNull(bean1.getLowExchange()); assertNull(bean2.getLowExchange()); assertNull(bean1.getOpen()); assertNull(bean2.getOpen()); assertNull(bean1.getOpenExchange()); assertNull(bean2.getOpenExchange()); assertNull(bean1.getPreviousClose()); assertNull(bean2.getPreviousClose()); assertNull(bean1.getPreviousCloseDate()); assertNull(bean2.getPreviousCloseDate()); assertNull(bean1.getTradeHighTime()); assertNull(bean2.getTradeHighTime()); assertNull(bean1.getTradeLowTime()); assertNull(bean2.getTradeLowTime()); assertNull(bean1.getVolume()); assertNull(bean2.getVolume()); EqualityAssert.assertEquality(bean1, bean2, this, null); // differs by a superclass attribute bean1.setMessageId(1); bean2.setMessageId(bean1.getMessageId()); assertFalse(bean1.getMessageId() == bean3.getMessageId()); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setMessageId(bean1.getMessageId()); assertEquals(bean1.getTimestamp(), bean3.getTimestamp()); // test close // set bean3 to non-null assertNull(bean1.getClose()); bean3.setClose(BigDecimal.TEN); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setClose(bean1.getClose()); // test closeDate // set bean3 to non-null assertNull(bean1.getCloseDate()); bean3.setCloseDate(DateUtils.dateToString(new Date())); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setCloseDate(bean1.getCloseDate()); // test closeExchange // set bean3 to non-null assertNull(bean1.getCloseExchange()); bean3.setCloseExchange("test exchange"); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setCloseExchange(bean1.getCloseExchange()); // test closePrice // set bean3 to non-null assertNull(bean1.getClose()); bean3.setClose(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setClose(bean1.getClose()); // test highExchange // set bean3 to non-null assertNull(bean1.getHighExchange()); bean3.setHighExchange("test exchange"); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setHighExchange(bean1.getHighExchange()); // test highPrice // set bean3 to non-null assertNull(bean1.getHigh()); bean3.setHigh(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setHigh(bean1.getHigh()); // test instrument // set bean3 to non-null assertNull(bean1.getInstrument()); bean3.setInstrument(new Equity("METC")); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setInstrument(bean1.getInstrument()); // test lowExchange // set bean3 to non-null assertNull(bean1.getLowExchange()); bean3.setLowExchange("test exchange"); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setLowExchange(bean1.getLowExchange()); // test lowPrice // set bean3 to non-null assertNull(bean1.getLow()); bean3.setLow(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setLow(bean1.getLow()); // test openExchange // set bean3 to non-null assertNull(bean1.getOpenExchange()); bean3.setOpenExchange("test exchange"); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setOpenExchange(bean1.getOpenExchange()); // test openPrice // set bean3 to non-null assertNull(bean1.getOpen()); bean3.setOpen(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setOpen(bean1.getOpen()); // test previousCloseDate // set bean3 to non-null assertNull(bean1.getPreviousCloseDate()); bean3.setPreviousCloseDate(DateUtils.dateToString(new Date())); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setPreviousCloseDate(bean1.getPreviousCloseDate()); // test previousClosePrice // set bean3 to non-null assertNull(bean1.getPreviousClose()); bean3.setPreviousClose(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setPreviousClose(bean1.getPreviousClose()); // test tradeHighTime // set bean3 to non-null assertNull(bean1.getTradeHighTime()); bean3.setTradeHighTime(DateUtils.dateToString(new Date())); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setTradeHighTime(bean1.getTradeHighTime()); // test tradeLowTime // set bean3 to non-null assertNull(bean1.getTradeLowTime()); bean3.setTradeLowTime(DateUtils.dateToString(new Date())); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setTradeLowTime(bean1.getTradeLowTime()); // test volume // set bean3 to non-null assertNull(bean1.getVolume()); bean3.setVolume(BigDecimal.ONE); EqualityAssert.assertEquality(bean1, bean2, bean3); bean3.setVolume(bean1.getVolume()); } /* (non-Javadoc) * @see org.marketcetera.event.beans.AbstractEventBeanTestBase#doAdditionalValidationTest(org.marketcetera.event.beans.EventBean) */ @Override protected void doAdditionalValidationTest(final MarketstatBean inBean) throws Exception { assertNull(inBean.getInstrument()); new ExpectedFailure<IllegalArgumentException>(VALIDATION_NULL_INSTRUMENT.getText()) { @Override protected void run() throws Exception { inBean.validate(); } }; inBean.setInstrument(new Equity("METC")); } /* (non-Javadoc) * @see org.marketcetera.event.beans.AbstractEventBeanTestBase#constructBean() */ @Override protected MarketstatBean constructBean() { return new MarketstatBean(); } /** * Tests {@link MarketstatBean#copy(MarketstatBean)}. * * @param inBean an <code>MarketstatBean</code> value * @throws Exception if an unexpected error occurs */ static void doCopyTest(MarketstatBean inBean) throws Exception { verifyMarketstatBean(inBean, null, null, null, null, null, null, null, null, null, null, null, null, null, null); MarketstatBean newBean = MarketstatBean.copy(inBean); verifyMarketstatBean(newBean, null, null, null, null, null, null, null, null, null, null, null, null, null, null); long useThisTimestamp = System.currentTimeMillis(); long oneDay = 1000l * 60l * 60l * 24l; BigDecimal close = BigDecimal.ONE; String closeDate = DateUtils.dateToString(new Date(useThisTimestamp)); String closeExchange = "close exchange"; BigDecimal high = close.add(BigDecimal.ONE); String highExchange = "high exchange"; Instrument instrument = new Equity("METC"); BigDecimal low = high.add(BigDecimal.ONE); BigDecimal open = low.add(BigDecimal.ONE); String openExchange = "open exchange"; BigDecimal previousClose = open.add(BigDecimal.ONE); String previousCloseDate = DateUtils.dateToString(new Date(useThisTimestamp + (oneDay * 1))); String tradeHighTime = DateUtils.dateToString(new Date(useThisTimestamp + (oneDay * 2))); String tradeLowTime = DateUtils.dateToString(new Date(useThisTimestamp + (oneDay * 3))); BigDecimal volume = open.add(BigDecimal.ONE); inBean.setClose(close); inBean.setCloseDate(closeDate); inBean.setCloseExchange(closeExchange); inBean.setHigh(high); inBean.setHighExchange(highExchange); inBean.setInstrument(instrument); inBean.setLow(low); inBean.setOpen(open); inBean.setOpenExchange(openExchange); inBean.setPreviousClose(previousClose); inBean.setPreviousCloseDate(previousCloseDate); inBean.setTradeHighTime(tradeHighTime); inBean.setTradeLowTime(tradeLowTime); inBean.setVolume(volume); verifyMarketstatBean(inBean, close, closeDate, closeExchange, high, highExchange, instrument, low, open, openExchange, previousClose, previousCloseDate, tradeHighTime, tradeLowTime, volume); newBean = MarketstatBean.copy(inBean); verifyMarketstatBean(newBean, close, closeDate, closeExchange, high, highExchange, instrument, low, open, openExchange, previousClose, previousCloseDate, tradeHighTime, tradeLowTime, volume); } /** * Verifies that the given <code>MarketstatBean</code> contains the given attributes. * * @param inBean an <code>MarketstatBean</code> value * @param inExpectedClose a <code>BigDecimal</code> value * @param inExpectedCloseDate a <code>String</code> value * @param inExpectedCloseExchange a <code>String</code> value * @param inExpectedHigh a <code>BigDecimal</code> value * @param inExpectedHighExchange a <code>String</code> value * @param inExpectedInstrument an <code>Instrument</code> value * @param inExpectedLow a <code>BigDecimal</code> value * @param inExpectedOpen a <code>BigDecimal</code> value * @param inExpectedOpenExchange a <code>String</code> value * @param inExpectedPreviousClose a <code>BigDecimal</code> value * @param inExpectedPreviousCloseDate a <code>String</code> value * @param inExpectedTradeHighTime a <code>String</code> value * @param inExpectedTradeLowTime a <code>String</code> value * @param inExpectedVolume a <code>BigDecimal</code> value * @throws Exception if an unexpected error occurs */ static void verifyMarketstatBean(MarketstatBean inBean, BigDecimal inExpectedClose, String inExpectedCloseDate, String inExpectedCloseExchange, BigDecimal inExpectedHigh, String inExpectedHighExchange, Instrument inExpectedInstrument, BigDecimal inExpectedLow, BigDecimal inExpectedOpen, String inExpectedOpenExchange, BigDecimal inExpectedPreviousClose, String inExpectedPreviousCloseDate, String inExpectedTradeHighTime, String inExpectedTradeLowTime, BigDecimal inExpectedVolume) throws Exception { assertEquals(inExpectedClose, inBean.getClose()); assertEquals(inExpectedCloseDate, inBean.getCloseDate()); assertEquals(inExpectedCloseExchange, inBean.getCloseExchange()); assertEquals(inExpectedHigh, inBean.getHigh()); assertEquals(inExpectedHighExchange, inBean.getHighExchange()); assertEquals(inExpectedInstrument, inBean.getInstrument()); assertEquals(inExpectedLow, inBean.getLow()); assertEquals(inExpectedOpen, inBean.getOpen()); assertEquals(inExpectedOpenExchange, inBean.getOpenExchange()); assertEquals(inExpectedPreviousClose, inBean.getPreviousClose()); assertEquals(inExpectedPreviousCloseDate, inBean.getPreviousCloseDate()); assertEquals(inExpectedTradeHighTime, inBean.getTradeHighTime()); assertEquals(inExpectedTradeLowTime, inBean.getTradeLowTime()); assertEquals(inExpectedVolume, inBean.getVolume()); } }