package org.marketcetera.core.position.impl;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
import static org.marketcetera.core.position.impl.OrderingComparison.comparesEqualTo;
import java.math.BigDecimal;
import org.junit.Test;
import org.marketcetera.core.position.PositionMetrics;
import org.marketcetera.module.ExpectedFailure;
/* $License$ */
/**
* Test {@link PositionMetricsImpl}.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: PositionMetricsImplTest.java 16154 2012-07-14 16:34:05Z colin $
* @since 1.5.0
*/
public class PositionMetricsImplTest {
@Test
public void testConstructor() throws Exception {
assertPositionMetrics(new PositionMetricsImpl(), "0", "0", null, null, null, null, null);
assertPositionMetrics(new PositionMetricsImpl(convert("-10")), "-10", "-10", null, null, null, null, null);
String incomingPosition = "17";
String position = "10";
String positional = "15";
String trading = "12";
String realized = "11";
String unrealized = "14";
String total = "20";
assertPositionMetrics(createMetrics(incomingPosition, position, positional, trading, realized, unrealized, total),
incomingPosition, position, positional, trading, realized, unrealized, total);
incomingPosition = "-16.9";
position = "10.8";
positional = "15.9";
trading = "12.5";
realized = "11.3";
unrealized = "14.55";
total = "20.02";
assertPositionMetrics(createMetrics(incomingPosition, position, positional, trading, realized, unrealized, total),
incomingPosition, position, positional, trading, realized, unrealized, total);
new ExpectedFailure<IllegalArgumentException>() {
@Override
protected void run() throws Exception {
createMetrics(null, "0", "0", "0", "0", "0", "0");
}
};
new ExpectedFailure<IllegalArgumentException>() {
@Override
protected void run() throws Exception {
createMetrics("0", null, "0", "0", "0", "0", "0");
}
};
}
public static PositionMetrics createMetrics(String incomingPosition, String position, String positional,
String trading, String realized, String unrealized, String total) {
return new PositionMetricsImpl(convert(incomingPosition), convert(position), convert(positional),
convert(trading), convert(realized), convert(unrealized), convert(total));
}
public static void assertPositionMetrics(PositionMetrics pnl, String incomingPosition, String position,
String positional, String trading, String realized, String unrealized, String total) {
assertBigDecimal(incomingPosition, pnl.getIncomingPosition());
assertBigDecimal(position, pnl.getPosition());
assertBigDecimal(positional, pnl.getPositionPL());
assertBigDecimal(trading, pnl.getTradingPL());
assertBigDecimal(realized, pnl.getRealizedPL());
assertBigDecimal(unrealized, pnl.getUnrealizedPL());
assertBigDecimal(total, pnl.getTotalPL());
}
private static void assertBigDecimal(String expected, BigDecimal actual) {
if (expected == null)
assertThat(actual, nullValue());
else
assertThat(actual, comparesEqualTo(convert(expected)));
}
private static BigDecimal convert(String string) {
return string == null ? null : new BigDecimal(string);
}
}