/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.core.ats.engines; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.eclipsetrader.core.feed.FeedIdentifier; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.instruments.Security; import org.eclipsetrader.core.trading.IPosition; import org.mozilla.javascript.Context; import org.mozilla.javascript.ImporterTopLevel; import org.mozilla.javascript.ScriptableObject; public class HasPositionFunctionTest extends TestCase { Context cx; /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { cx = Context.enter(); cx.setWrapFactory(new EnhancedWrapFactory()); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ @Override protected void tearDown() throws Exception { Context.exit(); } public void testHasPosition() throws Exception { Security instrument = new Security("Microsoft", new FeedIdentifier("MSFT", null)); AccountMock account = new AccountMock(); ScriptableObject scope = new ImporterTopLevel(cx); ScriptableObject.defineClass(scope, HasPositionFunction.class); ScriptableObject.putProperty(scope, BaseOrderFunction.PROPERTY_ACCOUNT, Context.javaToJS(account, scope)); ScriptableObject.putProperty(scope, BaseOrderFunction.PROPERTY_INSTRUMENT, Context.javaToJS(instrument, scope)); Object result = cx.evaluateString(scope, "hasPosition();", "Test", 0, null); assertEquals(Boolean.FALSE, result); account.setPositions(new IPosition[] { new PositionMock(instrument, 1000L, 25.75) }); result = cx.evaluateString(scope, "hasPosition();", "Test", 0, null); assertEquals(Boolean.TRUE, result); } public void testHasPositionArgument() throws Exception { Security instrument = new Security("Microsoft", new FeedIdentifier("MSFT", null)); AccountMock account = new AccountMock(); ScriptableObject scope = new ImporterTopLevel(cx); ScriptableObject.defineClass(scope, HasPositionFunction.class); Map<String, ISecurity> map = new HashMap<String, ISecurity>(); map.put(instrument.getIdentifier().getSymbol(), instrument); ScriptableObject.putProperty(scope, BaseOrderFunction.PROPERTY_ACCOUNT, Context.javaToJS(account, scope)); ScriptableObject.putProperty(scope, "instruments", map); Object result = cx.evaluateString(scope, "hasPosition(instruments['MSFT']);", "Test", 0, null); assertEquals(Boolean.FALSE, result); account.setPositions(new IPosition[] { new PositionMock(instrument, 1000L, 25.75) }); result = cx.evaluateString(scope, "hasPosition(instruments['MSFT']);", "Test", 0, null); assertEquals(Boolean.TRUE, result); result = cx.evaluateString(scope, "hasPosition();", "Test", 0, null); assertEquals(Boolean.FALSE, result); } }