/*
* 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.directa.internal.core;
import junit.framework.TestCase;
import org.easymock.classextension.EasyMock;
import org.eclipsetrader.core.feed.FeedIdentifier;
import org.eclipsetrader.core.instruments.Security;
import org.eclipsetrader.core.trading.IOrderSide;
import org.eclipsetrader.core.trading.IOrderType;
import org.eclipsetrader.core.trading.IPositionListener;
import org.eclipsetrader.core.trading.Order;
import org.eclipsetrader.core.trading.PositionEvent;
public class AccountTest extends TestCase {
public void testSetPositions() throws Exception {
Account account = new Account("ID", null);
Position position = new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;");
account.setPositions(new Position[] {
position
});
assertEquals(1, account.positions.size());
assertSame(position, account.positions.get(0));
}
public void testReplacePositions() throws Exception {
Account account = new Account("ID", null);
Position position1 = new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;");
account.setPositions(new Position[] {
position1
});
Position position2 = new Position("4;7;0;; ;UCG;I;;;200;1.8300;;;;;;;;;;;;015;A;H;;;");
account.setPositions(new Position[] {
position2
});
assertEquals(1, account.positions.size());
assertSame(position2, account.positions.get(0));
}
public void testRemovePositions() throws Exception {
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
account.setPositions(new Position[0]);
assertEquals(0, account.positions.size());
}
public void testFirePositionOpenEvent() throws Exception {
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionOpened(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
Account account = new Account("ID", null);
account.addPositionListener(listener);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
EasyMock.verify(listener);
}
public void testFirePositionUpdateEvent() throws Exception {
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionChanged(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
account.addPositionListener(listener);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;200;1.8300;;;;;;;;;;;;015;A;H;;;")
});
EasyMock.verify(listener);
}
public void testFirePositionCloseEvent() throws Exception {
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionClosed(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
account.addPositionListener(listener);
account.setPositions(new Position[0]);
EasyMock.verify(listener);
}
public void testAddNewPositionWithUpdatePosition() throws Exception {
Account account = new Account("ID", null);
Position position = new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;");
account.updatePosition(position);
assertEquals(1, account.positions.size());
assertSame(position, account.positions.get(0));
}
public void testUpdateExistingPosition() throws Exception {
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
Position position = new Position("4;7;0;; ;UCG;I;;;200;1.8300;;;;;;;;;;;;015;A;H;;;");
account.updatePosition(position);
assertEquals(new Long(200), account.positions.get(0).getQuantity());
}
public void testUpdatePositionFiresPositionOpenEvent() throws Exception {
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionOpened(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
Account account = new Account("ID", null);
account.addPositionListener(listener);
account.updatePosition(new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;"));
EasyMock.verify(listener);
}
public void testUpdatePositionFiresPositionUpdateEvent() throws Exception {
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionChanged(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
account.addPositionListener(listener);
account.updatePosition(new Position("4;7;0;; ;UCG;I;;;200;1.8300;;;;;;;;;;;;015;A;H;;;"));
EasyMock.verify(listener);
}
public void testUpdatePositionFromMonitorFiresPositionOpenEvent() throws Exception {
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionOpened(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
Account account = new Account("ID", null);
account.addPositionListener(listener);
Security security = new Security("Unitcredit", new FeedIdentifier("UCG", null));
OrderMonitor buyMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 1.83));
buyMonitor.setFilledQuantity(100L);
buyMonitor.setAveragePrice(1.87);
account.updatePosition(buyMonitor);
EasyMock.verify(listener);
}
public void testUpdatePositionFromMonitorFiresPositionUpdateEvent() throws Exception {
Security security = new Security("Unitcredit", new FeedIdentifier("UCG", null));
Account account = new Account("ID", null);
OrderMonitor buyMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 1.83));
buyMonitor.setFilledQuantity(100L);
buyMonitor.setAveragePrice(1.87);
account.updatePosition(buyMonitor);
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionChanged(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
account.addPositionListener(listener);
buyMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 1.83));
buyMonitor.setFilledQuantity(100L);
buyMonitor.setAveragePrice(1.87);
account.updatePosition(buyMonitor);
EasyMock.verify(listener);
}
public void testUpdatePositionFromMonitorFiresPositionCloseEvent() throws Exception {
Security security = new Security("Unitcredit", new FeedIdentifier("UCG", null));
Account account = new Account("ID", null);
account.setPositions(new Position[] {
new Position("4;7;0;; ;UCG;I;;;100;1.8300;;;;;;;;;;;;015;A;H;;;")
});
OrderMonitor buyMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Buy, security, 100L, 1.83));
buyMonitor.setFilledQuantity(100L);
buyMonitor.setAveragePrice(1.87);
account.updatePosition(buyMonitor);
OrderMonitor sellMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Sell, security, 100L, 1.87));
sellMonitor.setFilledQuantity(100L);
sellMonitor.setAveragePrice(1.87);
IPositionListener listener = EasyMock.createMock(IPositionListener.class);
listener.positionClosed(org.easymock.EasyMock.isA(PositionEvent.class));
EasyMock.replay(listener);
account.addPositionListener(listener);
account.updatePosition(sellMonitor);
EasyMock.verify(listener);
}
public void testSetShortPositionFromMonitor() throws Exception {
Account account = new Account("ID", null);
Security security = new Security("Unitcredit", new FeedIdentifier("UCG", null));
OrderMonitor buyMonitor = new OrderMonitor(null, null, new Order(null, IOrderType.Limit, IOrderSide.Sell, security, 100L, 1.83));
buyMonitor.setFilledQuantity(100L);
buyMonitor.setAveragePrice(1.87);
account.updatePosition(buyMonitor);
assertEquals(new Long(-100), account.positions.get(0).getQuantity());
}
public void testSetShortPositionFromStream() throws Exception {
Account account = new Account("ID", null);
Position position = new Position("4;7;0;; ;UCG;I;;;-100;1.8300;;;;;;;;;;;;015;A;H;;;");
account.updatePosition(position);
assertEquals(new Long(-100), account.positions.get(0).getQuantity());
}
}