Bug 567794 - Add test cases

Change-Id: Iabac529262cf6f72bb697613484828fb449619ea
Signed-off-by: Fabrice Tiercelin <fabrice.tiercelin@yahoo.fr>
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
index b43065b..8133e29 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
@@ -13,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.quickfix;
 
+import static org.junit.Assert.assertNotEquals;
+
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -1951,6 +1953,451 @@
 				+ "\n" //
 				+ "        return concatenation.toString();\n" //
 				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorReassignment(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation = concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation = concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public Runnable refactorFinalConcatenation(String[] names) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        final StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < names.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(names[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        Runnable supplier= new Runnable() {\n" //
+				+ "            @Override\n" //
+				+ "            public void run() {\n" //
+				+ "                System.out.println(concatenation.toString());\n" //
+				+ "            }\n" //
+				+ "        };\n" //
+				+ "        return supplier;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithChar(String[] titles) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String title : titles) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(',');\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(title);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithHardCodedDelimiter(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation = concatenation.append(\" \" + 1);\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithBuilderFirst(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithStringBuffer(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuffer concatenation = new StringBuffer();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithBooleanObject(String[] texts) {\n" //
+				+ "        Boolean isFirst = Boolean.TRUE;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = Boolean.FALSE;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation = concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithNegatedBoolean(String[] texts) {\n" //
+				+ "        Boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            } else {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithReversedBoolean(String[] texts) {\n" //
+				+ "        boolean isVisited = Boolean.FALSE;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isVisited) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            } else {\n" //
+				+ "                isVisited = Boolean.TRUE;\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithLotsOfMethods(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        System.out.println(concatenation.charAt(0));\n" //
+				+ "        System.out.println(concatenation.chars());\n" //
+				+ "        System.out.println(concatenation.codePoints());\n" //
+				+ "        System.out.println(concatenation.indexOf(\"foo\", 0));\n" //
+				+ "        System.out.println(concatenation.lastIndexOf(\"foo\"));\n" //
+				+ "        System.out.println(concatenation.lastIndexOf(\"foo\", 0));\n" //
+				+ "        System.out.println(concatenation.length());\n" //
+				+ "        System.out.println(concatenation.subSequence(0, 0));\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationOnForeach(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithConditionOnIndex(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (i > 0) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithInequalityOnIndex(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (i != 0) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithReversedConditionOnIndex(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (0 < i) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithGreaterOrEqualsOnIndex(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (i >= 1) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithDelimiterAtTheEnd(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "            if (i < texts.length - 1) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithMirroredCondition(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "            if (texts.length - 1 > i) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithNotEqualsCondition(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "            if (i < texts.length - 1) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithLessOrEqualsCondition(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "            if (i <= texts.length - 2) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingLength(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (concatenation.length() > 0) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingNotEmpty(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (concatenation.length() != 0) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingGreaterOrEqualsOne(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (concatenation.length() >= 1) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingLengthMirrored(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (0 < concatenation.length()) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingNotEmptyMirrored(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (0 != concatenation.length()) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingGreaterOrEqualsOneMirrored(String[] texts) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (1 <= concatenation.length()) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConstantBooleanShift(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            isFirst = false;\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorWithBooleanShiftAtTheEnd(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "            isFirst = false;\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorWithReversedBooleanShift(String[] texts) {\n" //
+				+ "        boolean isNotFirst = false;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (isNotFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "            isNotFirst = true;\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
 				+ "}\n";
 		ICompilationUnit cu= pack.createCompilationUnit("E.java", input, false, null);
 
@@ -1971,7 +2418,275 @@
 				+ "\n" //
 				+ "        return concatenation;\n" //
 				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorReassignment(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public Runnable refactorFinalConcatenation(String[] names) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        final String concatenation = String.join(\", \", names);\n" //
+				+ "\n" //
+				+ "        Runnable supplier= new Runnable() {\n" //
+				+ "            @Override\n" //
+				+ "            public void run() {\n" //
+				+ "                System.out.println(concatenation);\n" //
+				+ "            }\n" //
+				+ "        };\n" //
+				+ "        return supplier;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithChar(String[] titles) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(String.valueOf(','), titles);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithHardCodedDelimiter(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\" \" + 1, texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithBuilderFirst(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithStringBuffer(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithBooleanObject(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithNegatedBoolean(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithReversedBoolean(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithLotsOfMethods(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        System.out.println(concatenation.charAt(0));\n" //
+				+ "        System.out.println(concatenation.chars());\n" //
+				+ "        System.out.println(concatenation.codePoints());\n" //
+				+ "        System.out.println(concatenation.indexOf(\"foo\", 0));\n" //
+				+ "        System.out.println(concatenation.lastIndexOf(\"foo\"));\n" //
+				+ "        System.out.println(concatenation.lastIndexOf(\"foo\", 0));\n" //
+				+ "        System.out.println(concatenation.length());\n" //
+				+ "        System.out.println(concatenation.subSequence(0, 0));\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationOnForeach(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithConditionOnIndex(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithInequalityOnIndex(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithReversedConditionOnIndex(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithGreaterOrEqualsOnIndex(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithDelimiterAtTheEnd(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithMirroredCondition(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithNotEqualsCondition(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationWithLessOrEqualsCondition(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingLength(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingNotEmpty(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingGreaterOrEqualsOne(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingLengthMirrored(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingNotEmptyMirrored(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConcatenationTestingGreaterOrEqualsOneMirrored(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorConstantBooleanShift(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorWithBooleanShiftAtTheEnd(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String refactorWithReversedBooleanShift(String[] texts) {\n" //
+				+ "        \n" //
+				+ "\n" //
+				+ "        // Keep this comment\n" //
+				+ "        String concatenation = String.join(\", \", texts);\n" //
+				+ "\n" //
+				+ "        return concatenation;\n" //
+				+ "    }\n" //
 				+ "}\n";
+
+		assertNotEquals("The class must be changed", input, output);
 		assertGroupCategoryUsed(new ICompilationUnit[] { cu }, new String[] { MultiFixMessages.JoinCleanup_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu }, new String[] { output });
 	}
@@ -2122,6 +2837,273 @@
 				+ "\n" //
 				+ "        return concatenation.toString();\n" //
 				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithInitialization(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder(\"foo\");\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongIndex(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[0]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongBoolean(String[] texts, boolean isSecond) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isSecond) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongBoolean(String[] texts) {\n" //
+				+ "        boolean isSecond = false;\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isSecond = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongArray(String[] texts, String[] names) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(names[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongBuilder(String[] texts, StringBuilder otherBuilder) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            otherBuilder.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithAnotherBuilder(String[] texts, StringBuilder otherBuilder) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                otherBuilder.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithAdditionalStatement(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i]);\n" //
+				+ "            System.out.println(\"Hi!\");\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithWrongMethod(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (int i = 0; i < texts.length; i++) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(texts[i], 0, 2);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWrongVariable(String[] texts, String test) {\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                isFirst = false;\n" //
+				+ "            } else {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(test);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithBooleanShiftFirst(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            isFirst = false;\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithAppendingFirst(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            isFirst = false;\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithConditionAtTheEnd(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "            isFirst = false;\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWithNonsense(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            isFirst = false;\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorUnshiftedBoolean(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            isFirst = true;\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWrongCondition(String[] texts) {\n" //
+				+ "        boolean isFirst = true;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            isFirst = false;\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String doNotRefactorWrongInit(String[] texts) {\n" //
+				+ "        boolean isFirst = false;\n" //
+				+ "        StringBuilder concatenation = new StringBuilder();\n" //
+				+ "\n" //
+				+ "        for (String text : texts) {\n" //
+				+ "            if (!isFirst) {\n" //
+				+ "                concatenation.append(\", \");\n" //
+				+ "            }\n" //
+				+ "            isFirst = false;\n" //
+				+ "            concatenation.append(text);\n" //
+				+ "        }\n" //
+				+ "\n" //
+				+ "        return concatenation.toString();\n" //
+				+ "    }\n" //
 				+ "}\n";
 		ICompilationUnit cu= pack.createCompilationUnit("E.java", sample, false, null);