/*
* 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.internal;
import java.net.URI;
import java.util.Arrays;
import java.util.Currency;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipsetrader.core.Cash;
import org.eclipsetrader.core.feed.History;
import org.eclipsetrader.core.feed.IFeedIdentifier;
import org.eclipsetrader.core.feed.IHistory;
import org.eclipsetrader.core.feed.IOHLC;
import org.eclipsetrader.core.feed.ITrade;
import org.eclipsetrader.core.feed.OHLC;
import org.eclipsetrader.core.feed.Trade;
import org.eclipsetrader.core.instruments.CurrencyExchange;
import org.eclipsetrader.core.instruments.ISecurity;
import org.eclipsetrader.core.markets.MarketPricingEnvironment;
import org.eclipsetrader.core.repositories.IRepository;
import org.eclipsetrader.core.repositories.IRepositoryChangeListener;
import org.eclipsetrader.core.repositories.IRepositoryRunnable;
import org.eclipsetrader.core.repositories.IRepositoryService;
import org.eclipsetrader.core.repositories.IStoreObject;
import org.eclipsetrader.core.views.IHolding;
import org.eclipsetrader.core.views.IWatchList;
public class CurrencyServiceTest extends TestCase {
private CurrencyExchange eurusd = new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("USD"), 1.0);
private IOHLC[] history = new IOHLC[] {
new OHLC(new Date(1000000), 1.4677, 1.4677, 1.4677, 1.4677, 0L),
new OHLC(new Date(2000000), 1.4593, 1.4593, 1.4593, 1.4593, 0L),
};
private class TestRepositoryService implements IRepositoryService {
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#addRepositoryResourceListener(org.eclipsetrader.core.repositories.IRepositoryChangeListener)
*/
@Override
public void addRepositoryResourceListener(IRepositoryChangeListener listener) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#deleteAdaptable(org.eclipse.core.runtime.IAdaptable[])
*/
@Override
public void deleteAdaptable(IAdaptable[] adaptables) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getFeedIdentifierFromSymbol(java.lang.String)
*/
@Override
public IFeedIdentifier getFeedIdentifierFromSymbol(String symbol) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getFeedIdentifiers()
*/
@Override
public IFeedIdentifier[] getFeedIdentifiers() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getHistoryFor(org.eclipsetrader.core.instruments.ISecurity)
*/
@Override
public IHistory getHistoryFor(ISecurity security) {
if (security == eurusd) {
return new History(security, history);
}
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getRepositories()
*/
@Override
public IRepository[] getRepositories() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getRepository(java.lang.String)
*/
@Override
public IRepository getRepository(String scheme) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getSecurities()
*/
@Override
public ISecurity[] getSecurities() {
return new ISecurity[] {
eurusd
};
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getSecurityFromName(java.lang.String)
*/
@Override
public ISecurity getSecurityFromName(String name) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getSecurityFromURI(java.net.URI)
*/
@Override
public ISecurity getSecurityFromURI(URI uri) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getWatchListFromName(java.lang.String)
*/
@Override
public IWatchList getWatchListFromName(String name) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getWatchListFromURI(java.net.URI)
*/
@Override
public IWatchList getWatchListFromURI(URI uri) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getWatchLists()
*/
@Override
public IWatchList[] getWatchLists() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getTrades()
*/
@Override
public IHolding[] getTrades() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#moveAdaptable(org.eclipse.core.runtime.IAdaptable[], org.eclipsetrader.core.repositories.IRepository)
*/
@Override
public void moveAdaptable(IAdaptable[] adaptables, IRepository repository) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#removeRepositoryResourceListener(org.eclipsetrader.core.repositories.IRepositoryChangeListener)
*/
@Override
public void removeRepositoryResourceListener(IRepositoryChangeListener listener) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#runInService(org.eclipsetrader.core.repositories.IRepositoryRunnable, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public IStatus runInService(IRepositoryRunnable runnable, IProgressMonitor monitor) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#runInService(org.eclipsetrader.core.repositories.IRepositoryRunnable, org.eclipse.core.runtime.jobs.ISchedulingRule, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public IStatus runInService(IRepositoryRunnable runnable, ISchedulingRule rule, IProgressMonitor monitor) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#saveAdaptable(org.eclipse.core.runtime.IAdaptable[])
*/
@Override
public void saveAdaptable(IAdaptable[] adaptables) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#saveAdaptable(org.eclipse.core.runtime.IAdaptable[], org.eclipsetrader.core.repositories.IRepository)
*/
@Override
public void saveAdaptable(IAdaptable[] adaptables, IRepository defaultRepository) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getObjectFromURI(java.net.URI)
*/
@Override
public IStoreObject getObjectFromURI(URI uri) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IRepositoryService#getAllObjects()
*/
@Override
public IStoreObject[] getAllObjects() {
return null;
}
};
private MarketPricingEnvironment pricingEnvironment = new MarketPricingEnvironment() {
@Override
public void addSecurity(ISecurity security) {
}
@Override
public ITrade getTrade(ISecurity security) {
if (security == eurusd) {
return new Trade(null, 1.4677, null, null);
}
return null;
}
};
public void testGetAvailableCurrencies() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Set<Currency> set = new HashSet<Currency>(Arrays.asList(service.getAvailableCurrencies()));
assertTrue(set.contains(Currency.getInstance("EUR")));
assertTrue(set.contains(Currency.getInstance("USD")));
assertFalse(set.contains(Currency.getInstance("GBP")));
}
public void testDirectConvert() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("USD"));
assertEquals(1.4677, cash.getAmount());
assertEquals(Currency.getInstance("USD"), cash.getCurrency());
}
public void testInverseConvert() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.4677, Currency.getInstance("USD")), Currency.getInstance("EUR"));
assertEquals(1.0, cash.getAmount());
assertEquals(Currency.getInstance("EUR"), cash.getCurrency());
}
public void testConvertToUnknownCurrency() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("GBP"));
assertNull(cash);
}
public void testConvertFromUnknownCurrency() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("GBP")), Currency.getInstance("USD"));
assertNull(cash);
}
public void testConvertToSameCurrency() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("EUR"));
assertEquals(1.0, cash.getAmount());
assertEquals(Currency.getInstance("EUR"), cash.getCurrency());
}
public void testDirectConvertWithMultiplier() throws Exception {
eurusd = new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("USD"), 100.0);
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("USD"));
assertEquals(146.77, cash.getAmount());
assertEquals(Currency.getInstance("USD"), cash.getCurrency());
}
public void testInverseConvertWithMultiplier() throws Exception {
eurusd = new CurrencyExchange(Currency.getInstance("EUR"), Currency.getInstance("USD"), 100.0);
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(146.77, Currency.getInstance("USD")), Currency.getInstance("EUR"));
assertEquals(1.0, cash.getAmount());
assertEquals(Currency.getInstance("EUR"), cash.getCurrency());
}
public void testDirectConvertToDate() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("USD"), new Date(2000000));
assertEquals(1.4593, cash.getAmount());
assertEquals(Currency.getInstance("USD"), cash.getCurrency());
}
public void testInverseConvertToDate() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.4593, Currency.getInstance("USD")), Currency.getInstance("EUR"), new Date(2000000));
assertEquals(1.0, cash.getAmount());
assertEquals(Currency.getInstance("EUR"), cash.getCurrency());
}
public void testConvertToUnknownDate() throws Exception {
CurrencyService service = new CurrencyService(new TestRepositoryService(), pricingEnvironment);
service.startUp(null);
Cash cash = service.convert(new Cash(1.0, Currency.getInstance("EUR")), Currency.getInstance("USD"), new Date(3000000));
assertNull(cash);
}
}