1 19 20 21 22 package org.netbeans.modules.refactoring.java; 23 24 import java.io.File ; 25 import java.io.IOException ; 26 import java.util.Arrays ; 27 import java.util.Collection ; 28 import java.util.LinkedList ; 29 import java.util.List ; 30 import java.util.Map ; 31 import java.util.TreeMap ; 32 import org.netbeans.junit.diff.LineDiff; 33 import org.netbeans.modules.refactoring.api.AbstractRefactoring; 34 import org.netbeans.modules.refactoring.api.Problem; 35 import org.netbeans.modules.refactoring.api.RefactoringElement; 36 import org.netbeans.modules.refactoring.api.RefactoringSession; 37 import org.openide.filesystems.FileObject; 38 import org.openide.filesystems.FileUtil; 39 40 44 public abstract class RefactoringTestCase extends LogTestCase{ 45 46 public interface ParameterSetter { 47 48 void setParameters(); 49 } 50 51 54 private Map <String ,LinkedList <String >> refactoredFiles; 55 56 59 private List <String > projectSources; 60 61 64 public RefactoringTestCase(String name) { 65 super(name); 66 } 67 68 protected void addRefactoringElement(RefactoringElement element) { 69 FileObject fo = element.getParentFile(); 70 String relPath = getRelativeFileName(fo); 71 if(!refactoredFiles.keySet().contains(relPath)) { try { 73 File fBackUp = new File (getWorkDir(),getRelativeFileName(fo)); 74 File oFile = FileUtil.toFile(fo); 75 copyFile(oFile, fBackUp); 76 } catch (IOException ioe) { 77 fail(ioe.getMessage()); 78 } 79 refactoredFiles.put(relPath, new LinkedList <String >()); 80 } 81 List <String > list = refactoredFiles.get(relPath); 82 list.add(element.getDisplayText()); 83 } 84 85 protected void dumpRefactoredFiles() { 86 for (String fileName: refactoredFiles.keySet()) { 87 ref(fileName); 88 ref("--------------------"); 89 for(String text : refactoredFiles.get(fileName)) { 90 ref(text); 91 } 92 ref("--------------------"); 93 try { 94 File actualFile = new File (classPathWorkDir,fqn2FilePath(fileName)); 95 File backupedFile = new File (getWorkDir(),fileName); 96 log("Original file:"); 97 log(backupedFile); 98 if(!actualFile.exists()) { 99 ref("File was deleted"); 100 } else { 101 log("Actual file:"); 102 log(actualFile); 103 File diff = File.createTempFile("refactoring", null); 104 LineDiff ldiff = new LineDiff(); 105 ldiff.diff(actualFile,backupedFile, diff); 106 ref(diff); 107 diff.delete(); 108 } 109 ref("\n"); 110 } catch (IOException ioe) { 111 fail(ioe.getMessage()); 112 } 113 } 114 } 115 116 121 protected void dumpNewFiles(List <String > originalSources,List <String > currentSources) { 122 log("Original sources: "+originalSources); 123 log("Current sources: "+currentSources); 124 for (String fileName : currentSources) { 125 if(!originalSources.contains(fileName)) { 126 File file = new File (classPathWorkDir,fqn2FilePath(fileName)); 127 ref(fileName); 128 ref("--------------------"); 129 if(file.isDirectory()) ref("Directory created"); 130 else ref(file); 131 ref("\n"); 132 } 133 } 134 } 135 136 private void dumpDir(File dir, List <String > result) { 137 File [] files = dir.listFiles(); 138 Arrays.sort(files); 139 for (int i = 0; i < files.length; i++) { 140 File file = files[i]; 141 if(file.getName().startsWith(".")) continue; result.add(getRelativeFileName(FileUtil.toFileObject(file))); 143 if(file.isDirectory()) dumpDir(file, result); 144 } 145 } 146 147 148 private List <String > getProjectSources() { 149 List <String > list = new LinkedList <String >(); 150 dumpDir(classPathWorkDir, list); 151 return list; 152 } 153 154 155 156 private String fqn2FilePath(String pkg) { 157 if(pkg.endsWith(".java")) { 158 String cutExtension = pkg.substring(0, pkg.length()-5); 159 return cutExtension.replace('.', '/')+".java"; 160 } else { 161 return pkg.replace('.', '/'); 162 } 163 } 164 165 public boolean perform(AbstractRefactoring absRefactoring, ParameterSetter parameterSetter) { 166 refactoredFiles = new TreeMap <String , LinkedList <String >>(); 167 projectSources = getProjectSources(); 168 Problem problem = absRefactoring.preCheck(); 169 boolean fatal = false; 170 while(problem!=null) { 171 ref.print(problem.getMessage()); 172 if(problem.isFatal()) fatal = true; 173 problem = problem.getNext(); 174 } 175 if(fatal) return false; 176 parameterSetter.setParameters(); 177 problem = absRefactoring.fastCheckParameters(); 178 while(problem!=null) { 179 ref.print(problem.getMessage()); 180 if(problem.isFatal()) fatal = true; 181 problem = problem.getNext(); 182 } 183 if(fatal) return false; 184 problem = absRefactoring.checkParameters(); 185 while(problem!=null) { 186 ref.print(problem.getMessage()); 187 if(problem.isFatal()) fatal = true; 188 problem = problem.getNext(); 189 } 190 if(fatal) return false; 191 RefactoringSession rs = RefactoringSession.create("Session"); 192 absRefactoring.prepare(rs); 193 Collection <RefactoringElement> elems = rs.getRefactoringElements(); 194 for (RefactoringElement refactoringElement : elems) { 195 addRefactoringElement(refactoringElement); 196 } 197 rs.doRefactoring(true); 198 dumpRefactoredFiles(); 199 dumpNewFiles(projectSources, getProjectSources()); 200 return true; 201 } 202 203 } 204 | Popular Tags |