Author: sebb
Date: Wed Sep 19 15:10:28 2007
New Revision: 577455

URL: http://svn.apache.org/viewvc?rev=577455&view=rev
Log:
Bug 43364 - add option to enable previous If Controller behaviour

Modified:
    jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv
    jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.jmx
    jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml
    jakarta/jmeter/branches/rel-2-2/docs/api/index-all.html
    
jakarta/jmeter/branches/rel-2-2/docs/api/org/apache/jmeter/control/IfController.html
    jakarta/jmeter/branches/rel-2-2/docs/api/serialized-form.html
    jakarta/jmeter/branches/rel-2-2/docs/changes.html
    jakarta/jmeter/branches/rel-2-2/docs/usermanual/component_reference.html
    
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/IfController.java
    
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
    
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
    jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv (original)
+++ jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.csv Wed Sep 19 
15:10:28 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/branches/rel-2-2/bin/testfiles/BatchTestLocal.jmx
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.jmx?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.jmx (original)
+++ jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.jmx Wed Sep 19 
15:10:28 2007
@@ -87,6 +87,7 @@
         <hashTree>
           <IfController guiclass="IfControllerPanel" testclass="IfController" 
testname="If Controller" enabled="true">
             <stringProp 
name="IfController.condition">${__StringFromFile(testfiles/BatchTestLocal.txt)} 
&gt; 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/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/bin/testfiles/BatchTestLocal.xml Wed Sep 19 
15:10:28 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/branches/rel-2-2/docs/api/index-all.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/api/index-all.html?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/docs/api/index-all.html (original)
+++ jakarta/jmeter/branches/rel-2-2/docs/api/index-all.html Wed Sep 19 15:10:28 
2007
@@ -11051,6 +11051,9 @@
 <DT><A 
HREF="org/apache/jmeter/assertions/HTMLAssertion.html#isErrorsOnly()"><B>isErrorsOnly()</B></A>
 - 
 Method in class org.apache.jmeter.assertions.<A 
HREF="org/apache/jmeter/assertions/HTMLAssertion.html" title="class in 
org.apache.jmeter.assertions">HTMLAssertion</A>
 <DD>Check if errors will be reported only
+<DT><A 
HREF="org/apache/jmeter/control/IfController.html#isEvaluateAll()"><B>isEvaluateAll()</B></A>
 - 
+Method in class org.apache.jmeter.control.<A 
HREF="org/apache/jmeter/control/IfController.html" title="class in 
org.apache.jmeter.control">IfController</A>
+<DD>&nbsp;
 <DT><A 
HREF="org/apache/jmeter/util/JMeterUtils.html#isExpertMode()"><B>isExpertMode()</B></A>
 - 
 Static method in class org.apache.jmeter.util.<A 
HREF="org/apache/jmeter/util/JMeterUtils.html" title="class in 
org.apache.jmeter.util">JMeterUtils</A>
 <DD>Determine whether we are in 'expert' mode. 
@@ -16752,6 +16755,9 @@
 <DT><A 
HREF="org/apache/jmeter/assertions/HTMLAssertion.html#setErrorsOnly(boolean)"><B>setErrorsOnly(boolean)</B></A>
 - 
 Method in class org.apache.jmeter.assertions.<A 
HREF="org/apache/jmeter/assertions/HTMLAssertion.html" title="class in 
org.apache.jmeter.assertions">HTMLAssertion</A>
 <DD>Sets if errors shoud be tracked only
+<DT><A 
HREF="org/apache/jmeter/control/IfController.html#setEvaluateAll(boolean)"><B>setEvaluateAll(boolean)</B></A>
 - 
+Method in class org.apache.jmeter.control.<A 
HREF="org/apache/jmeter/control/IfController.html" title="class in 
org.apache.jmeter.control">IfController</A>
+<DD>&nbsp;
 <DT><A 
HREF="org/apache/jmeter/protocol/http/proxy/ProxyControl.html#setExcludeList(java.util.Collection)"><B>setExcludeList(Collection)</B></A>
 - 
 Method in class org.apache.jmeter.protocol.http.proxy.<A 
HREF="org/apache/jmeter/protocol/http/proxy/ProxyControl.html" title="class in 
org.apache.jmeter.protocol.http.proxy">ProxyControl</A>
 <DD>&nbsp;

Modified: 
jakarta/jmeter/branches/rel-2-2/docs/api/org/apache/jmeter/control/IfController.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/api/org/apache/jmeter/control/IfController.html?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/docs/api/org/apache/jmeter/control/IfController.html
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/docs/api/org/apache/jmeter/control/IfController.html
 Wed Sep 19 15:10:28 2007
@@ -198,6 +198,14 @@
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A 
HREF="../../../../org/apache/jmeter/control/IfController.html#isEvaluateAll()">isEvaluateAll</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
 <CODE>&nbsp;<A HREF="../../../../org/apache/jmeter/samplers/Sampler.html" 
