### Question:
StringComplexFieldActions implements AtlasFieldAction { @AtlasActionProcessor(sourceType = FieldType.ANY) public static String concatenate(Concatenate concat, List<String> inputs) { if (concat == null) { throw new IllegalArgumentException("Concatenate must be specified with a delimiter"); } if (inputs == null) { return null; } String delim = concat.getDelimiter() == null ? "" : concat.getDelimiter(); StringBuilder builder = new StringBuilder(); boolean isFirst = true; for (String entry : inputs) { if (!isFirst) { builder.append(delim); } if (entry != null) { builder.append(entry); } isFirst = false; } return builder.toString(); }  @AtlasActionProcessor static String append(Append append, String input); @AtlasActionProcessor(sourceType = FieldType.ANY) static String concatenate(Concatenate concat, List<String> inputs); @AtlasActionProcessor static Boolean endsWith(EndsWith endsWith, String input); @AtlasActionProcessor static String format(Format format, List<Object> input); @AtlasActionProcessor static String genareteUUID(GenerateUUID action); @AtlasActionProcessor static Number indexOf(IndexOf indexOf, String input); @AtlasActionProcessor static Number lastIndexOf(LastIndexOf lastIndexOf, String input); @AtlasActionProcessor static String padStringRight(PadStringRight padStringRight, String input); @AtlasActionProcessor static String padStringLeft(PadStringLeft padStringLeft, String input); @AtlasActionProcessor static String prepend(Prepend action, String input); @AtlasActionProcessor static String replaceAll(ReplaceAll replaceAll, String input); @AtlasActionProcessor static String replaceFirst(ReplaceFirst replaceFirst, String input); @AtlasActionProcessor(sourceType = FieldType.ANY) static String[] split(Split split, String input); @AtlasActionProcessor(sourceType = FieldType.ANY) static String[] repeat(Repeat repeat, String input); @AtlasActionProcessor static Boolean startsWith(StartsWith startsWith, String input); @AtlasActionProcessor static String subString(SubString subString, String input); @AtlasActionProcessor static String subStringAfter(SubStringAfter subStringAfter, String input); @AtlasActionProcessor static String subStringBefore(SubStringBefore subStringBefore, String input); static final String STRING_SEPARATOR_REGEX; static final Pattern STRING_SEPARATOR_PATTERN; }### Answer:
@Test public void testConcatenate() { Concatenate action = new Concatenate(); assertEquals(null, StringComplexFieldActions.concatenate(action, null)); assertEquals("1true2.0", StringComplexFieldActions.concatenate(action, Arrays.asList(new String[] {"1", "true", "2.0"}))); assertEquals("1true2.0", StringComplexFieldActions.concatenate(action, Arrays.asList("1", "true", "2.0"))); action.setDelimiter("-"); assertEquals(null, StringComplexFieldActions.concatenate(action, null)); assertEquals("1-true-2.0", StringComplexFieldActions.concatenate(action, Arrays.asList(new String[] {"1", "true", "2.0"}))); assertEquals("1-true-2.0", StringComplexFieldActions.concatenate(action, Arrays.asList("1", "true", "2.0"))); }
@Test(expected=IllegalArgumentException.class) public void testConcatenateNullAction() { StringComplexFieldActions.concatenate(null, null); }