| | |
| | | import java.io.PrintStream; |
| | | import java.io.BufferedReader; |
| | | import java.io.FileReader; |
| | | import java.util.Arrays; |
| | | |
| | | import org.apache.tools.ant.Task; |
| | | import org.apache.tools.ant.BuildException; |
| | | |
| | | public class PrepTestNG extends Task |
| | | { |
| | | |
| | | /** Template for inserting children elements of default test tag */ |
| | | static private final String DEFAULT_TAGS_TEMPLATE = |
| | | "<!-- DO NOT REMOVE! - GENERATED DEFAULT TAGS (see PrepTestNG class) -->"; |
| | | |
| | | /** Template for inserting global children elements of run tags */ |
| | | static private final String GLOBAL_RUN_TAGS_TEMPLATE = |
| | | "<!-- DO NOT REMOVE! - GENERATED GLOBAL RUN TAGS (see PrepTestNG class) -->"; |
| | | |
| | | /** Indentation used in testng.xml */ |
| | | static private final int INDENT = 4; |
| | | |
| | | private String file; |
| | | private String toFile; |
| | | private String groupList; |
| | |
| | | |
| | | while(line != null) |
| | | { |
| | | if(line.indexOf("<!-- DO NOT REMOVE! - THIS LINE WILL BE " + |
| | | "REPLACED WITH TAGS GENERATED BY ANT -->") >= 0) |
| | | if(line.indexOf(DEFAULT_TAGS_TEMPLATE) >= 0) |
| | | { |
| | | int level = 2; |
| | | if(groups.length > 0) |
| | | { |
| | | writer.println("<groups>\n <run>"); |
| | | boolean windowsClause = false; |
| | | println(writer, level, "<groups>"); |
| | | println(writer, ++level, "<run>"); |
| | | level++; |
| | | for(String group : groups) |
| | | { |
| | | groupLine = group.split("="); |
| | | if(groupLine.length == 2) |
| | | { |
| | | writer.println(" <"+groupLine[0].trim()+" " + |
| | | "name=\""+groupLine[1].trim() + "\" />"); |
| | | groupCount++; |
| | | String inc_exc = groupLine[0].trim(); |
| | | if (inc_exc == null || |
| | | !("include".equals(inc_exc.toLowerCase()) || |
| | | "exclude".equals(inc_exc.toLowerCase()))) { |
| | | System.out.println("Error: illegal group clause " + group); |
| | | } else { |
| | | String gr = groupLine[1].trim(); |
| | | println(writer, level, "<" +inc_exc +" "+ |
| | | "name=\""+gr+ "\" />"); |
| | | windowsClause |= "windows".equals(gr); |
| | | groupCount++; |
| | | } |
| | | } |
| | | } |
| | | writer.println(" </run>\n</groups>"); |
| | | |
| | | // Exclude windows specific tests if the user has not provided |
| | | // an explicit windows clause and we're not on windows. |
| | | if (!windowsClause && !isWindows()) { |
| | | println(writer, level, "<exclude name=\"windows\"/>"); |
| | | groupCount++; |
| | | } |
| | | |
| | | println(writer, --level, "</run>"); |
| | | println(writer, --level, "</groups>"); |
| | | } else { |
| | | |
| | | // No explicit groups have been specified so see if we need |
| | | // to exclude the windows tests. |
| | | if (!isWindows()) { |
| | | writer.println(" <groups><run><exclude name=\"windows\"/></run></groups>"); |
| | | println(writer, level, "<groups>"); |
| | | println(writer, ++level, "<run>"); |
| | | println(writer, ++level, "<exclude name=\"windows\"/>"); |
| | | println(writer, --level, "</run>"); |
| | | println(writer, --level, "</groups>"); |
| | | groupCount++; |
| | | } |
| | | } |
| | | |
| | | if(packages.length > 0) |
| | | { |
| | | writer.println("<packages>"); |
| | | println(writer, level, "<packages>"); |
| | | level++; |
| | | for(String pkg : packages) |
| | | { |
| | | writer.println(" <package name=\"" + pkg.trim() + "\" />"); |
| | | |
| | | println(writer, level, "<package name=\"" + pkg.trim() + "\" />"); |
| | | packageCount++; |
| | | } |
| | | writer.println("</packages>"); |
| | | println(writer, --level, "</packages>"); |
| | | } |
| | | |
| | | if(classes.length > 0 || methods.length > 0) |
| | | { |
| | | writer.println("<classes>"); |
| | | println(writer, level, "<classes>"); |
| | | |
| | | if(classes.length > 0) |
| | | { |
| | | level++; |
| | | for(String cls : classes) |
| | | { |
| | | writer.println(" <class name=\"" + cls.trim() + "\" />"); |
| | | |
| | | println(writer, level, "<class name=\"" + cls.trim() + "\" />"); |
| | | classCount++; |
| | | } |
| | | } |
| | | |
| | | if(methods.length > 0) |
| | | { |
| | | level++; |
| | | for(String mhd : methods) |
| | | { |
| | | methodLine = mhd.split(","); |
| | |
| | | methodNameStartIdx); |
| | | methodName = methodLine[0].substring(methodNameStartIdx + 1, |
| | | methodLine[0].length()); |
| | | writer.println(" <class name=\"" + |
| | | println(writer, level, "<class name=\"" + |
| | | methodClass.trim() + "\" >"); |
| | | writer.println(" <methods>"); |
| | | writer.println(" <include name=\"" + |
| | | println(writer, ++level, "<methods>"); |
| | | println(writer, ++level, "<include name=\"" + |
| | | methodName.trim() + "\" />"); |
| | | methodCount++; |
| | | classCount++; |
| | | for(int i = 1; i < methodLine.length; i ++) |
| | | { |
| | | writer.println(" <include name=\"" + |
| | | println(writer, level, "<include name=\"" + |
| | | methodLine[i].trim() + "\" />"); |
| | | methodCount++; |
| | | } |
| | | writer.println(" </methods>"); |
| | | writer.println("</class>"); |
| | | println(writer, --level, "</methods>"); |
| | | println(writer, --level, "</class>"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | writer.println("</classes>"); |
| | | println(writer, --level, "</classes>"); |
| | | } |
| | | } |
| | | else if (line.indexOf(GLOBAL_RUN_TAGS_TEMPLATE) != -1) |
| | | { |
| | | if (!isWindows()) { |
| | | int index = line.indexOf(GLOBAL_RUN_TAGS_TEMPLATE); |
| | | println(writer, levelForIndex(index), |
| | | "<exclude name=\"windows\"/>"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | writer.println(line); |
| | | println(writer, 0, line); |
| | | } |
| | | |
| | | line = reader.readLine(); |
| | |
| | | String os = System.getProperty("os.name"); |
| | | return (os != null && os.toLowerCase().indexOf("windows") != -1); |
| | | } |
| | | |
| | | static private String indent(int indent) { |
| | | char[] blankArray = new char[indent]; |
| | | Arrays.fill(blankArray, ' '); |
| | | return new String(blankArray); |
| | | } |
| | | |
| | | static private void println(PrintStream writer, int level, String txt) { |
| | | writer.print(indent(INDENT * level)); |
| | | writer.print(txt); |
| | | writer.print(System.getProperty("line.separator")); |
| | | } |
| | | |
| | | static private int levelForIndex(int index) { |
| | | return index / INDENT; |
| | | } |
| | | |
| | | } |