/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.marketdata.manipulator.dsl;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import org.testng.annotations.Test;
import org.threeten.bp.ZonedDateTime;
import com.google.common.collect.Sets;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.marketdata.manipulator.SelectorResolver;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.target.resolver.PrimitiveResolver;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.fx.FXForwardSecurity;
import com.opengamma.financial.security.option.AmericanExerciseType;
import com.opengamma.financial.security.option.FXOptionSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.Expiry;
@Test(groups = TestGroup.UNIT)
public class PointSelectorTest {
private final SelectorResolver _noOpResolver = mock(SelectorResolver.class);
private final ValueSpecification _valueSpec = valueSpec("scheme", "id");
private PointSelector.Builder builder() {
return new PointSelector.Builder(new Scenario("scenarioName"));
}
private ValueSpecification valueSpec(String scheme, String value) {
return valueSpec(ExternalId.of(scheme, value));
}
private ValueSpecification valueSpec(ExternalId id) {
ValueProperties properties =
ValueProperties
.with("Id", id.toString())
.with(ValuePropertyNames.FUNCTION, "foo")
.get();
return new ValueSpecification(MarketDataRequirementNames.MARKET_VALUE, ComputationTargetSpecification.NULL, properties);
}
@Test
public void valueName() {
PointSelector selector = builder().getSelector(); // will match any ExternalId
assertNotNull(selector.findMatchingSelector(_valueSpec, "default", _noOpResolver));
ValueSpecification valueSpec = new ValueSpecification(ValueRequirementNames.YIELD_CURVE,
ComputationTargetSpecification.NULL,
ValueProperties.with(ValuePropertyNames.FUNCTION, "foo").get());
assertNull(selector.findMatchingSelector(valueSpec, "default", _noOpResolver));
}
@Test
public void ids() {
PointSelector selector = builder().ids("scheme~value1", "scheme~value2").getSelector();
assertNotNull(selector.findMatchingSelector(valueSpec("scheme", "value1"), "calcConfig", _noOpResolver));
assertNotNull(selector.findMatchingSelector(valueSpec("scheme", "value2"), "calcConfig", _noOpResolver));
assertNull(selector.findMatchingSelector(valueSpec("scheme", "value3"), "calcConfig", _noOpResolver));
}
@Test
public void idMatchesOnExternalIdBundle() {
UniqueId uid = PrimitiveResolver.resolveExternalId(ExternalIdBundle.of(ExternalId.of("scheme-A", "value-1"), ExternalId.of("scheme-B", "value-2")));
ValueSpecification valueSpec = new ValueSpecification(MarketDataRequirementNames.MARKET_VALUE,
new ComputationTargetSpecification(ComputationTargetType.ANYTHING, uid), ValueProperties.with(ValuePropertyNames.FUNCTION, "foo").get());
assertNotNull(builder().idMatches("scheme-A", "value-\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNotNull(builder().idMatches("scheme-B", "value-\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNotNull(builder().idMatches("scheme-A", "[a-z\\-]+\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNotNull(builder().idMatches("scheme-B", "[a-z\\-]+\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().idMatches("Scheme-A", "value-\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().idMatches("scheme-C", "value-\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().idMatches("scheme-A", "nn-\\d").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
}
@Test
public void idMatchesExactlyOnExternalIdBundle() {
UniqueId uid = PrimitiveResolver.resolveExternalId(ExternalIdBundle.of(ExternalId.of("scheme-A", "value-1"), ExternalId.of("scheme-B", "value-2")));
ValueSpecification valueSpec = new ValueSpecification(MarketDataRequirementNames.MARKET_VALUE,
new ComputationTargetSpecification(ComputationTargetType.ANYTHING, uid), ValueProperties.with(ValuePropertyNames.FUNCTION, "foo").get());
assertNotNull(builder().id("scheme-A", "value-1").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNotNull(builder().id("scheme-B", "value-2").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().id("Scheme-A", "value-1").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().id("scheme-C", "value-0").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
assertNull(builder().id("scheme-A", "nn-2").getSelector().findMatchingSelector(valueSpec,
"default",
_noOpResolver));
}
@Test
public void calcConfigNames() {
PointSelector selector = new PointSelector(Sets.newHashSet("default", "cc1"), null, null, null, null, null, null);
assertNotNull(selector.findMatchingSelector(_valueSpec, "default", _noOpResolver));
assertNotNull(selector.findMatchingSelector(_valueSpec, "cc1", _noOpResolver));
assertNull(selector.findMatchingSelector(_valueSpec, "cc2", _noOpResolver));
}
@Test
public void idMatches() {
PointSelector selector = builder().idMatches("scheme", "value\\d").getSelector();
assertNotNull(selector.findMatchingSelector(valueSpec("scheme", "value1"), "default", _noOpResolver));
assertNotNull(selector.findMatchingSelector(valueSpec("scheme", "value2"), "default", _noOpResolver));
assertNull(selector.findMatchingSelector(valueSpec("scheme", "value"), "default", _noOpResolver));
}
@Test
public void idLike() {
PointSelector selector1 = builder().idLike("scheme", "value?").getSelector();
assertNotNull(selector1.findMatchingSelector(valueSpec("scheme", "value1"), "default", _noOpResolver));
assertNotNull(selector1.findMatchingSelector(valueSpec("scheme", "value2"), "default", _noOpResolver));
assertNull(selector1.findMatchingSelector(valueSpec("scheme", "value"), "default", _noOpResolver));
PointSelector selector2 = builder().idLike("scheme", "val*").getSelector();
assertNotNull(selector2.findMatchingSelector(valueSpec("scheme", "value1"), "default", _noOpResolver));
assertNotNull(selector2.findMatchingSelector(valueSpec("scheme", "value2"), "default", _noOpResolver));
assertNull(selector2.findMatchingSelector(valueSpec("scheme", "xvalue"), "default", _noOpResolver));
PointSelector selector3 = builder().idLike("scheme", "val%").getSelector();
assertNotNull(selector3.findMatchingSelector(valueSpec("scheme", "value1"), "default", _noOpResolver));
assertNotNull(selector3.findMatchingSelector(valueSpec("scheme", "value2"), "default", _noOpResolver));
assertNull(selector3.findMatchingSelector(valueSpec("scheme", "xvalue"), "default", _noOpResolver));
}
@Test
public void securityTypes() {
ExternalId equityId = ExternalId.of("sec", "eq");
ExternalId optionId = ExternalId.of("sec", "eqo");
ExternalId forwardId = ExternalId.of("sec", "fx");
EquitySecurity equity = new EquitySecurity("exch", "excd", "ACME", Currency.USD);
ExternalId region = ExternalId.of("regionScheme", "regionValue");
ZonedDateTime now = ZonedDateTime.now();
FXForwardSecurity fxForward = new FXForwardSecurity(Currency.AUD, 123, Currency.CAD, 321, now, region);
FXOptionSecurity fxOption = new FXOptionSecurity(Currency.AUD, Currency.CAD, 123, 321, new Expiry(now),
now, true, new AmericanExerciseType());
SelectorResolver resolver = mock(SelectorResolver.class);
when(resolver.resolveSecurity(equityId)).thenReturn(equity);
when(resolver.resolveSecurity(forwardId)).thenReturn(fxForward);
when(resolver.resolveSecurity(optionId)).thenReturn(fxOption);
PointSelector lCaseSelector = builder().securityTypes("equity", "fx_forward").getSelector();
assertNotNull(lCaseSelector.findMatchingSelector(valueSpec(equityId), "default", resolver));
assertNotNull(lCaseSelector.findMatchingSelector(valueSpec(forwardId), "default", resolver));
assertNull(lCaseSelector.findMatchingSelector(valueSpec(optionId), "default", resolver));
PointSelector mixedCaseSelector = builder().securityTypes("Equity", "FX_Forward").getSelector();
assertNotNull(mixedCaseSelector.findMatchingSelector(valueSpec(equityId), "default", resolver));
assertNotNull(mixedCaseSelector.findMatchingSelector(valueSpec(forwardId), "default", resolver));
assertNull(mixedCaseSelector.findMatchingSelector(valueSpec(optionId), "default", resolver));
}
}