| /********************************************************************** |
| * This file is part of "Object Teams Development Tooling"-Software |
| * |
| * Copyright 2010 (c) GK Software AG |
| * |
| * 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 |
| * |
| * Please visit http://www.eclipse.org/objectteams for updates and contact. |
| * |
| * Contributors: |
| * Stephan Herrmann - Initial API and implementation |
| **********************************************************************/ |
| package org.eclipse.objectteams.otdt.ui.tests.refactoring.rolefile; |
| |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.core.runtime.Assert; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IPackageFragmentRoot; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.ltk.core.refactoring.RefactoringStatus; |
| import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry; |
| import org.eclipse.objectteams.otdt.internal.refactoring.otrefactorings.rolefile.MoveToRoleFileRefactoring; |
| import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup; |
| import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest; |
| |
| public class MoveToRileFileTests extends RefactoringTest { |
| private static final String REFACTORING_PATH = "MoveToRileFile/"; |
| |
| public MoveToRileFileTests(String name) { |
| super(name); |
| } |
| |
| public static Test suite() { |
| return new MySetup(new TestSuite(MoveToRileFileTests.class)); |
| } |
| |
| public static Test setUpTest(Test test) { |
| return new MySetup(test); |
| } |
| |
| protected String getRefactoringPath() { |
| return REFACTORING_PATH; |
| } |
| |
| private ICompilationUnit[] createOutputCUs(String[] cuNames) throws Exception { |
| ICompilationUnit[] cus = new ICompilationUnit[cuNames.length]; |
| |
| for (int idx = 0; idx < cuNames.length; idx++) { |
| Assert.isNotNull(cuNames[idx]); |
| IPackageFragment pack = getPackageP(); |
| String cuName = cuNames[idx]; |
| int slash = cuName.lastIndexOf('/'); |
| if (slash != -1) { |
| String subDirName = cuName.substring(0, slash); |
| String cuSimpleName = cuName.substring(slash+1); |
| pack = ((IPackageFragmentRoot)pack.getParent()).getPackageFragment(pack.getElementName()+'.'+subDirName); |
| cus[idx] = createCUfromTestFile(pack, cuSimpleName, subDirName+'/', false); |
| } else { |
| cus[idx] = createCUfromTestFile(pack, cuName, false); |
| } |
| } |
| return cus; |
| } |
| |
| private static MoveToRoleFileRefactoring createMoveToRoleFileRefactoring(IType role) |
| throws JavaModelException { |
| MoveToRoleFileRefactoring refactoring = new MoveToRoleFileRefactoring(role); |
| return refactoring; |
| } |
| |
| private void performMoveToRoleFile_pass(String inputCU, String roleName, String[] outputCUNames) throws Exception { |
| ICompilationUnit cu = createCUfromTestFile(getPackageP(), inputCU); |
| ICompilationUnit[] outputCUs = null; |
| try { |
| |
| IType roleType = getType(cu, roleName); |
| assertTrue("role " + roleName + " does not exist", roleType.exists()); |
| |
| |
| MoveToRoleFileRefactoring ref = createMoveToRoleFileRefactoring(roleType); |
| |
| assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK()); |
| |
| RefactoringStatus checkInputResult = ref.checkFinalConditions(new NullProgressMonitor()); |
| assertTrue("precondition was supposed to pass", !checkInputResult.hasError()); |
| performChange(ref, false); |
| |
| outputCUs = createOutputCUs(outputCUNames); |
| for (int i = 0; i < outputCUs.length; i++) { |
| String expected = getFileContents(getOutputTestFileName(outputCUNames[i])); |
| String actual = outputCUs[i].getSource(); |
| assertEqualLines(expected, actual); |
| } |
| } finally { |
| performDummySearch(); |
| if (outputCUs != null) |
| for (int i = 0; i < outputCUs.length; i++) { |
| outputCUs[i].delete(false, null); |
| } |
| } |
| } |
| |
| private void performMoveToRoleFile_initialChecksFailing(String inputCU, String roleName, String expectedMsg) throws Exception { |
| ICompilationUnit cu = createCUfromTestFile(getPackageP(), inputCU); |
| try { |
| |
| IType roleType = getType(cu, roleName); |
| assertTrue("role " + roleName + " does not exist", roleType.exists()); |
| |
| |
| MoveToRoleFileRefactoring ref = createMoveToRoleFileRefactoring(roleType); |
| |
| RefactoringStatus result = ref.checkInitialConditions(new NullProgressMonitor()); |
| assertNotNull("initial condition must return a non-null result.", result); |
| assertTrue("initial condition was supposed to fail.", !result.isOK()); |
| assertNotNull("initial condition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR)); |
| if (expectedMsg != null) { |
| for(RefactoringStatusEntry e : result.getEntries()) { |
| if (expectedMsg.equals(e.getMessage())) |
| return; |
| } |
| fail("Expected message not found "+expectedMsg); |
| } |
| } finally { |
| performDummySearch(); |
| } |
| } |
| |
| // private void performMoveToRoleFile_failing(String inputCU, String roleName, String expectedMsg) throws Exception { |
| // ICompilationUnit cu = createCUfromTestFile(getPackageP(), inputCU); |
| // try { |
| // |
| // IType roleType = getType(cu, roleName); |
| // assertTrue("role " + roleName + " does not exist", roleType.exists()); |
| // |
| // |
| // MoveToRoleFileRefactoring ref = createMoveToRoleFileRefactoring(roleType); |
| // |
| // assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK()); |
| // |
| // RefactoringStatus result = ref.checkFinalConditions(new NullProgressMonitor()); |
| // assertNotNull("precondition was supposed to fail.", result); |
| // assertTrue("precondition was supposed to fail.", !result.isOK()); |
| // assertNotNull("precondition result is expected to contain an error.", result.getEntryMatchingSeverity(RefactoringStatus.ERROR)); |
| // if (expectedMsg != null) |
| // for(RefactoringStatusEntry e : result.getEntries()) { |
| // if (expectedMsg.equals(e.getMessage())) |
| // return; |
| // } |
| // fail("Expected message not found "+expectedMsg); |
| // } finally { |
| // performDummySearch(); |
| // } |
| // } |
| |
| |
| /******* tests ******************/ |
| |
| /* Move To Role File Tests */ |
| |
| public void testSimpleRole1() throws Exception { |
| performMoveToRoleFile_pass("T", "R", new String[] { "T", "T/R" }); |
| } |
| |
| public void testWithMoreContents() throws Exception { |
| performMoveToRoleFile_pass("T", "R2", new String[] { "T", "T/R2" }); |
| } |
| |
| public void testFieldAndRole() throws Exception { |
| performMoveToRoleFile_pass("T2", "R2", new String[] { "T2", "T2/R2" }); |
| } |
| |
| public void testNotARole() throws Exception { |
| performMoveToRoleFile_initialChecksFailing("T", "R", "The selected type 'R' is not a role class."); |
| } |
| |
| public void testTeamNotToplevel() throws Exception { |
| performMoveToRoleFile_initialChecksFailing("Outer", "R", "The enclosing team 'InnerTeam' is not a top-level type in its file."); |
| } |
| |
| public void testMoveNestedTeam() throws Exception { |
| performMoveToRoleFile_pass("Outer", "Inner", new String[] { "Outer", "Outer/Inner" }); |
| } |
| } |