From 654eefcc5b1a2c8ba5fd47a83a8be114cef73bf5 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Thu, 28 Jun 2007 21:20:29 +0000
Subject: [PATCH] This improves on the previous commit for grouping and running Windows specific tests. The previous implementation only worked for the default tests and not the precommit or function test definitions.
---
opendj-sdk/opends/src/build-tools/org/opends/build/tools/PrepTestNG.java | 114 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 91 insertions(+), 23 deletions(-)
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/PrepTestNG.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/PrepTestNG.java
index 702acb8..7f5cd1f 100644
--- a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/PrepTestNG.java
+++ b/opendj-sdk/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;
+ }
+
}
--
Gitblit v1.10.0