title="interface in org.apache.jmeter.samplers">Sampler</A></CODE></FONT></TD>
 <TD><CODE><B><A 
HREF="../../../../org/apache/jmeter/control/IfController.html#next()">next</A></B>()</CODE>
 
@@ -212,6 +220,14 @@
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Condition Accessor 
- this is gonna be like ${count}<10</TD>
 </TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A 
HREF="../../../../org/apache/jmeter/control/IfController.html#setEvaluateAll(boolean)">setEvaluateAll</A></B>(boolean&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
 </TABLE>
 &nbsp;<A 
NAME="methods_inherited_from_class_org.apache.jmeter.control.GenericController"><!--
 --></A>
 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
@@ -357,6 +373,34 @@
 </DD>
 <DD><DL>
 <DT><B>See Also:</B><DD><A 
HREF="../../../../org/apache/jmeter/control/Controller.html#next()"><CODE>Controller.next()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEvaluateAll()"><!-- --></A><H3>
+isEvaluateAll</H3>
+<PRE>
+public boolean <B>isEvaluateAll</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setEvaluateAll(boolean)"><!-- --></A><H3>
+setEvaluateAll</H3>
+<PRE>
+public void <B>setEvaluateAll</B>(boolean&nbsp;b)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
 </DD>
 </DL>
 <!-- ========= END OF CLASS DATA ========= -->

Modified: jakarta/jmeter/branches/rel-2-2/docs/api/serialized-form.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/api/serialized-form.html?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/docs/api/serialized-form.html (original)
+++ jakarta/jmeter/branches/rel-2-2/docs/api/serialized-form.html Wed Sep 19 
15:10:28 2007
@@ -1904,6 +1904,16 @@
 <HR>
 
 <H3>
+evaluateAll</H3>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JCheckBox.html"; 
title="class or interface in javax.swing">JCheckBox</A> <B>evaluateAll</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
 displayName</H3>
 <PRE>
 boolean <B>displayName</B></PRE>

Modified: jakarta/jmeter/branches/rel-2-2/docs/changes.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/changes.html?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/docs/changes.html (original)
+++ jakarta/jmeter/branches/rel-2-2/docs/changes.html Wed Sep 19 15:10:28 2007
@@ -167,6 +167,11 @@
                                                </li>
                                                                        
 
+                                                                               
                <li     >
+                                                               Bug 43364 - 
option to revert If Controller to pre 2.3RC3 behaviour
+                                               </li>
+                                                                       
+
                                                </ul>
                                                                                
                                                                                
<h4     >
                                                                Improvements
@@ -1341,7 +1346,7 @@
                                                                        
 
                                                                                
                <li     >
-                                                               Bug 41612 - 
Loop nested in IF behaves erratically
+                                                               Bug 41612 - 
Loop nested in If Controller behaves erratically
                                                </li>
                                                                        
 

Modified: 
jakarta/jmeter/branches/rel-2-2/docs/usermanual/component_reference.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/usermanual/component_reference.html?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/docs/usermanual/component_reference.html 
(original)
+++ jakarta/jmeter/branches/rel-2-2/docs/usermanual/component_reference.html 
Wed Sep 19 15:10:28 2007
@@ -4493,6 +4493,16 @@
                                                                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>
+                                                                       
        
                                                                                
                                <p><b>Control Panel</b></p>
                                                <div align="center"><img 
width='358' height='131' src="../images/screenshots/ifcontroller.png"></div>
@@ -4519,6 +4529,17 @@
                                                                                
        Yes
                                                                </td>
                </tr>
+                       <tr>
+                       <td>Evaluate for all children</td>
+                       <td>                                            
+       Should condition be evaluated for all children?
+       If not checked, then the condition is only evaluated on entry.
+       
+                       </td>
+                       <td>
+                                                                               
        Yes
+                                                               </td>
+               </tr>
                </table>
        </p>
                                                                                
                                                                                
<p      >
@@ -4538,7 +4559,7 @@
                                                                        
                        
                                                                                
                <li     >
-                                                               
"${JMeterThread.last_sample_ok}" == "true" (check if last sample succeeded)
+                                                               
${JMeterThread.last_sample_ok} (check if last sample succeeded)
                                                </li>
                                                                        
                

Modified: 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/IfController.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/IfController.java?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/IfController.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/IfController.java
 Wed Sep 19 15:10:28 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/branches/rel-2-2/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java
 Wed Sep 19 15:10:28 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/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
 Wed Sep 19 15:10:28 2007
@@ -260,6 +260,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/branches/rel-2-2/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Wed Sep 19 15:10:28 2007
@@ -38,6 +38,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>
@@ -385,7 +386,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/branches/rel-2-2/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml?rev=577455&r1=577454&r2=577455&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml 
(original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml 
Wed Sep 19 15:10:28 2007
@@ -1345,16 +1345,26 @@
 <component name="If Controller" index="&sect-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} &lt; 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]

Reply via email to