mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

kenneth_suter
28.20.2007 bf940a2b684b0efd2e0966e644e798e1ee8528fd
opends/src/build-tools/org/opends/build/tools/PrepTestNG.java
@@ -31,12 +31,25 @@
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;
@@ -156,57 +169,87 @@
      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(",");
@@ -222,31 +265,39 @@
                                  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();
@@ -266,4 +317,21 @@
    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;
  }
}