package jetbrains.mps.baseLanguage.unitTest.execution.server; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import java.io.IOException; import java.util.List; import java.util.LinkedList; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.LineNumberReader; import java.io.FileReader; import java.util.ArrayList; import org.junit.runner.Request; import org.apache.log4j.Level; public class CommandLineTestsContributor implements TestsContributor { private static final Logger LOG = LogManager.getLogger(CommandLineTestsContributor.class); private final String[] myArgs; public CommandLineTestsContributor(String[] args) throws IOException { myArgs = inlineFilesContents(args); } private String[] inlineFilesContents(String[] args) throws IOException { List<String> newArgs = new LinkedList<String>(); for (int num = 0; num < args.length; ++num) { String curArg = args[num]; if ("-f".equals(curArg)) { String filename = myArgs[num++]; List<String> fileContents = parseRequestFromFile(filename); newArgs.addAll(fileContents); } else { newArgs.add(curArg); } } return newArgs.toArray(new String[newArgs.size()]); } private List<String> parseRequestFromFile(@NotNull String filename) throws IOException { new File(filename).deleteOnExit(); LineNumberReader reader = new LineNumberReader(new FileReader(filename)); List<String> fileContents = new ArrayList<String>(); while (true) { String line = reader.readLine(); if (line == null) { break; } if (!(line.isEmpty())) { fileContents.add(line); } } return fileContents; } @Override public Iterable<Request> gatherTests() throws IOException { List<Request> requests = new LinkedList<Request>(); int i = 0; while (i < myArgs.length) { if ("-c".equals(myArgs[i])) { i++; Request classRequest = parseRequestFromClass(myArgs[i]); if (classRequest != null) { requests.add(classRequest); } } else if ("-m".equals(myArgs[i])) { i++; Request methodRequest = parseRequestFromMethod(myArgs[i]); if (methodRequest != null) { requests.add(methodRequest); } } i++; } return requests; } private Request parseRequestFromMethod(@NotNull String methodString) { int index = methodString.lastIndexOf('.'); String testClassName = methodString.substring(0, index); String testMethod = methodString.substring(index + 1); Class<?> testClass = getTestClass(testClassName); if (testClass != null) { return Request.method(testClass, testMethod); } return null; } private Request parseRequestFromClass(@NotNull String classString) { Class<?> testClass = getTestClass(classString); if (testClass != null) { return Request.aClass(testClass); } return null; } private Class<?> getTestClass(String className) { Class<?> testClass = null; try { testClass = Class.forName(className); } catch (ClassNotFoundException e) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Test class " + className + " has not been found: it will be skipped", e); } } return testClass; } }