package stepdef.helper;
import static org.junit.Assert.assertTrue;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
/**
* Contains Static test-utilities.
* @author Hell
*/
public class TestUtils {
public static List<File> subTestDirectories = new ArrayList<File>();
public static final File testOutputDirectory = new File("test_output");
public static void cleanTestOutputFolders() throws IOException {
FileUtils.deleteDirectory(testOutputDirectory);
}
/**
* Compiles a java src-File.
* WARNING: Requires java JDK.
*
* @return error Messages from javac
*/
public static List<String> compileJavaFile(File javaFile) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,
null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager
.getJavaFileObjectsFromStrings(Arrays.asList(javaFile.getPath()));
List<String> options = new ArrayList<String>(2);
// compiles to same folder as src (but to a own package)
options.add("-d");
options.add(javaFile.getParentFile().getPath());
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
compiler.getTask(null, fileManager, diagnostics, options, null,
compilationUnits).call();
List<String> messages = new ArrayList<String>();
for (Diagnostic<?> diagnostic : diagnostics.getDiagnostics()) {
messages.add(diagnostic.getKind() + ":\t Line ["
+ diagnostic.getLineNumber() + "] \t Position ["
+ diagnostic.getPosition() + "]\t"
+ diagnostic.getMessage(Locale.ROOT) + "\n");
}
try {
fileManager.close();
} catch (IOException e) {
messages.add(e.getMessage());
}
return messages;
}
/**
* @return A new subtest directory.
*/
public static synchronized File getNewSubTestDirectory() {
int nextIndex = subTestDirectories.size() + 1;
File newSubTestDirectory = new File(testOutputDirectory, "subtest_"
+ nextIndex);
boolean created = newSubTestDirectory.mkdirs();
assertTrue(
"Could not create Directory for SubTest: "
+ newSubTestDirectory.getPath(), created);
subTestDirectories.add(newSubTestDirectory);
return newSubTestDirectory;
}
}