blob: e3c93e6209aae4902b60a361ffb9b53792900cb1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Dmitry Stalnov (dstalnov@fusionone.com) - contributed fixes for:
* o bug "inline method - doesn't handle implicit cast" (see
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=24941).
* o bug inline method: compile error (array related) [refactoring]
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38471)
* o bug "Inline refactoring showed bogus error" (see bugzilla
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=42753)
* o inline call that is used in a field initializer
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38137)
* o inline call a field initializer: could detect self reference
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=44417)
* o Allow 'this' constructor to be inlined
* (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38093)
*******************************************************************************/
package org.eclipse.jdt.ui.tests.refactoring;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.InfixExpression;
import org.eclipse.jdt.core.dom.InfixExpression.Operator;
import org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring;
import org.eclipse.jdt.internal.corext.refactoring.code.OperatorPrecedence;
import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
public class InlineMethodTests extends AbstractSelectionTestCase {
private static InlineMethodTestSetup fgTestSetup;
private static final boolean BUG_82166= true;
public InlineMethodTests(String name) {
super(name, true);
}
public static Test suite() {
fgTestSetup= new InlineMethodTestSetup(new TestSuite(InlineMethodTests.class));
return fgTestSetup;
}
public static Test setUpTest(Test someTest) {
fgTestSetup= new InlineMethodTestSetup(someTest);
return fgTestSetup;
}
protected void setUp() throws Exception {
super.setUp();
fIsPreDeltaTest= true;
}
protected String getResourceLocation() {
return "InlineMethodWorkspace/TestCases/";
}
protected String adaptName(String name) {
return Character.toUpperCase(name.charAt(0)) + name.substring(1) + ".java";
}
protected void performTestInlineCall(IPackageFragment packageFragment, String id, int mode, String outputFolder) throws Exception {
ICompilationUnit unit= createCU(packageFragment, id);
int[] selection= getSelection();
InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(unit, new RefactoringASTParser(AST.JLS3).parse(unit, true), selection[0], selection[1]);
String out= null;
switch (mode) {
case COMPARE_WITH_OUTPUT:
out= getProofedContent(outputFolder, id);
break;
}
performTest(unit, refactoring, mode, out, true);
}
private void performTestInlineMethod(IPackageFragment packageFragment, String id, int mode, String outputFolder) throws Exception {
ICompilationUnit unit= createCU(packageFragment, id);
IType type= unit.getTypes()[0];
IMethod method= getMethodToInline(type);
InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(unit, new RefactoringASTParser(AST.JLS3).parse(unit, true), method.getNameRange().getOffset(), method.getNameRange().getLength());
String out= null;
switch (mode) {
case COMPARE_WITH_OUTPUT:
out= getProofedContent(outputFolder, id);
break;
}
performTest(unit, refactoring, mode, out, true);
}
private IMethod getMethodToInline(IType type) throws CoreException {
IMethod[] methods= type.getMethods();
for (int i= 0; i < methods.length; i++) {
if ("toInline".equals(methods[i].getElementName()))
return methods[i];
}
return null;
}
private void performTestInlineFirstConstructor(IPackageFragment packageFragment, String id, int mode, String outputFolder) throws Exception {
ICompilationUnit unit= createCU(packageFragment, id);
IType type= unit.getTypes()[0];
IMethod method= getFirstConstructor(type);
InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(unit, new RefactoringASTParser(AST.JLS3).parse(unit, true), method.getNameRange().getOffset(), method.getNameRange().getLength());
String out= null;
switch (mode) {
case COMPARE_WITH_OUTPUT:
out= getProofedContent(outputFolder, id);
break;
}
performTest(unit, refactoring, mode, out, true);
}
private IMethod getFirstConstructor(IType type) throws CoreException {
IMethod[] methods= type.getMethods();
for (int i= 0; i < methods.length; i++) {
if (methods[i].isConstructor())
return methods[i];
}
return null;
}
/* *********************** Invalid Tests ******************************* */
protected void performInvalidTest() throws Exception {
performTestInlineCall(fgTestSetup.getInvalidPackage(), getName(), INVALID_SELECTION, null);
}
private void performInvalidTestInlineMethod() throws Exception {
performTestInlineMethod(fgTestSetup.getInvalidPackage(), getName(), INVALID_SELECTION, null);
}
public void testRecursion() throws Exception {
performInvalidTest();
}
public void testInvalidFieldInitializer1() throws Exception {
performInvalidTest();
}
public void testInvalidFieldInitializer2() throws Exception {
performInvalidTest();
}
public void testInvalidFieldInitializer3() throws Exception {
performInvalidTest();
}
public void testLocalInitializer() throws Exception {
performInvalidTest();
}
public void testInterruptedStatement() throws Exception {
performInvalidTest();
}
public void testInterruptedExecutionFlow() throws Exception {
performInvalidTest();
}
public void testMultiLocal() throws Exception {
performInvalidTest();
}
public void testComplexBody() throws Exception {
performInvalidTest();
}
public void testCompileError1() throws Exception {
performInvalidTest();
}
public void testCompileError2() throws Exception {
performInvalidTest();
}
public void testCompileError3() throws Exception {
performInvalidTest();
}
public void testMultipleMethods() throws Exception {
performInvalidTestInlineMethod();
}
public void testSuperInThis() throws Exception {
performInvalidTestInlineMethod();
}
/* *********************** Simple Tests ******************************* */
private void performSimpleTest() throws Exception {
performTestInlineCall(fgTestSetup.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, "simple_out");
}
private void performSimpleTestInlineMethod() throws Exception {
performTestInlineMethod(fgTestSetup.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, "simple_out");
}
private void performSimpleTestInlineConstrcutor() throws Exception {
performTestInlineFirstConstructor(fgTestSetup.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, "simple_out");
}
public void testBasic1() throws Exception {
performSimpleTest();
}
public void testBasic2() throws Exception {
performSimpleTest();
}
public void testEmptyBody() throws Exception {
performSimpleTest();
}
public void testPrimitiveArray() throws Exception {
performSimpleTest();
}
public void testTypeArray() throws Exception {
performSimpleTest();
}
public void testInitializer() throws Exception {
performSimpleTest();
}
public void testSuper() throws Exception {
performSimpleTest();
}
public void testFieldInitializer1() throws Exception {
performSimpleTest();
}
public void testFieldInitializer2() throws Exception {
performSimpleTest();
}
public void testLabeledStatement() throws Exception {
performSimpleTest();
}
public void testConstructor1() throws Exception {
performSimpleTest();
}
public void testConstructor2() throws Exception {
performSimpleTestInlineConstrcutor();
}
public void testCatchClause() throws Exception {
performSimpleTest();
}
public void testTwoCalls() throws Exception {
performSimpleTestInlineMethod();
}
public void testNestedCalls() throws Exception {
performSimpleTestInlineMethod();
}
public void testSurroundingCallers() throws Exception {
performSimpleTestInlineMethod();
}
public void testComment1() throws Exception {
performSimpleTestInlineMethod();
}
/* *********************** Bug Tests ******************************* */
private void performBugTest() throws Exception {
performTestInlineCall(fgTestSetup.getBugsPackage(), getName(), COMPARE_WITH_OUTPUT, "bugs_out");
}
private void performBugTestInlineMethod() throws Exception {
performTestInlineMethod(fgTestSetup.getBugsPackage(), getName(), COMPARE_WITH_OUTPUT, "bugs_out");
}
public void test_72836() throws Exception {
performBugTest();
}
public void test_76241() throws Exception {
performBugTestInlineMethod();
}
public void test_94426() throws Exception {
performBugTestInlineMethod();
}
public void test_95128() throws Exception {
performBugTestInlineMethod();
}
public void test_117053() throws Exception {
performBugTest();
}
public void test_123356() throws Exception {
performBugTest();
}
public void test_44419() throws Exception {
performBugTest();
}
public void test_44419_2() throws Exception {
performBugTest();
}
public void test_98856() throws Exception {
performBugTest();
}
public void test_50139() throws Exception {
performBugTest();
}
/* *********************** Argument Tests ******************************* */
private void performArgumentTest() throws Exception {
performTestInlineCall(fgTestSetup.getArgumentPackage(), getName(), COMPARE_WITH_OUTPUT, "argument_out");
}
public void testFieldReference() throws Exception {
performArgumentTest();
}
public void testLocalReferenceUnused() throws Exception {
performArgumentTest();
}
public void testLocalReferenceRead() throws Exception {
performArgumentTest();
}
public void testLocalReferenceRead2() throws Exception {
performArgumentTest();
}
public void testLocalReferenceWrite() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop1() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop2() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop3() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop4() throws Exception {
performArgumentTest();
}
public void testLocalReferenceLoop5() throws Exception {
performArgumentTest();
}
public void testLocalReferencePrefix() throws Exception {
performArgumentTest();
}
public void testLiteralReferenceRead() throws Exception {
performArgumentTest();
}
public void testLiteralReferenceWrite() throws Exception {
performArgumentTest();
}
public void testParameterNameUsed1() throws Exception {
performArgumentTest();
}
public void testParameterNameUsed2() throws Exception {
performArgumentTest();
}
public void testParameterNameUsed3() throws Exception {
performArgumentTest();
}
public void testParameterNameUsed4() throws Exception {
performArgumentTest();
}
public void testParameterNameUnused1() throws Exception {
performArgumentTest();
}
public void testParameterNameUnused2() throws Exception {
performArgumentTest();
}
public void testParameterNameUnused3() throws Exception {
performArgumentTest();
}
public void testOneRead() throws Exception {
performArgumentTest();
}
public void testTwoReads() throws Exception {
performArgumentTest();
}
public void testWrite() throws Exception {
performArgumentTest();
}
public void testArray() throws Exception {
performArgumentTest();
}
public void testVarargs() throws Exception {
performArgumentTest();
}
public void testVarargs2() throws Exception {
performArgumentTest();
}
public void testVarargs3() throws Exception {
performArgumentTest();
}
public void testVarargs4() throws Exception {
performArgumentTest();
}
public void testVarargs5() throws Exception {
performArgumentTest();
}
public void testVarargs6() throws Exception {
performArgumentTest();
}
public void test91470() throws Exception {
performArgumentTest();
}
/* *********************** Name Conflict Tests ******************************* */
private void performNameConflictTest() throws Exception {
performTestInlineCall(fgTestSetup.getNameConflictPackage(), getName(), COMPARE_WITH_OUTPUT, "nameconflict_out");
}
public void testSameLocal() throws Exception {
performNameConflictTest();
}
public void testSameType() throws Exception {
performNameConflictTest();
}
public void testSameTypeAfter() throws Exception {
performNameConflictTest();
}
public void testSameTypeInSibling() throws Exception {
performNameConflictTest();
}
public void testLocalInType() throws Exception {
performNameConflictTest();
}
public void testFieldInType() throws Exception {
performNameConflictTest();
}
public void testSwitchStatement() throws Exception {
performNameConflictTest();
}
public void testBlocks() throws Exception {
performNameConflictTest();
}
/* *********************** Call Tests ******************************* */
private void performCallTest() throws Exception {
performTestInlineCall(fgTestSetup.getCallPackage(), getName(), COMPARE_WITH_OUTPUT, "call_out");
}
public void testExpressionStatement() throws Exception {
performCallTest();
}
public void testExpressionStatementWithReturn() throws Exception {
performCallTest();
}
public void testStatementWithFunction1() throws Exception {
performCallTest();
}
public void testStatementWithFunction2() throws Exception {
performCallTest();
}
public void testParenthesis() throws Exception {
performCallTest();
}
/* *********************** Expression Tests ******************************* */
private void performExpressionTest() throws Exception {
performTestInlineCall(fgTestSetup.getExpressionPackage(), getName(), COMPARE_WITH_OUTPUT, "expression_out");
}
public void testSimpleExpression() throws Exception {
performExpressionTest();
}
public void testSimpleExpressionWithStatements() throws Exception {
performExpressionTest();
}
public void testSimpleBody() throws Exception {
performExpressionTest();
}
public void testAssignment() throws Exception {
performExpressionTest();
}
public void testReturnStatement() throws Exception {
performExpressionTest();
}
public void testConditionalExpression() throws Exception {
performExpressionTest();
}
/* *********************** Control Statements Tests ******************************* */
private void performControlStatementTest() throws Exception {
performTestInlineCall(fgTestSetup.getControlStatementPackage(), getName(), COMPARE_WITH_OUTPUT, "controlStatement_out");
}
public void testForEmpty() throws Exception {
performControlStatementTest();
}
public void testForOne() throws Exception {
performControlStatementTest();
}
public void testForTwo() throws Exception {
performControlStatementTest();
}
public void testEnhancedForOne() throws Exception {
performControlStatementTest();
}
public void testEnhancedForTwo() throws Exception {
performControlStatementTest();
}
public void testIfThenTwo() throws Exception {
performControlStatementTest();
}
public void testIfElseTwo() throws Exception {
performControlStatementTest();
}
public void testForAssignmentOne() throws Exception {
performControlStatementTest();
}
public void testForAssignmentTwo() throws Exception {
performControlStatementTest();
}
public void testLabelOne() throws Exception {
performControlStatementTest();
}
public void testLabelTwo() throws Exception {
performControlStatementTest();
}
/* *********************** Receiver Tests ******************************* */
private void performReceiverTest() throws Exception {
performTestInlineCall(fgTestSetup.getReceiverPackage(), getName(), COMPARE_WITH_OUTPUT, "receiver_out");
}
private void performReceiverTestInlineMethod() throws Exception {
performTestInlineMethod(fgTestSetup.getReceiverPackage(), getName(), COMPARE_WITH_OUTPUT, "receiver_out");
}
public void testNoImplicitReceiver() throws Exception {
performReceiverTest();
}
public void testNameThisReceiver() throws Exception {
performReceiverTest();
}
public void testNameImplicitReceiver() throws Exception {
performReceiverTest();
}
public void testExpressionZeroImplicitReceiver() throws Exception {
performReceiverTest();
}
public void testExpressionOneImplicitReceiver() throws Exception {
performReceiverTest();
}
public void testExpressionTwoImplicitReceiver() throws Exception {
performReceiverTest();
}
public void testStaticReceiver() throws Exception {
performReceiverTest();
}
public void testReceiverWithStatic() throws Exception {
performReceiverTest();
}
public void testThisExpression() throws Exception {
performReceiverTest();
}
public void testFieldReceiver() throws Exception {
performReceiverTest();
}
public void testExplicitStaticThisFieldReceiver() throws Exception {
performReceiverTest();
}
public void testExplicitThisFieldReceiver() throws Exception {
performReceiverTest();
}
public void testExplicitStaticThisMethodReceiver() throws Exception {
performReceiverTest();
}
public void testExplicitThisMethodReceiver() throws Exception {
performReceiverTest();
}
public void testThisReceiver() throws Exception {
performReceiverTestInlineMethod();
}
public void testImplicitReceiverMethod() throws Exception {
performReceiverTest();
}
public void testImplicitReceiverField() throws Exception {
performReceiverTest();
}
/* *********************** Import Tests ******************************* */
private void performImportTest() throws Exception {
performTestInlineCall(fgTestSetup.getImportPackage(), getName(), COMPARE_WITH_OUTPUT, "import_out");
}
public void testUseArray() throws Exception {
performImportTest();
}
public void testUseInArgument() throws Exception {
performImportTest();
}
public void testUseInClassLiteral() throws Exception {
performImportTest();
}
public void testUseInDecl() throws Exception {
performImportTest();
}
public void testUseInDecl2() throws Exception {
performImportTest();
}
public void testUseInDecl3() throws Exception {
performImportTest();
}
public void testUseInDeclClash() throws Exception {
performImportTest();
}
public void testUseInLocalClass() throws Exception {
performImportTest();
}
public void testStaticImport() throws Exception {
performImportTest();
}
public void testStaticImport2() throws Exception {
if (BUG_82166) {
System.out.println("Disabled static import test 2 due to bug 82166");
return;
}
performImportTest();
}
/* *********************** Cast Tests ******************************* */
private void performCastTest() throws Exception {
performTestInlineCall(fgTestSetup.getCastPackage(), getName(), COMPARE_WITH_OUTPUT, "cast_out");
}
public void testNotOverloaded() throws Exception {
performCastTest();
}
public void testOverloadedPrimitives() throws Exception {
performCastTest();
}
public void testNotCastableOverloaded() throws Exception {
performCastTest();
}
public void testOverloaded() throws Exception {
performCastTest();
}
public void testHierarchyOverloadedPrimitives() throws Exception {
performCastTest();
}
public void testHierarchyOverloaded() throws Exception {
performCastTest();
}
public void testHierarchyOverloadedPrivate() throws Exception {
performCastTest();
}
public void testReceiverCast() throws Exception {
performCastTest();
}
public void testNoCast() throws Exception {
performCastTest();
}
/* *********************** Enum Tests ******************************* */
private void performEnumTest() throws Exception {
performTestInlineCall(fgTestSetup.getEnumPackage(), getName(), COMPARE_WITH_OUTPUT, "enum_out");
}
public void testBasic() throws Exception {
performEnumTest();
}
public void testAnonymousEnum() throws Exception {
performEnumTest();
}
/* *********************** Generic Tests ******************************* */
private void performGenericTest() throws Exception {
performTestInlineCall(fgTestSetup.getGenericPackage(), getName(), COMPARE_WITH_OUTPUT, "generic_out");
}
private void performGenericTestInlineMethod() throws Exception {
performTestInlineMethod(fgTestSetup.getGenericPackage(), getName(), COMPARE_WITH_OUTPUT, "generic_out");
}
public void testClassInstance() throws Exception {
performGenericTest();
}
public void testClassInstance2() throws Exception {
performGenericTestInlineMethod();
}
public void testSubClass1() throws Exception {
performGenericTest();
}
public void testSubClass2() throws Exception {
performGenericTest();
}
public void testMethodInstance1() throws Exception {
performGenericTest();
}
public void testMethodInstance2() throws Exception {
performGenericTest();
}
public void testMethodInstance3() throws Exception {
performGenericTestInlineMethod();
}
public void testParameterizedType1() throws Exception {
performGenericTest();
}
public void testParameterizedType2() throws Exception {
performGenericTest();
}
public void testParameterizedType3() throws Exception {
performGenericTest();
}
/* *********************** Binary Tests ******************************* */
public void testBinaryInlineSingle() throws Exception { // uses classes.Target#
performTestInlineCall(fgTestSetup.getBinaryPackage(), getName(), COMPARE_WITH_OUTPUT, "binary_out");
}
public void testBinaryInlineAll() throws Exception { // inlines all classes.Target2#logMessage(..)
String id= getName();
ICompilationUnit unit= createCU(fgTestSetup.getBinaryPackage(), id);
IType target2type= unit.getJavaProject().findType("classes.Target2");
IClassFile target2ClassFile= target2type.getClassFile();
IMethod logMessage= target2type.getMethods()[1]; // method 0 is ctor
InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(
target2ClassFile,
new RefactoringASTParser(AST.JLS3).parse(target2ClassFile, true),
logMessage.getNameRange().getOffset(),
logMessage.getNameRange().getLength());
assertFalse(refactoring.canEnableDeleteSource());
refactoring.setCurrentMode(InlineMethodRefactoring.Mode.INLINE_ALL);
String out= null;
switch (COMPARE_WITH_OUTPUT) {
case COMPARE_WITH_OUTPUT:
out= getProofedContent("binary_out", id);
break;
}
performTest(unit, refactoring, COMPARE_WITH_OUTPUT, out, true);
}
public void testBinaryNoSource() throws Exception {
performTestInlineCall(fgTestSetup.getBinaryPackage(), getName(), INVALID_SELECTION, null);
}
public void test_133575() throws Exception { // uses classes.BinEnum
performTestInlineCall(fgTestSetup.getBinaryPackage(), getName(), COMPARE_WITH_OUTPUT, "binary_out");
}
/* *********************** Operator Tests ******************************* */
private void performOperatorTest() throws Exception {
performTestInlineCall(fgTestSetup.getOperatorPackage(), getName(), COMPARE_WITH_OUTPUT, "operator_out");
}
public void testPlusPlus() throws Exception {
performOperatorTest();
}
public void testTimesPlus() throws Exception {
performOperatorTest();
}
public void testPrefixPlus() throws Exception {
performOperatorTest();
}
public void testPostfixPlus() throws Exception {
performOperatorTest();
}
public void testPlusTimes() throws Exception {
performOperatorTest();
}
public void testPlusPrefix() throws Exception {
performOperatorTest();
}
public void testPlusPostfix() throws Exception {
performOperatorTest();
}
public void testOperatorPredence() throws Exception {
AST ast= AST.newAST(AST.JLS3);
int assignment= OperatorPrecedence.getValue(ast.newAssignment());
int conditional= OperatorPrecedence.getValue(ast.newConditionalExpression());
assertTrue(assignment < conditional);
InfixExpression exp= ast.newInfixExpression();
exp.setOperator(Operator.CONDITIONAL_OR);
int conditional_or= OperatorPrecedence.getValue(exp);
assertTrue(conditional < conditional_or);
exp= ast.newInfixExpression();
exp.setOperator(Operator.CONDITIONAL_AND);
int conditional_and= OperatorPrecedence.getValue(exp);
assertTrue(conditional_or < conditional_and);
exp= ast.newInfixExpression();
exp.setOperator(Operator.OR);
int bitwiseInclusiveOR= OperatorPrecedence.getValue(exp);
assertTrue(conditional_and < bitwiseInclusiveOR);
exp= ast.newInfixExpression();
exp.setOperator(Operator.XOR);
int bitwiseEnclusiveOR= OperatorPrecedence.getValue(exp);
assertTrue(bitwiseInclusiveOR < bitwiseEnclusiveOR);
exp= ast.newInfixExpression();
exp.setOperator(Operator.AND);
int bitwiseAnd= OperatorPrecedence.getValue(exp);
assertTrue(bitwiseEnclusiveOR < bitwiseAnd);
exp= ast.newInfixExpression();
exp.setOperator(Operator.EQUALS);
int equals= OperatorPrecedence.getValue(exp);
assertTrue(bitwiseAnd < equals);
exp= ast.newInfixExpression();
exp.setOperator(Operator.NOT_EQUALS);
int notEquals= OperatorPrecedence.getValue(exp);
assertTrue(equals == notEquals);
exp= ast.newInfixExpression();
exp.setOperator(Operator.LESS);
int less= OperatorPrecedence.getValue(exp);
assertTrue(notEquals < less);
exp= ast.newInfixExpression();
exp.setOperator(Operator.LESS_EQUALS);
int lessEquals= OperatorPrecedence.getValue(exp);
assertTrue(less == lessEquals);
exp= ast.newInfixExpression();
exp.setOperator(Operator.GREATER);
int greater= OperatorPrecedence.getValue(exp);
assertTrue(lessEquals == greater);
exp= ast.newInfixExpression();
exp.setOperator(Operator.GREATER_EQUALS);
int greaterEquals= OperatorPrecedence.getValue(exp);
assertTrue(greater == greaterEquals);
int instance= OperatorPrecedence.getValue(ast.newInstanceofExpression());
assertTrue(greaterEquals == instance);
exp= ast.newInfixExpression();
exp.setOperator(Operator.LEFT_SHIFT);
int leftShift= OperatorPrecedence.getValue(exp);
assertTrue(instance < leftShift);
exp= ast.newInfixExpression();
exp.setOperator(Operator.RIGHT_SHIFT_SIGNED);
int rightShiftSigned= OperatorPrecedence.getValue(exp);
assertTrue(leftShift == rightShiftSigned);
exp= ast.newInfixExpression();
exp.setOperator(Operator.RIGHT_SHIFT_UNSIGNED);
int rightShiftUnSigned= OperatorPrecedence.getValue(exp);
assertTrue(rightShiftSigned == rightShiftUnSigned);
exp= ast.newInfixExpression();
exp.setOperator(Operator.PLUS);
int plus= OperatorPrecedence.getValue(exp);
assertTrue(rightShiftUnSigned < plus);
exp= ast.newInfixExpression();
exp.setOperator(Operator.MINUS);
int minus= OperatorPrecedence.getValue(exp);
assertTrue(plus == minus);
exp= ast.newInfixExpression();
exp.setOperator(Operator.TIMES);
int times= OperatorPrecedence.getValue(exp);
assertTrue(minus < times);
exp= ast.newInfixExpression();
exp.setOperator(Operator.DIVIDE);
int divide= OperatorPrecedence.getValue(exp);
assertTrue(times == divide);
exp= ast.newInfixExpression();
exp.setOperator(Operator.REMAINDER);
int remainder= OperatorPrecedence.getValue(exp);
assertTrue(divide == remainder);
int prefix= OperatorPrecedence.getValue(ast.newPrefixExpression());
assertTrue(remainder < prefix);
int postfix= OperatorPrecedence.getValue(ast.newPostfixExpression());
assertTrue(prefix < postfix);
}
}