package com.tek271.funj; import org.junit.Test; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static com.tek271.funj.TransformType.FILTER; import static com.tek271.funj.TransformType.MAP; import static com.tek271.funj.Zoo.Cat; import static org.junit.Assert.assertEquals; public class TransformerTest { final Zoo z1 = Zoo.createZoo(1); final Zoo z2 = Zoo.createZoo(2); final Zoo z3 = Zoo.createZoo(3); final Zoo z4 = Zoo.createZoo(4); final List<Zoo> zoos = newArrayList(z1, z2, z3, z4); @Test public void simpleTransform() { StepFunction fun = StepFunction.create() .staticClass(this.getClass()) .transformType(MAP) .functionName("mapZooId"); Transformer transformer = Transformer.create(); transformer.addSteps(fun); List<Integer> transformed = transformer.apply(zoos); assertEquals(newArrayList(10, 20, 30, 40), transformed); } @Test public void testIgnoreNulls() { StepFunction fun = StepFunction.create() .dynamicContext(this) .functionName("mapZooIdConditionally") .extraArgs(3) .ignoreNulls(); Transformer transformer = Transformer.create(); transformer.addSteps(fun); List<Integer> transformed = transformer.apply(zoos); assertEquals(newArrayList(10, 20, 40), transformed); } @Test public void testIncludeNulls() { StepFunction fun = StepFunction.create() .dynamicContext(this) .functionName("mapZooIdConditionally") .extraArgs(3) .ignoreNulls(false); Transformer transformer = Transformer.create(); transformer.addSteps(fun); List<Integer> transformed = transformer.apply(zoos); assertEquals(newArrayList(10, 20, null, 40), transformed); } @Test public void testExtraArgs() { StepFunction fun = StepFunction.create() .dynamicContext(this) .functionName("cityNameCallback") .extraArgs("city_1", 2) .ignoreNulls(); Transformer transformer = Transformer.create(); transformer.addSteps(fun); List<String> transformed = transformer.apply(zoos); assertEquals(newArrayList( "city_3", "city_4"), transformed); } @Test public void testChaining() { StepFunction catOfZoo = StepFunction.create() .dynamicContext(this) .functionName("catOfZoo"); StepFunction colorOfCat = StepFunction.create() .dynamicContext(this) .functionName("colorOfCat"); StepFunction colorFilter = StepFunction.create() .dynamicContext(this) .functionName("isNiceColor") .transformType(FILTER) .extraArgs("color_1"); Transformer transformer = Transformer.create(); transformer.addSteps(catOfZoo, colorOfCat, colorFilter); List<String> transformed = transformer.apply(zoos); List<String> expected = newArrayList("color_1", "color_4"); assertEquals(expected, transformed); } @SuppressWarnings("UnusedDeclaration") public static int mapZooId(Zoo zoo) { return zoo.id * 10; } @SuppressWarnings("UnusedDeclaration") public Integer mapZooIdConditionally(Zoo zoo, Integer idForNull) { if (zoo.id == idForNull) { return null; } return zoo.id * 10; } @SuppressWarnings("UnusedDeclaration") public String cityNameCallback(Zoo zoo, String excludedCity, int excludedId) { if (zoo.id==excludedId || zoo.getCity().equals(excludedCity)) { return null; } return zoo.getCity(); } @SuppressWarnings("UnusedDeclaration") public Cat catOfZoo(Zoo zoo) { return zoo.cat; } @SuppressWarnings("UnusedDeclaration") public String colorOfCat(Cat cat) { return cat.color; } @SuppressWarnings("UnusedDeclaration") public boolean isNiceColor(String color, String specialColor) { return color.equals(specialColor) || color.endsWith("4"); } }