/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.function.scenarios; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.opengamma.util.test.TestGroup; @Test(groups = TestGroup.UNIT) public class ScenarioDefinitionTest { private final Arg1 _arg11 = new Arg1(); private final Arg1 _arg12 = new Arg1(); private final Arg2 _arg21 = new Arg2(); private final Arg2 _arg22 = new Arg2(); @Test public void withArgumentsList() { List<ScenarioArgument<?, ?>> argList = ImmutableList.<ScenarioArgument<?, ?>>of(_arg11, _arg21); ScenarioDefinition args = new ScenarioDefinition(_arg12, _arg22).with(argList); FilteredScenarioDefinition filteredArgs = args.filter("foo"); List<Arg1> args1 = filteredArgs.getArguments(new Fn1()); assertEquals(2, args1.size()); assertTrue(args1.contains(_arg11)); assertTrue(args1.contains(_arg12)); List<Arg2> args2 = filteredArgs.getArguments(new Fn2()); assertEquals(2, args2.size()); assertTrue(args2.contains(_arg21)); assertTrue(args2.contains(_arg22)); } @Test public void withArgumentsArray() { ScenarioDefinition args = new ScenarioDefinition(_arg11, _arg12).with(_arg21, _arg22); FilteredScenarioDefinition filteredArgs = args.filter("foo"); List<Arg1> args1 = filteredArgs.getArguments(new Fn1()); assertEquals(2, args1.size()); assertTrue(args1.contains(_arg11)); assertTrue(args1.contains(_arg12)); List<Arg2> args2 = filteredArgs.getArguments(new Fn2()); assertEquals(2, args2.size()); assertTrue(args2.contains(_arg21)); assertTrue(args2.contains(_arg22)); } @Test public void withArgumentsForColumn() { List<ScenarioArgument<?, ?>> argList = ImmutableList.<ScenarioArgument<?, ?>>of(_arg11); Map<String, List<ScenarioArgument<?, ?>>> argMap = ImmutableMap.<String, List<ScenarioArgument<?, ?>>>of("foo", ImmutableList.<ScenarioArgument<?, ?>>of(_arg21)); ScenarioDefinition baseArgs = new ScenarioDefinition(argList, argMap); List<ScenarioArgument<?, ?>> extraArgs = ImmutableList.<ScenarioArgument<?, ?>>of(_arg12, _arg22); ScenarioDefinition scenarioDefinition = baseArgs.with(extraArgs, "foo"); FilteredScenarioDefinition filteredArgs = scenarioDefinition.filter("foo"); List<Arg1> args1 = filteredArgs.getArguments(new Fn1()); assertEquals(2, args1.size()); assertTrue(args1.contains(_arg11)); assertTrue(args1.contains(_arg12)); List<Arg2> args2 = filteredArgs.getArguments(new Fn2()); assertEquals(2, args2.size()); assertTrue(args2.contains(_arg21)); assertTrue(args2.contains(_arg22)); } @Test public void filter() { List<ScenarioArgument<?, ?>> argList = ImmutableList.<ScenarioArgument<?, ?>>of(_arg11); Map<String, List<ScenarioArgument<?, ?>>> argMap = new HashMap<>(); argMap.put("foo", ImmutableList.<ScenarioArgument<?, ?>>of(_arg21)); ScenarioDefinition scenarioDefinition = new ScenarioDefinition(argList, argMap); FilteredScenarioDefinition barArgs = scenarioDefinition.filter("bar"); List<Arg1> barArgs1 = barArgs.getArguments(new Fn1()); assertEquals(1, barArgs1.size()); assertTrue(barArgs1.contains(_arg11)); List<Arg2> barArgs2 = barArgs.getArguments(new Fn2()); assertTrue(barArgs2.isEmpty()); FilteredScenarioDefinition fooArgs = scenarioDefinition.filter("foo"); List<Arg1> fooArgs1 = fooArgs.getArguments(new Fn1()); assertEquals(1, fooArgs1.size()); assertTrue(fooArgs1.contains(_arg11)); List<Arg2> fooArgs2 = fooArgs.getArguments(new Fn2()); assertEquals(1, fooArgs2.size()); assertTrue(fooArgs2.contains(_arg21)); } @Test public void mergedWith() { Arg1 arg13 = new Arg1(); Arg2 arg23 = new Arg2(); ScenarioDefinition args1 = new ScenarioDefinition(_arg11).with(_arg12, "foo").with(arg13, "bar"); ScenarioDefinition args2 = new ScenarioDefinition(_arg21).with(_arg22, "foo").with(arg23, "bar"); ScenarioDefinition merged = args1.mergedWith(args2); FilteredScenarioDefinition fooArgs = merged.filter("foo"); FilteredScenarioDefinition barArgs = merged.filter("bar"); List<Arg1> fooArgs1 = fooArgs.getArguments(new Fn1()); assertEquals(2, fooArgs1.size()); assertTrue(fooArgs1.contains(_arg11)); assertTrue(fooArgs1.contains(_arg12)); List<Arg1> barArgs1 = barArgs.getArguments(new Fn1()); assertEquals(2, barArgs1.size()); assertTrue(barArgs1.contains(_arg11)); assertTrue(barArgs1.contains(arg13)); List<Arg2> fooArgs2 = fooArgs.getArguments(new Fn2()); assertEquals(2, fooArgs2.size()); assertTrue(fooArgs2.contains(_arg21)); assertTrue(fooArgs2.contains(_arg22)); List<Arg2> barArgs2 = barArgs.getArguments(new Fn2()); assertEquals(2, barArgs2.size()); assertTrue(barArgs2.contains(_arg21)); assertTrue(barArgs2.contains(arg23)); } @Test public void getFunctionTypes() { List<ScenarioArgument<?, ?>> argList = ImmutableList.<ScenarioArgument<?, ?>>of(_arg11); Map<String, List<ScenarioArgument<?, ?>>> argMap = new HashMap<>(); argMap.put("foo", ImmutableList.<ScenarioArgument<?, ?>>of(_arg21)); ScenarioDefinition scenarioDefinition = new ScenarioDefinition(argList, argMap); Set<Class<? extends ScenarioFunction<?, ?>>> functionTypes = scenarioDefinition.getFunctionTypes(); assertTrue(functionTypes.contains(Fn1.class)); assertTrue(functionTypes.contains(Fn2.class)); } public static class Arg1 implements ScenarioArgument<Arg1, Fn1> { @Override public Class<Fn1> getFunctionType() { return Fn1.class; } } public static class Fn1 implements ScenarioFunction<Arg1, Fn1> { @Override public Class<Arg1> getArgumentType() { return Arg1.class; } } public static class Arg2 implements ScenarioArgument<Arg2, Fn2> { @Override public Class<Fn2> getFunctionType() { return Fn2.class; } } public static class Fn2 implements ScenarioFunction<Arg2, Fn2> { @Override public Class<Arg2> getArgumentType() { return Arg2.class; } } }