package org.marketcetera.quickfix.cficode;
import junit.framework.TestCase;
import org.marketcetera.core.ExpectedTestFailure;
import org.marketcetera.core.instruments.CFICodeUtils;
import org.marketcetera.trade.Currency;
public class CFICodeTest extends TestCase {
public void testCurrencyCFICode() throws Exception {
String spotCode = CFICodeUtils.getCFICode(new Currency("USD/GBP"));
assertEquals("FFCPNO", spotCode);
spotCode = CFICodeUtils.getCFICode(new Currency("USD","GBP","20121231",""));
assertEquals("FFCPNO", spotCode);
String forwardCode = CFICodeUtils.getCFICode(new Currency("USD","GBP","20121231","20130131"));
assertEquals("FFCPNW", forwardCode);
}
public void testOptionCFICode() throws Exception {
OptionCFICode code;
code = new OptionCFICode("OCASCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_AMERICAN, OptionCFICode.UNDERLYING_STOCK, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OPEIPN"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_PUT, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_INDEX, OptionCFICode.DELIVERY_PHYSICAL, OptionCFICode.STANDARD_NON_STANDARD);
code = new OptionCFICode("OCEDCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_DEBT, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCECCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_CURRENCY, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCEOCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_OPTION, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCEFCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_FUTURE, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCETCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_COMMODITY, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCEWCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_SWAP, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCEBCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_BASKET, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OCEMCS"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, OptionCFICode.TYPE_CALL, OptionCFICode.EXERCISE_EUROPEAN, OptionCFICode.UNDERLYING_OTHER, OptionCFICode.DELIVERY_CASH, OptionCFICode.STANDARD_STANDARD);
code = new OptionCFICode("OXXXXX"); //$NON-NLS-1$
checkOptionCode(code, CFICode.CATEGORY_OPTION, CFICode.UNKNOWN_UNUSED, CFICode.UNKNOWN_UNUSED, CFICode.UNKNOWN_UNUSED, CFICode.UNKNOWN_UNUSED, CFICode.UNKNOWN_UNUSED);
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("BCASCS"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OLASCS"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OCLSCS"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OCALCS"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OCASLS"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(IllegalArgumentException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OCASCL"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
new ExpectedTestFailure(StringIndexOutOfBoundsException.class, null) {
@Override
protected void execute() throws Throwable {
OptionCFICode code = new OptionCFICode("OCASC"); //$NON-NLS-1$
if (code.isValid()) {
assertTrue("Should never get here", false); //$NON-NLS-1$
}
}
}.run();
}
private void checkOptionCode(OptionCFICode code, char category, char type, char exercise, char underlying, char delivery, char standard) {
assertEquals(category, code.getCategory());
assertEquals(type, code.getType());
assertEquals(exercise, code.getExercise());
assertEquals(underlying, code.getUnderlying());
assertEquals(delivery, code.getDelivery());
assertEquals(standard, code.getStandard());
}
}