From 1dc8138328c6cdca83032b13b092896cf31c91d6 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Tue, 26 Sep 2006 16:15:31 +0000
Subject: [PATCH] Added the feature to only run specific tests by the group, package, class, and method levels. Please refer to the unit test documentation on the OpenDS website for more information.

---
 opendj-sdk/opends/build-tools/src/org/opends/build/tools/PrepTestNG.java |  169 +++++++++++++++++++++++++++++++++++++++--
 opendj-sdk/opends/build.xml                                              |   33 +++++++-
 opendj-sdk/opends/ext/build-tools.jar                                    |    0 
 opendj-sdk/opends/ext/testng/testng.xml                                  |   21 -----
 4 files changed, 187 insertions(+), 36 deletions(-)

diff --git a/opendj-sdk/opends/build-tools/src/org/opends/build/tools/PrepTestNG.java b/opendj-sdk/opends/build-tools/src/org/opends/build/tools/PrepTestNG.java
index 6b33ada..66fb636 100644
--- a/opendj-sdk/opends/build-tools/src/org/opends/build/tools/PrepTestNG.java
+++ b/opendj-sdk/opends/build-tools/src/org/opends/build/tools/PrepTestNG.java
@@ -24,6 +24,32 @@
  *
  *      Portions Copyright 2006 Sun Microsystems, Inc.
  */
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Portions Copyright 2006 Sun Microsystems, Inc.
+ */
 
 package org.opends.build.tools;
 
@@ -40,6 +66,9 @@
   private String file;
   private String toFile;
   private String groupList;
+  private String packageList;
+  private String classList;
+  private String methodList;
 
   public void setFile(String file)
   {
@@ -56,6 +85,21 @@
     this.groupList = groupList;
   }
 
