/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.fudgemsg;
import java.util.Arrays;
import java.util.Collections;
import org.testng.annotations.Test;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.depgraph.DependencyNodeFunction;
import com.opengamma.engine.depgraph.ambiguity.FullRequirementResolution;
import com.opengamma.engine.depgraph.ambiguity.RequirementResolution;
import com.opengamma.engine.depgraph.impl.DependencyNodeFunctionImpl;
import com.opengamma.engine.function.EmptyFunctionParameters;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.util.test.AbstractFudgeBuilderTestCase;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link FullRequirementResolutionFudgeBuilder} class.
*/
@Test(groups = TestGroup.UNIT)
public class FullRequirementResolutionFudgeBuilderTest extends AbstractFudgeBuilderTestCase {
private ValueRequirement requirement() {
return new ValueRequirement("Foo", ComputationTargetSpecification.NULL);
}
private ValueSpecification valueSpecification(final String function) {
return new ValueSpecification("Foo", ComputationTargetSpecification.NULL, ValueProperties.with(ValuePropertyNames.FUNCTION, function).get());
}
private DependencyNodeFunction function(final String name) {
return DependencyNodeFunctionImpl.of(name, EmptyFunctionParameters.INSTANCE);
}
public void testUnresolved() {
final FullRequirementResolution resolution = new FullRequirementResolution(requirement());
assertEncodeDecodeCycle(FullRequirementResolution.class, resolution);
}
public void testSingleResolution() {
final FullRequirementResolution resolution = new FullRequirementResolution(requirement());
resolution.addResolutions(Collections.singleton(new RequirementResolution(valueSpecification("Test"), function("Test"), Collections.<FullRequirementResolution>emptySet())));
assertEncodeDecodeCycle(FullRequirementResolution.class, resolution);
}
public void testAmbiguousResolution() {
final FullRequirementResolution resolution = new FullRequirementResolution(requirement());
resolution.addResolutions(Arrays.asList(new RequirementResolution(valueSpecification("A"), function("A"), Collections.<FullRequirementResolution>emptySet()), new RequirementResolution(
valueSpecification("B"), function("B"), Collections.<FullRequirementResolution>emptySet())));
assertEncodeDecodeCycle(FullRequirementResolution.class, resolution);
}
public void testMultipleResolutions() {
final FullRequirementResolution resolution = new FullRequirementResolution(requirement());
resolution.addResolutions(Collections.singleton(new RequirementResolution(valueSpecification("A"), function("A"), Collections.<FullRequirementResolution>emptySet())));
resolution.addResolutions(Collections.singleton(new RequirementResolution(valueSpecification("B"), function("B"), Collections.<FullRequirementResolution>emptySet())));
assertEncodeDecodeCycle(FullRequirementResolution.class, resolution);
}
public void testMultipleAmbiguousResolutions() {
final FullRequirementResolution resolution = new FullRequirementResolution(requirement());
resolution.addResolutions(Arrays.asList(new RequirementResolution(valueSpecification("A"), function("A"), Collections.<FullRequirementResolution>emptySet()), new RequirementResolution(
valueSpecification("B"), function("B"), Collections.<FullRequirementResolution>emptySet())));
resolution.addResolutions(Arrays.asList(new RequirementResolution(valueSpecification("C"), function("C"), Collections.<FullRequirementResolution>emptySet()), null));
assertEncodeDecodeCycle(FullRequirementResolution.class, resolution);
}
}