/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.graph;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import java.util.List;
import org.testng.annotations.Test;
import com.opengamma.sesame.config.EngineUtils;
import com.opengamma.sesame.engine.ComponentMap;
import com.opengamma.sesame.function.FunctionMetadata;
import com.opengamma.sesame.function.Output;
import com.opengamma.sesame.function.Parameter;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class FunctionBuilderTest {
@Test(expectedExceptions = GraphBuildException.class)
public void invalidGraph() {
FunctionMetadata metadata = EngineUtils.createMetadata(NoPublicConstructor.class, "foo");
FunctionModel functionModel = FunctionModel.forFunction(metadata);
assertFalse(functionModel.isValid());
functionModel.build(new FunctionBuilder(), ComponentMap.EMPTY);
}
@Test
public void multipleInvalidNodes() {
FunctionMetadata metadata = EngineUtils.createMetadata(RootFn.class, "foo");
FunctionModel functionModel = FunctionModel.forFunction(metadata);
assertFalse(functionModel.isValid());
System.out.println(functionModel.prettyPrint(false));
List<InvalidGraphException> exceptions = functionModel.getRoot().getExceptions();
assertEquals(2, exceptions.size());
InvalidGraphException ex0 = exceptions.get(0);
assertTrue(ex0 instanceof NoSuitableConstructorException);
List<Parameter> path0 = ex0.getPath();
assertEquals(2, path0.size());
assertEquals(ChildFn.class, path0.get(0).getType());
assertEquals("childFn", path0.get(0).getName());
assertEquals(NoSuitableConstructor.class, path0.get(1).getType());
assertEquals("noSuitableConstructor", path0.get(1).getName());
InvalidGraphException ex1 = exceptions.get(1);
assertTrue(ex1 instanceof NoSuitableConstructorException);
List<Parameter> path1 = ex1.getPath();
assertEquals(1, path1.size());
assertEquals("noPublicConstructor", path1.get(0).getName());
assertEquals(NoPublicConstructor.class, path1.get(0).getType());
}
public static class NoPublicConstructor {
private NoPublicConstructor() {
}
@Output("Foo")
public Object foo() {
return null;
}
}
public static class NoSuitableConstructor {
public NoSuitableConstructor() {
}
public NoSuitableConstructor(String ignored) {
}
}
public static class RootFn {
public RootFn(ChildFn childFn, NoPublicConstructor noPublicConstructor) {
}
@Output("Foo")
public Object foo() {
return null;
}
}
public static class ChildFn {
public ChildFn(NoSuitableConstructor noSuitableConstructor) {
}
}
}