Author: sebb
Date: Wed Sep 19 15:43:19 2007
New Revision: 577462
URL: http://svn.apache.org/viewvc?rev=577462&view=rev
Log:
Bug 43364 - add option to enable previous If Controller behaviour
(copied from rel-2.2)
Modified:
jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv
jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx
jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv (original)
+++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv Wed Sep 19 15:43:19
2007
@@ -9,3 +9,11 @@
Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,
Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null,
Module,200,OK,Thread Group 1-1,,true,,0,1,1,null,
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,
+Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null,
+Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null,
+Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null,
+Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null,
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx (original)
+++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx Wed Sep 19 15:43:19
2007
@@ -87,6 +87,7 @@
<hashTree>
<IfController guiclass="IfControllerPanel" testclass="IfController"
testname="If Controller" enabled="true">
<stringProp
name="IfController.condition">${__StringFromFile(testfiles/BatchTestLocal.txt)}
> 2</stringProp>
+ <stringProp name="IfController.evaluateAll">false</stringProp>
</IfController>
<hashTree>
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="If Test" enabled="true">
@@ -303,6 +304,264 @@
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
+ <LoopController guiclass="LoopControlPanel" testclass="LoopController"
testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">true</boolProp>
+ <stringProp name="LoopController.loops">2</stringProp>
+ </LoopController>
+ <hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController"
testname="If once" enabled="true">
+ <stringProp
name="IfController.condition">${JMeterThread.last_sample_ok}</stringProp>
+ <stringProp name="IfController.evaluateAll">false</stringProp>
+ </IfController>
+ <hashTree>
+ <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="Java If once 1" enabled="true">
+ <elementProp name="arguments" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="Sleep_Time" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Time</stringProp>
+ <stringProp name="Argument.value">100</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Sleep_Mask" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Mask</stringProp>
+ <stringProp name="Argument.value">0xFF</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Label" elementType="Argument">
+ <stringProp name="Argument.name">Label</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseCode" elementType="Argument">
+ <stringProp name="Argument.name">ResponseCode</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseMessage" elementType="Argument">
+ <stringProp
name="Argument.name">ResponseMessage</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Status" elementType="Argument">
+ <stringProp name="Argument.name">Status</stringProp>
+ <stringProp name="Argument.value">BAD</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="SamplerData" elementType="Argument">
+ <stringProp name="Argument.name">SamplerData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResultData" elementType="Argument">
+ <stringProp name="Argument.name">ResultData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp
name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+ </JavaSampler>
+ <hashTree/>
+ <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="Java If once 2" enabled="true">
+ <elementProp name="arguments" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="Sleep_Time" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Time</stringProp>
+ <stringProp name="Argument.value">100</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Sleep_Mask" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Mask</stringProp>
+ <stringProp name="Argument.value">0xFF</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Label" elementType="Argument">
+ <stringProp name="Argument.name">Label</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseCode" elementType="Argument">
+ <stringProp name="Argument.name">ResponseCode</stringProp>
+ <stringProp name="Argument.value">200</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseMessage" elementType="Argument">
+ <stringProp
name="Argument.name">ResponseMessage</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Status" elementType="Argument">
+ <stringProp name="Argument.name">Status</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="SamplerData" elementType="Argument">
+ <stringProp name="Argument.name">SamplerData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResultData" elementType="Argument">
+ <stringProp name="Argument.name">ResultData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp
name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+ </JavaSampler>
+ <hashTree/>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController"
testname="If all" enabled="true">
+ <stringProp
name="IfController.condition">${JMeterThread.last_sample_ok}</stringProp>
+ <stringProp name="IfController.evaluateAll">true</stringProp>
+ </IfController>
+ <hashTree>
+ <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="Java If all 1" enabled="true">
+ <elementProp name="arguments" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="Sleep_Time" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Time</stringProp>
+ <stringProp name="Argument.value">100</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Sleep_Mask" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Mask</stringProp>
+ <stringProp name="Argument.value">0xFF</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Label" elementType="Argument">
+ <stringProp name="Argument.name">Label</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseCode" elementType="Argument">
+ <stringProp name="Argument.name">ResponseCode</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseMessage" elementType="Argument">
+ <stringProp
name="Argument.name">ResponseMessage</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Status" elementType="Argument">
+ <stringProp name="Argument.name">Status</stringProp>
+ <stringProp name="Argument.value">BAD</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="SamplerData" elementType="Argument">
+ <stringProp name="Argument.name">SamplerData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResultData" elementType="Argument">
+ <stringProp name="Argument.name">ResultData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp
name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+ </JavaSampler>
+ <hashTree/>
+ <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="Java If all 2" enabled="true">
+ <elementProp name="arguments" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="Sleep_Time" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Time</stringProp>
+ <stringProp name="Argument.value">100</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Sleep_Mask" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Mask</stringProp>
+ <stringProp name="Argument.value">0xFF</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Label" elementType="Argument">
+ <stringProp name="Argument.name">Label</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseCode" elementType="Argument">
+ <stringProp name="Argument.name">ResponseCode</stringProp>
+ <stringProp name="Argument.value">200</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseMessage" elementType="Argument">
+ <stringProp
name="Argument.name">ResponseMessage</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Status" elementType="Argument">
+ <stringProp name="Argument.name">Status</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="SamplerData" elementType="Argument">
+ <stringProp name="Argument.name">SamplerData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResultData" elementType="Argument">
+ <stringProp name="Argument.name">ResultData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp
name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+ </JavaSampler>
+ <hashTree/>
+ </hashTree>
+ <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler"
testname="Java OK" enabled="true">
+ <elementProp name="arguments" elementType="Arguments"
guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="Sleep_Time" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Time</stringProp>
+ <stringProp name="Argument.value">100</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Sleep_Mask" elementType="Argument">
+ <stringProp name="Argument.name">Sleep_Mask</stringProp>
+ <stringProp name="Argument.value">0xFF</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Label" elementType="Argument">
+ <stringProp name="Argument.name">Label</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseCode" elementType="Argument">
+ <stringProp name="Argument.name">ResponseCode</stringProp>
+ <stringProp name="Argument.value">200</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResponseMessage" elementType="Argument">
+ <stringProp name="Argument.name">ResponseMessage</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="Status" elementType="Argument">
+ <stringProp name="Argument.name">Status</stringProp>
+ <stringProp name="Argument.value">OK</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="SamplerData" elementType="Argument">
+ <stringProp name="Argument.name">SamplerData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="ResultData" elementType="Argument">
+ <stringProp name="Argument.name">ResultData</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp
name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+ </JavaSampler>
+ <hashTree/>
+ </hashTree>
<GenericController guiclass="LogicControllerGui"
testclass="GenericController" testname="Simple Controller" enabled="false">
<stringProp name="TestPlan.comments"> for Module
Controller</stringProp>
</GenericController>
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml (original)
+++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml Wed Sep 19 15:43:19
2007
@@ -73,5 +73,61 @@
<responseFile class="java.lang.String"></responseFile>
<null/>
</sample>
+<sample lt="0" s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group
1-1" dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group
1-1" dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
+<sample lt="0" s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1"
dt="" by="0" ng="1" na="1">
+ <responseHeader class="java.lang.String"></responseHeader>
+ <requestHeader class="java.lang.String"></requestHeader>
+ <responseData class="java.lang.String"/>
+ <responseFile class="java.lang.String"></responseFile>
+ <null/>
+</sample>
</testResults>
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java
Wed Sep 19 15:43:19 2007
@@ -53,6 +53,8 @@
private final static String CONDITION = "IfController.condition";
//$NON-NLS-1$
+ private final static String EVALUATE_ALL = "IfController.evaluateAll";
//$NON-NLS-1$
+
/**
* constructor
*/
@@ -105,7 +107,7 @@
} else if (resultStr.equals("true")) { //$NON-NLS-1$
result = true;
} else {
- throw new Exception(" BAD CONDITION :: " +
cond);
+ throw new Exception(" BAD CONDITION :: " + cond
+ " :: expected true or false");
}
logger.debug(" >> evaluate Condition - [ " + cond +
"] results is [" + result + "]");
@@ -145,7 +147,7 @@
// For subsequent calls, we are inside the IfControllerGroup,
// so then we just pass the control to the next item inside the if
control
boolean result = true;
- if(isFirst()) {
+ if(isEvaluateAll() || isFirst()) {
result = evaluateCondition(getCondition());
}
@@ -157,5 +159,13 @@
} catch (NextIsNullException e1) {
return null;
}
+ }
+
+ public boolean isEvaluateAll() {
+ return getPropertyAsBoolean(EVALUATE_ALL,false);
+ }
+
+ public void setEvaluateAll(boolean b) {
+ setProperty(EVALUATE_ALL,b);
}
}
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
Wed Sep 19 15:43:19 2007
@@ -23,6 +23,7 @@
import java.awt.event.ActionListener;
import javax.swing.Box;
+import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
@@ -41,13 +42,13 @@
public class IfControllerPanel extends AbstractControllerGui implements
ActionListener {
- private static final String CONDITION_LABEL = "if_controller_label"; //
$NON-NLS-1$
-
/**
* A field allowing the user to specify the number of times the
controller
* should loop.
*/
private JTextField theCondition;
+
+ private JCheckBox evaluateAll;
/**
* Boolean indicating whether or not this component should display its
name.
@@ -56,9 +57,6 @@
*/
private boolean displayName = true;
- /** The name of the loops field component. */
- private static final String CONDITION = "JS_Condition"; // $NON-NLS-1$
-
/**
* Create a new LoopControlPanel as a standalone component.
*/
@@ -93,7 +91,9 @@
public void configure(TestElement element) {
super.configure(element);
if (element instanceof IfController) {
- theCondition.setText(((IfController)
element).getCondition());
+ IfController ifController = (IfController) element;
+ theCondition.setText(ifController.getCondition());
+ evaluateAll.setSelected(ifController.isEvaluateAll());
}
}
@@ -113,11 +113,9 @@
public void modifyTestElement(TestElement controller) {
configureTestElement(controller);
if (controller instanceof IfController) {
- if (theCondition.getText().length() > 0) {
- ((IfController)
controller).setCondition(theCondition.getText());
- } else {
- ((IfController) controller).setCondition("");
// $NON-NLS-1$
- }
+ IfController ifController = (IfController) controller;
+ ifController.setCondition(theCondition.getText());
+ ifController.setEvaluateAll(evaluateAll.isSelected());
}
}
@@ -127,6 +125,7 @@
public void clearGui() {
super.clearGui();
theCondition.setText(""); // $NON-NLS-1$
+ evaluateAll.setSelected(false);
}
/**
@@ -174,12 +173,11 @@
JPanel conditionPanel = new JPanel(new BorderLayout(5, 0));
// Condition LABEL
- JLabel conditionLabel = new
JLabel(JMeterUtils.getResString(CONDITION_LABEL));
+ JLabel conditionLabel = new
JLabel(JMeterUtils.getResString("if_controller_label")); // $NON-NLS-1$
conditionPanel.add(conditionLabel, BorderLayout.WEST);
// TEXT FIELD
theCondition = new JTextField(""); // $NON-NLS-1$
- theCondition.setName(CONDITION);
conditionLabel.setLabelFor(theCondition);
conditionPanel.add(theCondition, BorderLayout.CENTER);
theCondition.addActionListener(this);
@@ -187,6 +185,9 @@
conditionPanel.add(Box.createHorizontalStrut(conditionLabel.getPreferredSize().width
+ theCondition.getPreferredSize().width),
BorderLayout.NORTH);
+ // Evaluate All checkbox
+ evaluateAll = new
JCheckBox(JMeterUtils.getResString("if_controller_evaluate_all")); //
$NON-NLS-1$
+ conditionPanel.add(evaluateAll,BorderLayout.SOUTH);
return conditionPanel;
}
}
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=577462&r1=577461&r2=577462&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
Wed Sep 19 15:43:19 2007
@@ -262,6 +262,7 @@
httpmirror_title=HTTP Mirror Server
id_prefix=ID Prefix
id_suffix=ID Suffix
+if_controller_evaluate_all=Evaluate for all children?
if_controller_label=Condition
if_controller_title=If Controller
ignore_subcontrollers=Ignore sub-controller blocks
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 19 15:43:19 2007
@@ -55,6 +55,7 @@
<li>Bug 43332 - 2.3RC4 does not clear Guis based on TestBean</li>
<li>Bug 42948 - Problems with Proxy gui table fields in Java 1.6</li>
<li>Fixup broken jmeter-server script</li>
+<li>Bug 43364 - option to revert If Controller to pre 2.3RC3 behaviour</li>
</ul>
<h4>Improvements</h4>
@@ -402,7 +403,7 @@
<li>Function methods setParameters() need to be synchronized</li>
<li>Fix CLI long optional argument to require "=" (as for short options)</li>
<li>Fix SlowSocket to work properly with Httpclient (both http and https)</li>
-<li>Bug 41612 - Loop nested in IF behaves erratically</li>
+<li>Bug 41612 - Loop nested in If Controller behaves erratically</li>
<li>Bug 42232 - changing language clears UDV contents</li>
<li>Jexl function did not allow variables</li>
</ul>
Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=577462&r1=577461&r2=577462&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Sep 19
15:43:19 2007
@@ -1344,16 +1344,26 @@
<component name="If Controller" index="§-num;.2.9" width="358"
height="131" screenshot="ifcontroller.png">
<description>
<p>The If Controller allows the user to control whether the
test elements below it (its children) are run or not.</p>
+ <p>
+ Prior to JMeter 2.3RC3, the condition was evaluated for every
runnable element contained in the controller.
+ This sometimes caused unexpected behaviour, so 2.3RC3 was
changed to evaluate the condition only once on initial entry.
+ However, the original behaviour is also useful, so versions of
JMeter after 2.3RC4 have an additional
+ option to select the original behaviour.
+ </p>
</description>
<properties>
<property name="Name" required="No">Descriptive name for this controller
that is shown in the tree.</property>
<property name="Condition" required="Yes"><b>Javascript</b> code that
returns "true" or "false"</property>
+ <property name="Evaluate for all children" required="Yes">
+ Should condition be evaluated for all children?
+ If not checked, then the condition is only evaluated on entry.
+ </property>
</properties>
<p>Examples:
<ul>
<li>${COUNT} < 10</li>
<li>"${VAR}" == "abcd"</li>
- <li>"${JMeterThread.last_sample_ok}" == "true" (check
if last sample succeeded)</li>
+ <li>${JMeterThread.last_sample_ok} (check if last
sample succeeded)</li>
</ul>
If there is an error interpreting the code, the condition is
assumed to be false, and a message is logged in jmeter.log.
</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]