| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.ui.tests.actions; |
| |
| import java.io.IOException; |
| |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.ISourceRange; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.internal.corext.SourceRange; |
| import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectEnclosingAction; |
| import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectNextAction; |
| import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectPreviousAction; |
| import org.eclipse.jdt.ui.tests.refactoring.AbstractSelectionTestCase; |
| import org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup; |
| import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest; |
| import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil; |
| |
| public class StructureSelectionActionTests extends RefactoringTest{ |
| |
| private static final Class clazz= StructureSelectionActionTests.class; |
| private static final String REFACTORING_PATH= "StructureSelectionAction/"; |
| |
| public StructureSelectionActionTests(String name){ |
| super(name); |
| } |
| |
| protected String getRefactoringPath() { |
| return REFACTORING_PATH; |
| } |
| |
| public static Test suite() { |
| return new RefactoringTestSetup(new TestSuite(clazz)); |
| } |
| |
| public static Test setUpTest(Test test) { |
| return new RefactoringTestSetup(test); |
| } |
| |
| private String getSimpleTestFileName(boolean input){ |
| String fileName = "A_" + getName(); |
| fileName += input ? "": "_out"; |
| fileName += input ? ".java": ".txt"; |
| return fileName; |
| } |
| |
| private String getTestFileName(boolean input){ |
| return TEST_PATH_PREFIX + getRefactoringPath() + getSimpleTestFileName(input); |
| } |
| |
| //------------ |
| protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean input) throws Exception { |
| return createCU(pack, getSimpleTestFileName(input), getFileContents(getTestFileName(input))); |
| } |
| |
| private ISourceRange getSelection(ICompilationUnit cu) throws Exception{ |
| String source= cu.getSource(); |
| int offset= source.indexOf(AbstractSelectionTestCase.SQUARE_BRACKET_OPEN); |
| int end= source.indexOf(AbstractSelectionTestCase.SQUARE_BRACKET_CLOSE); |
| return new SourceRange(offset, end - offset); |
| } |
| |
| private void check(ICompilationUnit cu, ISourceRange newRange) throws IOException, JavaModelException { |
| String expected= getFileContents(getTestFileName(false)); |
| String actual= cu.getSource().substring(newRange.getOffset(), newRange.getOffset() + newRange.getLength()); |
| // assertEquals("selection incorrect length", expected.length(), actual.length()); |
| assertEqualLines("selection incorrect", expected, actual); |
| } |
| |
| private void helperSelectUp() throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= getSelection(cu); |
| |
| ISourceRange newRange= new StructureSelectEnclosingAction().getNewSelectionRange(selection, cu); |
| |
| check(cu, newRange); |
| } |
| |
| private void helperSelectUp(int startLine, int startColumn, int endLine, int endColumn) throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn); |
| ISourceRange newRange= new StructureSelectEnclosingAction().getNewSelectionRange(selection, cu); |
| |
| check(cu, newRange); |
| } |
| |
| private void helperSelectNext(int startLine, int startColumn, int endLine, int endColumn) throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn); |
| |
| ISourceRange newRange= new StructureSelectNextAction().getNewSelectionRange(selection, cu); |
| check(cu, newRange); |
| } |
| |
| private void helperSelectPrevious(int startLine, int startColumn, int endLine, int endColumn) throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn); |
| |
| ISourceRange newRange= new StructureSelectPreviousAction().getNewSelectionRange(selection, cu); |
| check(cu, newRange); |
| } |
| |
| private void helperZeroLength(int line, int column) throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= new SourceRange(TextRangeUtil.getOffset(cu, line, column), 1); |
| |
| //DebugUtils.dump(name() + ":<" + cu.getSource().substring(selection.getOffset()) + "/>"); |
| |
| ISourceRange newRange= new StructureSelectEnclosingAction().getNewSelectionRange(selection, cu); |
| check(cu, newRange); |
| } |
| |
| private void offsetTest(int line, int column, int expected) throws Exception{ |
| String filePath= TEST_PATH_PREFIX + getRefactoringPath() + "OffsetTest.java"; |
| ICompilationUnit cu= createCU(getPackageP(), "OffsetTest.java", getFileContents(filePath)); |
| assertEquals("incorrect offset", expected, TextRangeUtil.getOffset(cu, line, column)); |
| } |
| |
| |
| // ---- tests --- |
| |
| public void test0() throws Exception{ |
| helperSelectUp(4, 9, 4, 13); |
| } |
| |
| public void test1() throws Exception{ |
| helperSelectUp(); |
| } |
| |
| public void test2() throws Exception{ |
| helperSelectUp(4, 16, 4, 21); |
| } |
| |
| public void test3() throws Exception{ |
| helperSelectUp(4, 9, 4, 21); |
| } |
| |
| public void test4() throws Exception{ |
| helperSelectUp(); |
| } |
| |
| public void test5() throws Exception{ |
| helperSelectUp(); |
| } |
| |
| public void test6() throws Exception{ |
| helperSelectUp(); |
| } |
| |
| public void test7() throws Exception{ |
| //helper1(); |
| helperSelectUp(3, 10, 3, 14); |
| } |
| |
| public void test8() throws Exception{ |
| helperSelectUp(3, 16, 3, 18); |
| } |
| |
| public void test9() throws Exception{ |
| helperSelectUp(3, 10, 3, 11); |
| } |
| |
| public void test10() throws Exception{ |
| helperSelectUp(4, 18, 4, 21); |
| } |
| |
| public void test11() throws Exception{ |
| helperSelectUp(4, 20, 4, 21); |
| } |
| |
| public void test12() throws Exception{ |
| helperSelectUp(4, 16, 4, 19); |
| } |
| |
| public void test13() throws Exception{ |
| helperSelectUp(4, 13, 4, 16); |
| } |
| |
| public void test14() throws Exception{ |
| helperSelectUp(4, 16, 4, 21); |
| } |
| |
| public void test15() throws Exception{ |
| // identical to test9 ??? |
| helperSelectUp(3, 10, 3, 11); |
| } |
| |
| public void test16() throws Exception{ |
| helperSelectUp(3, 16, 3, 17); |
| } |
| |
| public void test17() throws Exception{ |
| helperSelectUp(3, 5, 7, 6); |
| } |
| |
| public void test18() throws Exception{ |
| helperSelectUp(3, 5, 4, 6); |
| } |
| |
| public void test19() throws Exception{ |
| helperSelectUp(7, 14, 7, 16); |
| } |
| |
| public void test20() throws Exception{ |
| helperSelectUp(4, 18, 4, 19); |
| } |
| |
| public void test21() throws Exception{ |
| //regression test for bug#10182 |
| //printTestDisabledMessage("regression test for bug#11151"); |
| helperSelectNext(3, 21, 3, 28); |
| } |
| |
| public void test22() throws Exception{ |
| //regression test for bug#10182 |
| //printTestDisabledMessage("regression test for bug#11151"); |
| helperSelectPrevious(3, 21, 3, 28); |
| } |
| |
| public void test23() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#10570"); |
| helperSelectPrevious(5, 30, 7, 10); |
| } |
| |
| public void test24() throws Exception{ |
| //regression test for bug#11424 |
| helperSelectPrevious(3, 13, 5, 6); |
| } |
| |
| public void test25() throws Exception{ |
| //regression test for bug#11879 |
| helperSelectNext(5, 5, 6, 6); |
| } |
| |
| public void test26() throws Exception{ |
| //regression test for bug#11879 |
| helperSelectPrevious(5, 5, 6, 6); |
| } |
| |
| public void test27() throws Exception{ |
| //regression test for bug#11879 |
| helperSelectNext(4, 1, 4, 10); |
| } |
| |
| public void test28() throws Exception{ |
| //regression test for bug#11879 |
| helperSelectPrevious(4, 1, 4, 10); |
| } |
| |
| public void test29() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#16051"); |
| helperSelectUp(5, 13, 5, 17); |
| } |
| |
| public void test30() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#22082"); |
| helperSelectUp(3, 10, 3, 10); |
| } |
| |
| public void test31() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#22082"); |
| helperSelectUp(3, 10, 3, 10); |
| } |
| |
| public void test32() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#22939"); |
| helperSelectUp(4, 18, 4, 18); |
| } |
| |
| public void test33() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#22939"); |
| helperSelectUp(5, 23, 5, 23); |
| } |
| |
| public void test34() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23118"); |
| helperSelectUp(5, 14, 5, 14); |
| } |
| |
| public void test35() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23118"); |
| helperSelectUp(5, 14, 5, 14); |
| } |
| |
| public void test36() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23259"); |
| helperSelectUp(5, 14, 5, 14); |
| } |
| |
| public void test37() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23259"); |
| helperSelectUp(7, 14, 7, 14); |
| } |
| |
| public void test38() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23263"); |
| helperSelectPrevious(4, 5, 5, 16); |
| } |
| |
| public void test39() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23464"); |
| helperSelectPrevious(6, 13, 6, 20); |
| } |
| |
| public void test40() throws Exception{ |
| // printTestDisabledMessage("regression test for bug#23464 "); |
| helperSelectPrevious(7, 13, 7, 20); |
| } |
| |
| public void testZeroLength0() throws Exception{ |
| //printTestDisabledMessage(""); |
| helperZeroLength(4, 20); |
| } |
| |
| public void testZeroLength1() throws Exception{ |
| helperSelectNext(4, 16, 4, 16); |
| helperSelectPrevious(4, 17, 4, 17); |
| } |
| |
| public void testZeroLength2() throws Exception{ |
| helperSelectNext(4, 20, 4, 20); |
| helperSelectPrevious(4, 21, 4, 21); |
| } |
| |
| public void testZeroLength3() throws Exception{ |
| helperSelectNext(3, 10, 3, 10); |
| helperSelectPrevious(3, 11, 3, 11); |
| } |
| |
| public void testZeroLength4() throws Exception{ |
| helperSelectNext(4, 9, 4, 9); |
| helperSelectPrevious(4, 10, 4, 10); |
| } |
| |
| public void testZeroLength5() throws Exception{ |
| helperSelectNext(4, 11, 4, 11); |
| helperSelectPrevious(4, 14, 4, 14); |
| } |
| |
| public void testWholeCu() throws Exception{ |
| ICompilationUnit cu= createCUfromTestFile(getPackageP(), true); |
| ISourceRange selection= cu.getSourceRange(); |
| |
| ISourceRange newRange= new StructureSelectEnclosingAction().getNewSelectionRange(selection, cu); |
| |
| String expected= getFileContents(getTestFileName(false)); |
| String actual= cu.getSource().substring(newRange.getOffset(), newRange.getOffset() + newRange.getLength()); |
| assertEqualLines("selection incorrect", expected, actual); |
| } |
| |
| //--- offset calculation tests |
| |
| public void testOffset0() throws Exception{ |
| offsetTest(4, 20, 47); |
| } |
| |
| public void testOffset1() throws Exception{ |
| offsetTest(5, 9, 53); |
| } |
| |
| public void testOffset2() throws Exception{ |
| offsetTest(7, 13, 81); |
| } |
| |
| public void testTabCount0(){ |
| int t= TextRangeUtil.calculateTabCountInLine("\t\t1", 9); |
| assertEquals(2, t); |
| } |
| |
| public void testTabCount1(){ |
| int t= TextRangeUtil.calculateTabCountInLine("\t\tint i= 1 + 1;", 20); |
| assertEquals(2, t); |
| } |
| |
| public void testTabCount2(){ |
| int t= TextRangeUtil.calculateTabCountInLine("\t\t\treturn;", 13); |
| assertEquals(3, t); |
| } |
| |
| public void testTabCount3(){ |
| int t= TextRangeUtil.calculateTabCountInLine("\tvoid m(){m();", 18); |
| assertEquals(1, t); |
| } |
| |
| } |