You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2009/09/21 22:30:10 UTC

svn commit: r817404 - in /jakarta/jmeter/trunk/src: core/org/apache/jmeter/resources/messages.properties junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java

Author: sebb
Date: Mon Sep 21 20:30:10 2009
New Revision: 817404

URL: http://svn.apache.org/viewvc?rev=817404&view=rev
Log:
Bugzilla 47803 - Support for JUnit 4.x tests defined by annotations
Fix bug: test element not updated if method/classname not defined

Modified:
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=817404&r1=817403&r2=817404&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Mon Sep 21 20:30:10 2009
@@ -404,6 +404,7 @@
 junit_failure_default_code=0001
 junit_failure_default_msg=Test failed
 junit_failure_msg=Failure Message
+junit_junit4=Search for JUnit 4 annotations (instead of JUnit 3)
 junit_pkg_filter=Package Filter
 junit_request=JUnit Request
 junit_request_defaults=JUnit Request Defaults

Modified: jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java?rev=817404&r1=817403&r2=817404&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java (original)
+++ jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java Mon Sep 21 20:30:10 2009
@@ -21,6 +21,8 @@
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Method;
@@ -46,6 +48,9 @@
 import org.apache.jorphan.reflect.ClassFinder;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 /**
  * The <code>JUnitTestSamplerGui</code> class provides the user interface
@@ -53,7 +58,7 @@
  *
  */
 public class JUnitTestSamplerGui extends AbstractSamplerGui
-implements ChangeListener, ActionListener
+implements ChangeListener, ActionListener, ItemListener
 {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
@@ -123,6 +128,7 @@
     private JCheckBox doSetup = new JCheckBox(JMeterUtils.getResString("junit_do_setup_teardown")); //$NON-NLS-1$
     private JCheckBox appendError = new JCheckBox(JMeterUtils.getResString("junit_append_error")); //$NON-NLS-1$
     private JCheckBox appendExc = new JCheckBox(JMeterUtils.getResString("junit_append_exception")); //$NON-NLS-1$
+    private JCheckBox junit4 = new JCheckBox(JMeterUtils.getResString("junit_junit4")); //$NON-NLS-1$
 
     /** A combo box allowing the user to choose a test class. */
     private JComboBox classnameCombo;
@@ -159,17 +165,24 @@
         add(createClassPanel(), BorderLayout.CENTER);
     }
 
+    @SuppressWarnings("unchecked")
     private void setupClasslist(){
         classnameCombo.removeAllItems();
         methodName.removeAllItems();
         try
         {
-            List<String> CLASSLIST = ClassFinder.findClassesThatExtend(SPATHS,
-                new Class[] { TestCase.class });
+            List<String> classList;
+            if (junit4.isSelected()){
+                classList = ClassFinder.findAnnotatedClasses(SPATHS,
+                    new Class[] {Test.class}, false);
+            } else {
+                classList = ClassFinder.findClassesThatExtend(SPATHS,
+                     new Class[] { TestCase.class });
+            }
             ClassFilter filter = new ClassFilter();
             filter.setPackges(JOrphanUtils.split(filterpkg.getText(),",")); //$NON-NLS-1$
             // change the classname drop down
-            Object[] clist = filter.filterArray(CLASSLIST);
+            Object[] clist = filter.filterArray(classList);
             for (int idx=0; idx < clist.length; idx++) {
                 classnameCombo.addItem(clist[idx]);
             }
@@ -197,6 +210,8 @@
         setupClasslist();
 
         VerticalPanel panel = new VerticalPanel();
+        panel.add(junit4);
+        junit4.addItemListener(this);
         panel.add(filterpkg);
         filterpkg.addChangeListener(this);
 
@@ -224,6 +239,7 @@
         appendError.setSelected(false);
         appendExc.setSelected(false);
         doSetup.setSelected(false);
+        junit4.setSelected(false);
         filterpkg.setText(""); //$NON-NLS-1$
         constructorLabel.setText(""); //$NON-NLS-1$
         successCode.setText(JMeterUtils.getResString("junit_success_default_code")); //$NON-NLS-1$
@@ -257,11 +273,15 @@
         if (classnameCombo.getSelectedItem() != null &&
                 classnameCombo.getSelectedItem() instanceof String) {
             sampler.setClassname((String)classnameCombo.getSelectedItem());
+        } else {
+            sampler.setClassname(null);
         }
         sampler.setConstructorString(constructorLabel.getText());
         if (methodName.getSelectedItem() != null) {
             Object mobj = methodName.getSelectedItem();
             sampler.setMethod((String)mobj);
+        } else {
+            sampler.setMethod(null);
         }
         sampler.setFilterString(filterpkg.getText());
         sampler.setSuccess(successMsg.getText());
@@ -271,6 +291,7 @@
         sampler.setDoNotSetUpTearDown(doSetup.isSelected());
         sampler.setAppendError(appendError.isSelected());
         sampler.setAppendException(appendExc.isSelected());
+        sampler.setJunit4(junit4.isSelected());
     }
 
     /** @{inheritDoc} */
@@ -279,10 +300,11 @@
     {
         super.configure(el);
         JUnitSampler sampler = (JUnitSampler)el;
+        junit4.setSelected(sampler.getJunit4());
+        filterpkg.setText(sampler.getFilterString());
         classnameCombo.setSelectedItem(sampler.getClassname());
         setupMethods();
         methodName.setSelectedItem(sampler.getMethod());
-        filterpkg.setText(sampler.getFilterString());
         constructorLabel.setText(sampler.getConstructorString());
         if (sampler.getSuccessCode().length() > 0) {
             successCode.setText(sampler.getSuccessCode());
@@ -342,12 +364,21 @@
         Method[] meths = clazz.getMethods();
         List<String> list = new ArrayList<String>();
         for (int idx=0; idx < meths.length; idx++){
-            final String method = meths[idx].getName();
-            if (method.startsWith(TESTMETHOD_PREFIX) ||
-                method.equals(ONETIMESETUP) ||
-                method.equals(ONETIMETEARDOWN) ||
-                method.equals(SUITE)) {
-                    list.add(method);
+            final Method method = meths[idx];
+            final String name = method.getName();
+            if (junit4.isSelected()){
+                if (method.isAnnotationPresent(Test.class) ||
+                    method.isAnnotationPresent(BeforeClass.class) ||
+                    method.isAnnotationPresent(AfterClass.class)) {
+                        list.add(name);
+                }
+            } else {
+                if (name.startsWith(TESTMETHOD_PREFIX) ||
+                    name.equals(ONETIMESETUP) ||
+                    name.equals(ONETIMETEARDOWN) ||
+                    name.equals(SUITE)) {
+                        list.add(name);
+                }
             }
         }
         if (list.size() > 0){
@@ -371,6 +402,16 @@
     }
 
     /**
+     * Handle change events: currently handles events for the JUnit4
+     * checkbox, and sets up the relevant class names.
+     */
+    public void itemStateChanged(ItemEvent event) {
+        if (event.getItem() == junit4){
+            setupClasslist();            
+        }
+    }
+
+    /**
      * the current implementation checks to see if the source
      * of the event is the filterpkg field.
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org