/**
* Copyright (C) 2005 - 2014 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.jdt.command.refactoring;
import java.io.File;
import java.util.List;
import java.util.Map;
import org.eclim.Eclim;
import org.eclim.EclimTestCase;
import org.eclim.plugin.jdt.Jdt;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test case for RenameCommand.
*
* @author Eric Van Dewoestine
*/
public class RenameCommandTest
extends EclimTestCase
{
@Test
@SuppressWarnings("unchecked")
public void executeRenameField()
throws Exception
{
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
String p = Eclim.resolveFile(Jdt.TEST_PROJECT, "");
String tn1Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertTrue("field 'FOO' not found", tn1Contents.indexOf(
"public static final String FOO = \"value\";") > 0);
String tn2Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertTrue("import of 'FOO' not found", tn2Contents.indexOf(
"import static org.eclim.test.refactoring.rename.n1.TestN1.FOO;"
) > 0);
assertTrue("print of 'FOO' not found", tn2Contents.indexOf(
"System.out.println(FOO);") > 0);
Map<String,Object> preview = (Map<String,Object>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "BAR", "-o", "98", "-l", "3", "-e", "utf-8", "-v",
});
assertEquals(
"-command \"java_refactor_rename\" " +
"-p \"eclim_unit_test_java\" " +
"-f \"src/org/eclim/test/refactoring/rename/n1/TestN1.java\" " +
"-n \"BAR\" -o \"98\" -l \"3\" -e \"utf-8\"", preview.get("apply"));
List<Map<String,String>> changes =
(List<Map<String,String>>)preview.get("changes");
assertEquals(2, changes.size());
assertEquals("diff", changes.get(0).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
changes.get(0).get("file"));
assertEquals("diff", changes.get(1).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
changes.get(1).get("file"));
// preview diff
String diff = (String)Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "BAR", "-o", "98", "-l", "3", "-e", "utf-8", "-v",
"-d", Eclim.resolveFile(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java"),
});
assertEquals("Wrong diff results",
tn2Contents.replaceAll("FOO", "BAR"), diff);
// rename
List<Map<String,String>> result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "BAR", "-o", "98", "-l", "3", "-e", "utf-8",
});
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
result.get(0).get("file"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
result.get(1).get("file"));
String tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertEquals("Wrong new contents",
tn1Contents.replaceAll("FOO", "BAR"), tn1NewContents);
String tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertEquals("Wrong new contents",
tn2Contents.replaceAll("FOO", "BAR"), tn2NewContents);
}
@Test
@SuppressWarnings("unchecked")
public void executeRenameMethod()
throws Exception
{
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
String p = Eclim.resolveFile(Jdt.TEST_PROJECT, "");
String tn1Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertTrue("method 'testMethod' not found", tn1Contents.indexOf(
"public void testMethod()") > 0);
String tn2Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertTrue("method 'testMethod' not found", tn2Contents.indexOf(
"test.testMethod()") > 0);
// preview
Map<String,Object> preview = (Map<String,Object>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "testRename", "-o", "310", "-l", "10", "-e", "utf-8", "-v",
});
assertEquals(
"-command \"java_refactor_rename\" " +
"-p \"eclim_unit_test_java\" " +
"-f \"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java\" " +
"-n \"testRename\" -o \"310\" -l \"10\" -e \"utf-8\"", preview.get("apply"));
List<Map<String,String>> changes =
(List<Map<String,String>>)preview.get("changes");
assertEquals(2, changes.size());
assertEquals("diff", changes.get(0).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
changes.get(0).get("file"));
assertEquals("diff", changes.get(1).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
changes.get(1).get("file"));
// preview diff
String diff = (String)Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "testRename", "-o", "310", "-l", "10", "-e", "utf-8", "-v",
"-d", Eclim.resolveFile(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java"),
});
assertEquals("Wrong diff results",
tn1Contents.replaceAll("testMethod", "testRename"), diff);
// rename
List<Map<String,String>> result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "testRename", "-o", "310", "-l", "10", "-e", "utf-8",
});
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
result.get(0).get("file"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
result.get(1).get("file"));
String tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertEquals("Wrong new contents",
tn1Contents.replaceAll("testMethod", "testRename"), tn1NewContents);
String tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertEquals("Wrong new contents",
tn2Contents.replaceAll("testMethod", "testRename"), tn2NewContents);
}
@Test
@SuppressWarnings("unchecked")
public void executeRenameType()
throws Exception
{
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
modifies(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
String p = Eclim.resolveFile(Jdt.TEST_PROJECT, "");
String tn1Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertTrue("class 'TestN1' not found", tn1Contents.indexOf(
"public class TestN1") > 0);
String tn2Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertTrue("import of 'TestN1' not found", tn2Contents.indexOf(
"import org.eclim.test.refactoring.rename.n1.TestN1;") > 0);
// preview
Map<String,Object> preview = (Map<String,Object>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "TestR1", "-o", "60", "-l", "6", "-e", "utf-8", "-v",
});
assertEquals(
"-command \"java_refactor_rename\" " +
"-p \"eclim_unit_test_java\" " +
"-f \"src/org/eclim/test/refactoring/rename/n1/TestN1.java\" " +
"-n \"TestR1\" -o \"60\" -l \"6\" -e \"utf-8\"", preview.get("apply"));
List<Map<String,String>> changes =
(List<Map<String,String>>)preview.get("changes");
assertEquals(2, changes.size());
assertEquals("diff", changes.get(0).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
changes.get(0).get("file"));
assertEquals("other", changes.get(1).get("type"));
assertEquals("Rename compilation unit 'TestN1.java' to 'TestR1.java'",
changes.get(1).get("message"));
// preview diff
String diff = (String)Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "TestR1", "-o", "60", "-l", "6", "-e", "utf-8", "-v",
"-d", Eclim.resolveFile(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java"),
});
assertEquals("Wrong diff results",
tn2Contents.replaceAll("TestN1", "TestR1"), diff);
// rename
List<Map<String,String>> result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
"-n", "TestR1", "-o", "60", "-l", "6", "-e", "utf-8",
});
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
result.get(0).get("from"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestR1.java",
result.get(0).get("to"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
result.get(1).get("file"));
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java")).exists());
String tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestR1.java");
assertEquals("Wrong new contents",
tn1Contents.replaceAll("TestN1", "TestR1"), tn1NewContents);
String tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertEquals("Wrong diff results",
tn2Contents.replaceAll("TestN1", "TestR1"), tn2NewContents);
// rename it back
result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/TestR1.java",
"-n", "TestN1", "-o", "60", "-l", "6", "-e", "utf-8",
});
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestR1.java")).exists());
tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertEquals("Wrong new contents", tn1Contents, tn1NewContents);
tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertEquals("Wrong diff results", tn2Contents, tn2NewContents);
}
@Test
@SuppressWarnings("unchecked")
public void executeRenamePackage()
throws Exception
{
String p = Eclim.resolveFile(Jdt.TEST_PROJECT, "");
String tn1Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertTrue("package 'n1' not found", tn1Contents.indexOf(
"package org.eclim.test.refactoring.rename.n1;") != -1);
String tn2Contents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertTrue("package 'n1.n2' not found", tn2Contents.indexOf(
"package org.eclim.test.refactoring.rename.n1.n2;") != -1);
// preview
Map<String,Object> preview = (Map<String,Object>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "org.eclim.test.refactoring.rename.r1", "-o", "42", "-l", "2", "-e", "utf-8", "-v",
});
assertEquals(
"-command \"java_refactor_rename\" " +
"-p \"eclim_unit_test_java\" " +
"-f \"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java\" " +
"-n \"org.eclim.test.refactoring.rename.r1\" " +
"-o \"42\" -l \"2\" -e \"utf-8\"", preview.get("apply"));
List<Map<String,String>> changes =
(List<Map<String,String>>)preview.get("changes");
assertEquals(2, changes.size());
assertEquals("diff", changes.get(0).get("type"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
changes.get(0).get("file"));
assertEquals("other", changes.get(1).get("type"));
assertEquals(
"Rename package 'org.eclim.test.refactoring.rename.n1' and " +
"subpackages to 'org.eclim.test.refactoring.rename.r1'",
changes.get(1).get("message"));
// preview diff
String diff = (String)Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "org.eclim.test.refactoring.rename.r1", "-o", "42", "-l", "2", "-e", "utf-8", "-v",
"-d", Eclim.resolveFile(Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java"),
});
assertEquals("Wrong diff results",
tn2Contents.replaceAll("n1\\.TestN1", "r1.TestN1"), diff);
// rename
List<Map<String,String>> result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
"-n", "org.eclim.test.refactoring.rename.r1",
"-o", "42", "-l", "2", "-e", "utf-8",
});
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/TestN1.java",
result.get(0).get("from"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/r1/TestN1.java",
result.get(0).get("to"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2",
result.get(1).get("from"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/r1/n2",
result.get(1).get("to"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java",
result.get(2).get("from"));
assertEquals(p + "src/org/eclim/test/refactoring/rename/r1/n2/TestN2.java",
result.get(2).get("to"));
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java")).exists());
String tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/r1/TestN1.java");
assertEquals("Wrong new contents",
tn1Contents.replaceAll("n1", "r1"), tn1NewContents);
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN1.java")).exists());
String tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/r1/n2/TestN2.java");
assertEquals("Wrong new contents",
tn2Contents.replaceAll("n1", "r1"), tn2NewContents);
// rename it back
result = (List<Map<String,String>>)
Eclim.execute(new String[]{
"java_refactor_rename", "-p", Jdt.TEST_PROJECT,
"-f", "src/org/eclim/test/refactoring/rename/r1/n2/TestN2.java",
"-n", "org.eclim.test.refactoring.rename.n1",
"-o", "42", "-l", "2", "-e", "utf-8",
});
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/r1/TestN1.java")).exists());
tn1NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/TestN1.java");
assertEquals("Wrong new contents", tn1Contents, tn1NewContents);
assertFalse(new File(Eclim.resolveFile(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/r1/n2/TestN1.java")).exists());
tn2NewContents = Eclim.fileToString(
Jdt.TEST_PROJECT,
"src/org/eclim/test/refactoring/rename/n1/n2/TestN2.java");
assertEquals("Wrong new contents", tn2Contents, tn2NewContents);
}
}