/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.function; import static com.opengamma.sesame.config.ConfigBuilder.config; import static com.opengamma.sesame.config.ConfigBuilder.implementations; import static org.mockito.Mockito.mock; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.sesame.Environment; import com.opengamma.sesame.config.EngineUtils; import com.opengamma.sesame.config.FunctionArguments; import com.opengamma.sesame.config.FunctionModelConfig; import com.opengamma.sesame.engine.ComponentMap; import com.opengamma.sesame.graph.FunctionBuilder; import com.opengamma.sesame.graph.FunctionModel; import com.opengamma.util.result.FailureStatus; import com.opengamma.util.result.Result; import com.opengamma.util.test.TestGroup; @Test(groups = TestGroup.UNIT) public class MethodInvokableFunctionTest { @Test public void oneMissingArg() { FunctionModelConfig config = config(implementations(Fn.class, Impl.class)); FunctionMetadata metadata = EngineUtils.createMetadata(Fn.class, "foo"); FunctionModel model = FunctionModel.forFunction(metadata, config); InvokableFunction invokableFunction = model.build(new FunctionBuilder(), ComponentMap.EMPTY); FunctionArguments args = new FunctionArguments(ImmutableMap.<String, Object>of("bar", "barVal")); Result<?> result = (Result<?>) invokableFunction.invoke(mock(Environment.class), null, args); assertFalse(result.isSuccess()); assertEquals(FailureStatus.MISSING_ARGUMENT, result.getStatus()); String expectedMessage = "No argument provided for non-nullable parameter for method Fn.foo(), " + "parameter 'baz', type Object"; assertEquals(expectedMessage, result.getFailureMessage()); } @Test public void multipleMissingArgs() { FunctionModelConfig config = config(implementations(Fn.class, Impl.class)); FunctionMetadata metadata = EngineUtils.createMetadata(Fn.class, "foo"); FunctionModel model = FunctionModel.forFunction(metadata, config); InvokableFunction invokableFunction = model.build(new FunctionBuilder(), ComponentMap.EMPTY); Result<?> result = (Result<?>) invokableFunction.invoke(mock(Environment.class), null, FunctionArguments.EMPTY); assertFalse(result.isSuccess()); assertEquals(FailureStatus.MISSING_ARGUMENT, result.getStatus()); String expectedMessage = "No arguments provided for non-nullable parameters of method Fn.foo(), " + "parameters [Object bar, Object baz]"; assertEquals(expectedMessage, result.getFailureMessage()); } public interface Fn { @Output("Foo") Object foo(Object bar, Object baz); } public static class Impl implements Fn { @Override public Object foo(Object bar, Object baz) { return null; } } }