package org.marketcetera.strategy; import java.io.File; import org.junit.Test; import org.marketcetera.module.ExpectedFailure; import org.marketcetera.module.ModuleException; /* $License$ */ /** * Tests Java language support. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: JavaLanguageTest.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ public class JavaLanguageTest extends LanguageTestBase { public static final File JAVA_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "JavaStrategy.java"); public static final String JAVA_STRATEGY_NAME = "JavaStrategy"; public static final File BAD_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "BadStrategy.java"); public static final String BAD_STRATEGY_NAME = "BadStrategy"; public static final File WRONG_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "WrongClass.java"); public static final String WRONG_STRATEGY_NAME = "WrongClass"; public static final File MULTIPLE_CLASS_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "StrategyWithHelpers.java"); public static final String MULTIPLE_CLASS_STRATEGY_NAME = "StrategyWithHelpers"; public static final File EMPTY_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "EmptyStrategy.java"); public static final String EMPTY_STRATEGY_NAME = "EmptyStrategy"; public static final File PARAMETER_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "ParameterStrategy.java"); public static final String PARAMETER_STRATEGY_NAME = "ParameterStrategy"; public static final File SUGGESTION_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "SuggestTrades.java"); public static final String SUGGESTION_STRATEGY_NAME = "SuggestTrades"; public static final File ORDER_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "Orders.java"); public static final String ORDER_STRATEGY_NAME = "Orders"; public static final File OTHER_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "SendOther.java"); public static final String OTHER_STRATEGY_NAME = "SendOther"; public static final File MESSAGE_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "SendMessage.java"); public static final String MESSAGE_STRATEGY_NAME = "SendMessage"; public static final File PART1_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "Part1.java"); public static final String PART1_STRATEGY_NAME = "Part1"; public static final File PART1_REDEFINED_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "redefined" + File.separator + "Part1.java"); public static final File PART2_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "Part2.java"); public static final String PART2_STRATEGY_NAME = "Part2"; public static final File PACKAGE_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "PackageStrategy.java"); public static final String PACKAGE_STRATEGY_NAME = "PackageStrategy"; public static final File EVENT_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "SendEvent.java"); public static final String EVENT_STRATEGY_NAME = "SendEvent"; public static final File COMBINED_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "CombinedRequest.java"); public static final String COMBINED_STRATEGY_NAME = "CombinedRequest"; public static final File DATA_FLOW_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "DataFlow.java"); public static final String DATA_FLOW_NAME = "DataFlow"; public static final File ORDER_RETENTION_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "OrderRetention.java"); public static final String ORDER_RETENTION_NAME = "OrderRetention"; public static final File POSITIONS_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "Positions.java"); public static final String POSITIONS_NAME = "Positions"; public static final File DEPENDING_STRATEGY = new File(StrategyTestBase.SAMPLE_STRATEGY_DIR, "StrategyA.java"); public static final String DEPENDING_NAME = "StrategyA"; /** * Tests that a strategy declared in a package other than the default package works as expected. * * @throws Exception if an error occurs */ @Test public void nonDefaultPackage() throws Exception { StrategyCoordinates strategy = getPackageStrategy(); verifyNullProperties(); doSuccessfulStartTestNoVerification(createStrategy(strategy.getName(), getLanguage(), strategy.getFile(), null, null, null)); verifyPropertyNonNull("onStart"); } /** * Tests the ability to bring in adjunct classes from the auxiliary classpath. * * @throws Exception if an unexpected error occurs */ @Test public void strategyAgentClasspath() throws Exception { final StrategyCoordinates strategy = StrategyCoordinates.get(DEPENDING_STRATEGY, DEPENDING_NAME); verifyNullProperties(); // strategy won't start - won't compile new ExpectedFailure<ModuleException>(FAILED_TO_START) { @Override protected void run() throws Exception { createStrategy(strategy.getName(), getLanguage(), strategy.getFile(), null, null, null); } }; // verify it didn't start verifyPropertyNull("onStart"); // still nothing up my sleeve... verifyNullProperties(); // set the classpath this time System.setProperty(Strategy.CLASSPATH_PROPERTYNAME, StrategyTestBase.SAMPLE_STRATEGY_DIR.getCanonicalPath() + File.separator + "subfolder"); // start strategy again doSuccessfulStartTestNoVerification(createStrategy(strategy.getName(), getLanguage(), strategy.getFile(), null, null, null)); // verify it actually started verifyPropertyNonNull("onStart"); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getEmptyStrategy() */ @Override protected StrategyCoordinates getEmptyStrategy() { return StrategyCoordinates.get(EMPTY_STRATEGY, EMPTY_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getLanguage() */ @Override protected Language getLanguage() { return Language.JAVA; } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getMessageStrategy() */ @Override protected StrategyCoordinates getMessageStrategy() { return StrategyCoordinates.get(MESSAGE_STRATEGY, MESSAGE_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getParameterStrategy() */ @Override protected StrategyCoordinates getParameterStrategy() { return StrategyCoordinates.get(PARAMETER_STRATEGY, PARAMETER_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getStrategyCompiles() */ @Override protected StrategyCoordinates getStrategyCompiles() { return StrategyCoordinates.get(JAVA_STRATEGY, JAVA_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getStrategyMultipleClasses() */ @Override protected StrategyCoordinates getStrategyMultipleClasses() { return StrategyCoordinates.get(MULTIPLE_CLASS_STRATEGY, MULTIPLE_CLASS_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getStrategyWillNotCompile() */ @Override protected StrategyCoordinates getStrategyWillNotCompile() { return StrategyCoordinates.get(BAD_STRATEGY, BAD_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getStrategyWrongClass() */ @Override protected StrategyCoordinates getStrategyWrongClass() { return StrategyCoordinates.get(WRONG_STRATEGY, WRONG_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getSuggestionStrategy() */ @Override protected StrategyCoordinates getSuggestionStrategy() { return StrategyCoordinates.get(SUGGESTION_STRATEGY, SUGGESTION_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getPart1Strategy() */ @Override protected StrategyCoordinates getPart1Strategy() { return StrategyCoordinates.get(PART1_STRATEGY, PART1_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getPart2Strategy() */ @Override protected StrategyCoordinates getPart2Strategy() { return StrategyCoordinates.get(PART2_STRATEGY, PART2_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getPart1RedefinedStrategy() */ @Override protected StrategyCoordinates getPart1RedefinedStrategy() { return StrategyCoordinates.get(PART1_REDEFINED_STRATEGY, PART1_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getOrdersStrategy() */ @Override protected StrategyCoordinates getOrdersStrategy() { return StrategyCoordinates.get(ORDER_STRATEGY, ORDER_STRATEGY_NAME); } /** * Gets a strategy not in the default package. * * @return a <code>StrategyCoordinates</code> value */ private StrategyCoordinates getPackageStrategy() { return StrategyCoordinates.get(PACKAGE_STRATEGY, PACKAGE_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getEventStrategy() */ @Override protected StrategyCoordinates getEventStrategy() { return StrategyCoordinates.get(EVENT_STRATEGY, EVENT_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getCombinedStrategy() */ @Override protected StrategyCoordinates getCombinedStrategy() { return StrategyCoordinates.get(COMBINED_STRATEGY, COMBINED_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getOtherStrategy() */ @Override protected StrategyCoordinates getOtherStrategy() { return StrategyCoordinates.get(OTHER_STRATEGY, OTHER_STRATEGY_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getDataFlowStrategy() */ @Override protected StrategyCoordinates getDataFlowStrategy() { return StrategyCoordinates.get(DATA_FLOW_STRATEGY, DATA_FLOW_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getPositionsStrategy() */ @Override protected StrategyCoordinates getPositionsStrategy() { return StrategyCoordinates.get(POSITIONS_STRATEGY, POSITIONS_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getOrderRetentionStrategy() */ @Override protected StrategyCoordinates getOrderRetentionStrategy() { return StrategyCoordinates.get(ORDER_RETENTION_STRATEGY, ORDER_RETENTION_NAME); } /* (non-Javadoc) * @see org.marketcetera.strategy.LanguageTestBase#getNotificationCount() */ @Override protected int getExpectedCompilationWarningsFor(StrategyCoordinates inStrategy) { if(inStrategy.getName().equals(JAVA_STRATEGY_NAME)) { return 2; } return 0; } }