+  public void setPackageList(String packageList)
+  {
+    this.packageList = packageList;
+  }
+
+  public void setClassList(String classList)
+  {
+    this.classList = classList;
+  }
+
+  public void setMethodList(String methodList)
+  {
+    this.methodList = methodList;
+  }
+
   public void execute() throws BuildException
   {
     if(file == null)
@@ -75,8 +119,18 @@
     PrintStream writer;
     String line;
     String[] groups;
+    String[] packages;
+    String[] classes;
+    String[] methods;
     String[] groupLine;
-    int replaced = 0;
+    String[] methodLine;
+    String methodClass;
+    String methodName;
+    int methodNameStartIdx;
+    int groupCount = 0;
+    int packageCount = 0;
+    int classCount = 0;
+    int methodCount = 0;
 
     try
     {
@@ -87,7 +141,8 @@
 
       line = reader.readLine();
 
-      if(groupList != null && groupList.trim() != "")
+      if(groupList != null && !groupList.trim().equals("") &&
+          !groupList.startsWith("${"))
       {
         groups = groupList.split(",");
       }
@@ -96,25 +151,115 @@
         groups = new String[0];
       }
 
+      if(packageList != null && !packageList.trim().equals("") &&
+          !packageList.startsWith("${"))
+      {
+        packages = packageList.split(",");
+      }
+      else
+      {
+        packages = new String[0];
+      }
+
+      if(classList != null && !classList.trim().equals("") &&
+          !classList.startsWith("${"))
+      {
+        classes = classList.split(",");
+      }
+      else
+      {
+        classes = new String[0];
+      }
+
+      if(methodList != null && !methodList.trim().equals("") &&
+          !methodList.startsWith("${"))
+      {
+        methods = methodList.split(";");
+      }
+      else
+      {
+        methods = new String[0];
+      }
+
       while(line != null)
       {
-        if(line.indexOf("<!-- THIS WILL BE REPLACED WITH GROUP INFO BY " +
-            "ANT -->") >= 0)
+        if(line.indexOf("<!-- DO NOT REMOVE! - THIS LINE WILL BE " +
+            "REPLACED WITH TAGS GENERATED BY ANT -->") >= 0)
         {
-          if(groups.length > 0 && groupList.trim() != "")
+          if(groups.length > 0 && groupList.trim().equals(""))
           {
-            writer.println("<groups>\n<run>");
+            writer.println("<groups>\n  <run>");
             for(String group : groups)
             {
               groupLine = group.split("=");
               if(groupLine.length == 2)
               {
-                writer.println("<"+groupLine[0]+" " +
-                               "name=\""+groupLine[1] + "\" />\n");
-                replaced++;
+                writer.println("    <"+groupLine[0].trim()+" " +
+                               "name=\""+groupLine[1].trim() + "\" />");
+                groupCount++;
               }
             }
-            writer.println("</run>\n</groups>");
+            writer.println("  </run>\n</groups>");
+          }
+
+          if(packages.length > 0)
+          {
+            writer.println("<packages>");
+            for(String pkg : packages)
+            {
+              writer.println("  <package name=\"" + pkg.trim() + "\" />");
+
+              packageCount++;
+            }
+            writer.println("</packages>");
+          }
+
+          if(classes.length > 0 || methods.length > 0)
+          {
+            writer.println("<classes>");
+
+            if(classes.length > 0)
+            {
+              for(String cls : classes)
+              {
+                writer.println("  <class name=\"" + cls.trim() + "\" />");
+
+                classCount++;
+              }
+            }
+
+            if(methods.length > 0)
+            {
+              for(String mhd : methods)
+              {
+                methodLine = mhd.split(",");
+                if(methodLine.length > 0)
+                {
+                  methodNameStartIdx = methodLine[0].lastIndexOf(".");
+                  methodClass = methodLine[0].substring(0,
+                                  methodNameStartIdx);
+                  methodName = methodLine[0].substring(methodNameStartIdx + 1,
+                                methodLine[0].length());
+                  writer.println("  <class name=\"" +
+                      methodClass.trim() + "\" >");
+                  writer.println("  <methods>");
+                  writer.println("    <include name=\"" +
+                      methodName.trim() + "\" />");
+                  methodCount++;
+                  classCount++;
+                  for(int i = 1; i < methodLine.length; i ++)
+                  {
+                    writer.println("    <include name=\"" +
+                      methodLine[i].trim() + "\" />");
+                    methodCount++;
+                  }
+                  writer.println("  </methods>");
+                  writer.println("</class>");
+                }
+              }
+            }
+
+            writer.println("</classes>");
           }
         }
         else
@@ -125,7 +270,9 @@
         line = reader.readLine();
       }
 
-      System.out.println("Adding " + replaced + " group tags to " + toFile);
+      System.out.println("Adding " + groupCount + " group tags, " +
+          packageCount + " package tags, " + classCount + " class tags, " +
+          methodCount + " method tags to " + toFile);
     }
     catch(Exception e)
     {
diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 32c3d61..c3d9cf8 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -104,8 +104,6 @@
   <property name="dynconstants.stubfile"
         location="${resource.dir}/DynamicConstants.java.stubs" />
 
-
-
   <property file="PRODUCT"                                                />
 
 
@@ -597,7 +595,11 @@
 
     <preptestng file="${testng.dir}/testng.xml"
                 tofile="${unittest.resource.dir}/testng.xml"
-                grouplist="${test.groups}" />
+                grouplist="${test.groups}" 
+		packagelist="${test.packages}"
+                classList="${test.classes}" 
+		methodList="${test.methods}" />
+
 
 
   </target>
@@ -609,10 +611,15 @@
     <property name="TESTASSERT" value="true"/>
   </target>
 
+  <!-- Execute Directory Server TestNG unit tests specified from CLI -->
+  <target name="testcustom"
+	  depends="testinit,runtests"
+          description="Execute the Directory Server TestNG unit tests specified from CLI.">
+  </target>
 
   <!-- Execute all of the Directory Server TestNG unit tests in text mode. -->
   <target name="testall"
-          depends="enableTestNGAssertions,testinit,runtests"
+          depends="enableTestNGAssertions,prepdefaultalltest,testinit,runtests"
           description="Run all of the TestNG tests.">
   </target>
 
@@ -635,6 +642,12 @@
           description="Execute the Directory Server TestNG unit tests in text mode with a coverage report.">
   </target>
 
+  <!-- Execute the Directory Server TestNG unit tests specified from CLI in text mode with a coverage report. -->
+  <target name="testcustomwithcoverage"
+	  depends="coverage,testcustom"
+          description="Execute the Directory Server TestNG unit tests specified from CLI in text mode with a coverage report.">
+  </target>
+
   <!-- Internal target to execute the Directory Server TestNG unit tests in text mode after everything has been initialized. -->
   <target name="runtests">
     <mkdir dir="${unittest.report.dir}" />
@@ -692,9 +705,19 @@
 
   </target>
 
-  <!-- Internal target used to set the group list property for the preptestng task -->
+  <!-- Internal target used to set the properties for the preptestng task -->
   <target name="prepdefaulttest">
     <property name="test.groups" value="exclude=slow" />
+    <property name="test.packages" value="org.opends.server.*" />
+    <property name="test.classes" value="" />
+    <property name="test.methods" value="" />
+  </target>
+
+  <target name="prepdefaultalltest">
+    <property name="test.groups" value="" />
+    <property name="test.packages" value="org.opends.server.*" />
+    <property name="test.classes" value="" />
+    <property name="test.methods" value="" />
   </target>
 
   <target name="testreport"
diff --git a/opendj-sdk/opends/ext/build-tools.jar b/opendj-sdk/opends/ext/build-tools.jar
index 31f2da3..ad47bad 100644
--- a/opendj-sdk/opends/ext/build-tools.jar
+++ b/opendj-sdk/opends/ext/build-tools.jar
Binary files differ
diff --git a/opendj-sdk/opends/ext/testng/testng.xml b/opendj-sdk/opends/ext/testng/testng.xml
index 79462c1..2f59930 100644
--- a/opendj-sdk/opends/ext/testng/testng.xml
+++ b/opendj-sdk/opends/ext/testng/testng.xml
@@ -1,26 +1,7 @@
 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 <suite name="OpenDS"   verbose="1" >
     <test name="default">
-        <!-- THIS WILL BE REPLACED WITH GROUP INFO BY ANT -->
-        <packages>
-            <package name="org.opends.server.protocols.asn1"/>
-            <package name="org.opends.server.protocols.internal"/>
-            <package name="org.opends.server.protocols.ldap"/>
-            <package name="org.opends.server.core"/>
-            <package name="org.opends.server.backends.jeb"/>
-            <package name="org.opends.server.synchronization"/>
-            <package name="org.opends.server.protocols.jmx"/>
-            <package name="org.opends.server.util"/>
-            <package name="org.opends.server.schema"/>
-            <package name="org.opends.server.monitors"/>
-            <package name="org.opends.server.extensions"/>
-            <package name="org.opends.server.tasks"/>
-            <package name="org.opends.server.plugins"/>
-            <package name="org.opends.server.types"/>
-            <package name="org.opends.server.changelog"/>
-            <package name="org.opends.server.api"/>
-            <package name="org.opends.server.controls"/>
-        </packages>
+    <!-- DO NOT REMOVE! - THIS LINE WILL BE REPLACED WITH TAGS GENERATED BY ANT -->
     </test>
 
     <test name="precommit">

--
Gitblit v1.10.0