blob: 434612a94dd4191fd1fe4fff149a91f3985a7953 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* This is an implementation of an early-draft specification developed under the Java
* Community Process (JCP) and is made available for testing and evaluation purposes
* only. The code is not compatible with any specification of the JCP.
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.parser;
import org.eclipse.jdt.core.JavaModelException;
import junit.framework.Test;
public class SelectionParserTest13 extends AbstractSelectionTest {
static {
// TESTS_NUMBERS = new int[] { 1 };
// TESTS_NAMES = new String[] { "test005" };
}
public static Test suite() {
return buildMinimalComplianceTestSuite(SelectionParserTest13.class, F_13);
}
public SelectionParserTest13(String testName) {
super(testName);
}
/*
* Multi constant case statement with ':', selection node is the string constant
*/
public void test001() throws JavaModelException {
String string = "public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}";
String selection = "ONE";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "ONE";
String expectedUnitDisplayString =
"public class X {\n" +
" static final String ONE;\n" +
" static final String TWO;\n" +
" static final String THREE;\n" +
" <clinit>() {\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(String num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:ONE> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "ONE";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with ':', selection node is the first enum constant
*/
public void test002() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "ONE";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "ONE";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:ONE> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "ONE";
String testName = "X.java";
int selectionStart = string.indexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with ':', selection node is the second string constant
*/
public void test003() throws JavaModelException {
String string = "public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}";
String selection = "TWO";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "TWO";
String expectedUnitDisplayString =
"public class X {\n" +
" static final String ONE;\n" +
" static final String TWO;\n" +
" static final String THREE;\n" +
" <clinit>() {\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(String num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:TWO> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "TWO";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with ':', selection node is the second enum constant
*/
public void test004() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE:\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "TWO";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "TWO";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:TWO> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "TWO";
String testName = "X.java";
int selectionStart = string.indexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection node is the string constant
*/
public void test005() throws JavaModelException {
String string = "public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" }" +
" }\n" +
"}";
/*
* Note: The completion parser ignores the -> that follows and we end up creating
* the CaseStatement without maring it as an Expression, hence the ':' instead of the '->'
*/
String selection = "ONE";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "ONE";
String expectedUnitDisplayString =
"public class X {\n" +
" static final String ONE;\n" +
" static final String TWO;\n" +
" static final String THREE;\n" +
" <clinit>() {\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(String num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:ONE> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "ONE";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection node is the first enum constant
*/
public void test006() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break; // illegal, but should be ignored and shouldn't matter\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "ONE";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "ONE";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:ONE> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "ONE";
String testName = "X.java";
int selectionStart = string.indexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection node is the second string constant
*/
public void test007() throws JavaModelException {
String string = "public class X {\n" +
"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
" public static void foo(String num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
"}";
String selection = "TWO";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "TWO";
String expectedUnitDisplayString =
"public class X {\n" +
" static final String ONE;\n" +
" static final String TWO;\n" +
" static final String THREE;\n" +
" <clinit>() {\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(String num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:TWO> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "TWO";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection node is the second enum constant
*/
public void test008() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num) {\n" +
" switch (num) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "TWO";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "TWO";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num) {\n" +
" {\n" +
" switch (num) {\n" +
" case <SelectOnName:TWO> :\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "TWO";
String testName = "X.java";
int selectionStart = string.indexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a reference in the case block
* which same as the switch's expression
*/
public void test009() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE ->\n" +
" System.out.println(num_);\n" +
" break;\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num_) {\n" +
" {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a reference in the case block
* which is referencing a local variable defined in the case block
*/
public void test010() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE -> {\n" +
" int i_j = 0;" +
" System.out.println(i_j);\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "i_j";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "i_j";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num_) {\n" +
" {\n" +
" {\n" +
" int i_j;\n" +
" <SelectOnName:i_j>;\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "i_j";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type enum in switch expression
*/
public void test011() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(Num num_) {\n" +
" switch (num_) {\n" +
" case ONE, TWO, THREE -> {\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
" enum Num { ONE, TWO, THREE;}\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" enum Num {\n" +
" ONE(),\n" +
" TWO(),\n" +
" THREE(),\n" +
" <clinit>() {\n" +
" }\n" +
" Num() {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" }\n" +
" public static void foo(Num num_) {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test012() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(int num_) {\n" +
" switch (num_ + 1) {\n" +
" case 1, 2, 3 -> {\n" +
" break;" +
" }\n" +
" }" +
" }\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public static void foo(int num_) {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test013() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> (num_ + 1);\n" +
" default -> 0;\n" +
" }" +
" }\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public static void foo(int num_) {\n" +
" int i;\n" +
" {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test014() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> 0;\n" +
" default -> (num_ + 1);\n" +
" }" +
" }\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public static void foo(int num_) {\n" +
" int i;\n" +
" {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test015() throws JavaModelException {
String string = "public class X {\n" +
" public static void foo(int num_) {\n" +
" int i = switch (num_) {\n" +
" case 1, 2, 3 -> 0;\n" +
" default -> (num_ + 1);\n" +
" }" +
" }\n" +
"}";
String selection = "num_";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "num_";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public static void foo(int num_) {\n" +
" int i;\n" +
" {\n" +
" <SelectOnName:num_>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "num_";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
/*
* Multi constant case statement with '->', selection is a referenced name of type int in switch expression
*/
public void test016() throws JavaModelException {
String string = "public class X {\n" +
" public void bar(int s) {\n" +
" int i_j = switch (s) {\n" +
" case 1, 2, 3 -> (s+1);\n" +
" default -> i_j;\n" +
" };\n" +
" }\n" +
"}\n";
String selection = "i_j";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "i_j";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public void bar(int s) {\n" +
" int i_j;\n" +
" {\n" +
" <SelectOnName:i_j>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "i_j";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test017() throws JavaModelException {
String string = "public class X {\n" +
" public void bar(int s) {\n" +
" int i_j = switch (s) {\n" +
" case 1, 2, 3 -> (s+1);\n" +
" default -> (1+i_j);\n" +
" };\n" +
" }\n" +
"}\n";
String selection = "i_j";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "i_j";
String expectedUnitDisplayString =
"public class X {\n" +
" public X() {\n" +
" }\n" +
" public void bar(int s) {\n" +
" int i_j;\n" +
" {\n" +
" <SelectOnName:i_j>;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "i_j";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test018() throws JavaModelException {
String string = "import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" case 1 -> this::n_1; \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}";
String selection = "n_1";
String selectKey = "<SelectionOnReferenceExpressionName:this::";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "n_1";
String expectedUnitDisplayString =
"import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {\n" +
"}\n" +
"interface IN1 extends IN0 {\n" +
"}\n" +
"interface IN2 extends IN0 {\n" +
"}\n" +
"public class X {\n" +
" public X() {\n" +
" }\n" +
" IN1 n_1() {\n" +
" }\n" +
" IN2 n_2() {\n" +
" }\n" +
" <M>void m(Supplier<M> m2) {\n" +
" }\n" +
" void testSw(int i) {\n" +
" m(switch (i) {\n" +
"case 1 ->\n" +
" <SelectionOnReferenceExpressionName:this::n_1>;\n" +
"default ->\n" +
" this::n_2;\n" +
"});\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "this::n_1";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test019() throws JavaModelException {
String string = "import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" case 2 -> () -> n_1(); \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}";
String selection = "n_1";
String selectKey = "<SelectOnMessageSend:";
String expectedSelection = selectKey + selection + "()>";
String selectionIdentifier = "n_1";
String expectedUnitDisplayString =
"import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {\n" +
"}\n" +
"interface IN1 extends IN0 {\n" +
"}\n" +
"interface IN2 extends IN0 {\n" +
"}\n" +
"public class X {\n" +
" public X() {\n" +
" }\n" +
" IN1 n_1() {\n" +
" }\n" +
" IN2 n_2() {\n" +
" }\n" +
" <M>void m(Supplier<M> m2) {\n" +
" }\n" +
" void testSw(int i) {\n" +
" m(switch (i) {\n" +
"case 2 ->\n" +
" () -> <SelectOnMessageSend:n_1()>;\n" +
"default ->\n" +
" this::n_2;\n" +
"});\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "n_1()";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test020() throws JavaModelException {
String string = "import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1() { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int i) { \n" +
" m(switch(i) { \n" +
" default -> this::n_2; }); \n" +
" }\n" +
"}";
String selection = "n_2";
String selectKey = "<SelectionOnReferenceExpressionName:this::";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "n_2";
String expectedUnitDisplayString =
"import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {\n" +
"}\n" +
"interface IN1 extends IN0 {\n" +
"}\n" +
"interface IN2 extends IN0 {\n" +
"}\n" +
"public class X {\n" +
" public X() {\n" +
" }\n" +
" IN1 n_1() {\n" +
" }\n" +
" IN2 n_2() {\n" +
" }\n" +
" <M>void m(Supplier<M> m2) {\n" +
" }\n" +
" void testSw(int i) {\n" +
" m(switch (i) {\n" +
"default ->\n" +
" <SelectionOnReferenceExpressionName:this::n_2>;\n" +
"});\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "this::n_2";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test021() throws JavaModelException {
String string = "import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1(int ijk) { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int ijk) { \n" +
" m(switch(ijk) { \n" +
" default -> () -> n_1(ijk); }); \n" +
" }\n" +
"}";
String selection = "n_1";
String selectKey = "<SelectOnMessageSend:";
String expectedSelection = selectKey + selection + "(ijk)>";
String selectionIdentifier = "n_1";
String expectedUnitDisplayString =
"import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {\n" +
"}\n" +
"interface IN1 extends IN0 {\n" +
"}\n" +
"interface IN2 extends IN0 {\n" +
"}\n" +
"public class X {\n" +
" public X() {\n" +
" }\n" +
" IN1 n_1(int ijk) {\n" +
" }\n" +
" IN2 n_2() {\n" +
" }\n" +
" <M>void m(Supplier<M> m2) {\n" +
" }\n" +
" void testSw(int ijk) {\n" +
" m(switch (ijk) {\n" +
"default ->\n" +
" () -> <SelectOnMessageSend:n_1(ijk)>;\n" +
"});\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "n_1(ijk)";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
public void test022() throws JavaModelException {
String string = "import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {} \n" +
"interface IN1 extends IN0 {} \n" +
"interface IN2 extends IN0 {}\n" +
"public class X {\n" +
" IN1 n_1(int ijk) { return new IN1() {}; } \n" +
" IN2 n_2() { return null; } \n" +
" <M> void m( Supplier< M> m2) { } \n" +
" void testSw(int ijk) { \n" +
" m(switch(ijk) { \n" +
" default -> () -> n_1(ijk); }); \n" +
" }\n" +
"}";
String selection = "ijk";
String selectKey = "<SelectOnName:";
String expectedSelection = selectKey + selection + ">";
String selectionIdentifier = "ijk";
String expectedUnitDisplayString =
"import org.eclipse.jdt.annotation.*;\n" +
"import java.util.function.*;\n" +
"interface IN0 {\n" +
"}\n" +
"interface IN1 extends IN0 {\n" +
"}\n" +
"interface IN2 extends IN0 {\n" +
"}\n" +
"public class X {\n" +
" public X() {\n" +
" }\n" +
" IN1 n_1(int ijk) {\n" +
" }\n" +
" IN2 n_2() {\n" +
" }\n" +
" <M>void m(Supplier<M> m2) {\n" +
" }\n" +
" void testSw(int ijk) {\n" +
" m(switch (ijk) {\n" +
"default ->\n" +
" () -> n_1(<SelectOnName:ijk>);\n" +
"});\n" +
" }\n" +
"}\n";
String expectedReplacedSource = "ijk";
String testName = "X.java";
int selectionStart = string.lastIndexOf(selection);
int selectionEnd = selectionStart + selection.length() - 1;
checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
selectionIdentifier, expectedReplacedSource, testName);
}
}