package com.javaeasy.junitmigraiotn;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import com.javaeasy.fileiterator.ProcessFileSysItemIF;
public class JunitMigrationProcessor implements ProcessFileSysItemIF {
PrintWriter errLog;
@Override
public void initProcessor(File root) {
File f = new File("D:\\errjunitmigration.log");
try {
f.delete();
f.createNewFile();
errLog = new PrintWriter(new FileWriter(f));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public String[] getProcessFileExtentions() {
return new String[] { "java" };
}
@Override
public String[] getProcessFileNames() {
return null;
}
@Override
public void preProcessFolder(File folder) {
log("Processing folder " + folder.getName() + "...");
}
@Override
public void postProcessFolder(File folder) {
log("Folder " + folder.getName() + " processed done");
}
@Override
public void preProcessFile(File file) {
log("Processing file " + file.getName());
}
@Override
public void processFile(File file) {
String full = file.getPath();
if (full.contains(".svn")) {
return;
}
File tempFile = new File(file.getPath() + ".tmp");
try {
tempFile.createNewFile();
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "UTF-8"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(tempFile), "UTF-8"));
String line = null;
String parentClass = "";
while ((line = br.readLine()) != null) {
if (line.contains("extends TestCase")) {
line = line.replace("extends TestCase", "");
} else {
if (line.contains("extends")) {
String[] words = line.split(" ");
for (int i = 0; i < words.length; i++) {
if ("extends".equals(words[i])) {
parentClass = words[i + 1];
}
}
}
}
if (line.contains("super.setUp")) {
line = line.replace("super.setUp", parentClass + ".setUp");
}
if (line.contains("void test")
&& (!line.contains("private void test"))) {
pw.write(" @Test\r\n");
}
if (line.contains("void setUp")) {
pw.write(" @BeforeClass\r\n");
int voidIdx = line.indexOf("void");
line = line.substring(0, voidIdx) + " static "
+ line.substring(voidIdx);
}
if (line.contains("void tearDown")) {
pw.write(" @AfterClass\r\n");
int voidIdx = line.indexOf("void");
line = line.substring(0, voidIdx) + " static "
+ line.substring(voidIdx);
}
pw.write(line + "\r\n");
}
pw.flush();
br.close();
pw.close();
} catch (Throwable e) {
errLog.write("Exception while processing " + file.getName() + " "
+ e.getLocalizedMessage() + "\r\n");
e.printStackTrace();
}
boolean deleteRet = file.delete();
if (deleteRet == false) {
errLog.write("Failed to delete " + file.getName() + "\r\n");
}
boolean renameRet = tempFile.renameTo(file);
if (renameRet == false) {
errLog.write("Failed to rename to " + file.getName() + "\r\n");
}
}
private static void log(Object obj) {
System.out.println(obj);
}
@Override
public void postProcessFile(File file) {
}
@Override
public void done() {
errLog.flush();
errLog.close();
}
}