/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.function.exclusion;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNull;
import org.testng.annotations.Test;
import org.threeten.bp.Instant;
import com.opengamma.engine.function.CompiledFunctionDefinition;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.FunctionDefinition;
import com.opengamma.engine.function.FunctionParameters;
import com.opengamma.util.test.TestGroup;
/**
* Tests the function exclusion group class.
*/
@Test(groups = TestGroup.UNIT)
public class FunctionExclusionGroupTest {
private static class Function implements FunctionDefinition {
private final String _shortName;
private Function(String shortName) {
_shortName = shortName;
}
@Override
public void init(FunctionCompilationContext context) {
throw new UnsupportedOperationException();
}
@Override
public CompiledFunctionDefinition compile(FunctionCompilationContext context, Instant atInstant) {
throw new UnsupportedOperationException();
}
@Override
public String getUniqueId() {
throw new UnsupportedOperationException();
}
@Override
public String getShortName() {
return _shortName;
}
@Override
public FunctionParameters getDefaultParameters() {
throw new UnsupportedOperationException();
}
}
public void testAbstract() {
final FunctionExclusionGroups groups = new AbstractFunctionExclusionGroups() {
@Override
protected String getKey(final FunctionDefinition function) {
if (function.getShortName().startsWith("A_")) {
return "A";
} else if (function.getShortName().startsWith("B_")) {
return "B";
} else {
return null;
}
}
};
final FunctionDefinition a_foo = new Function("A_foo");
final FunctionDefinition a_bar = new Function("A_bar");
final FunctionDefinition b_foo = new Function("B_foo");
final FunctionDefinition b_bar = new Function("B_bar");
final FunctionDefinition foo = new Function("foo");
final FunctionDefinition bar = new Function("bar");
assertNull(groups.getExclusionGroup(foo));
assertNull(groups.getExclusionGroup(bar));
final FunctionExclusionGroup afoo1 = groups.getExclusionGroup(a_foo);
final FunctionExclusionGroup afoo2 = groups.getExclusionGroup(a_foo);
assertEquals(afoo1, afoo2);
final FunctionExclusionGroup abar = groups.getExclusionGroup(a_bar);
assertEquals(abar, afoo1);
final FunctionExclusionGroup bfoo = groups.getExclusionGroup(b_foo);
assertNotEquals(abar, bfoo);
final FunctionExclusionGroup bbar = groups.getExclusionGroup(b_bar);
assertEquals(bbar, bfoo);
}
}