Author: sebb
Date: Tue Nov 18 14:32:33 2008
New Revision: 718745

URL: http://svn.apache.org/viewvc?rev=718745&view=rev
Log:
Fix regex function - was failing to process $m$mid$n$ correctly

Modified:
    
jakarta/jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java
    
jakarta/jmeter/trunk/test/src/org/apache/jmeter/functions/TestRegexFunction.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: 
jakarta/jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java?rev=718745&r1=718744&r2=718745&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java
 (original)
+++ 
jakarta/jmeter/trunk/src/functions/org/apache/jmeter/functions/RegexFunction.java
 Tue Nov 18 14:32:33 2008
@@ -60,7 +60,9 @@
 
     private static final List desc = new LinkedList();
 
-    private Pattern templatePattern;// initialised to the regex \$(\d+)\$
+    private static final String TEMPLATE_PATTERN = "\\$(\\d+)\\$";  
//$NON-NLS-1$
+    /** initialised to the regex \$(\d+)\$ */
+    private final Pattern templatePattern;
 
     // Number of parameters expected - used to reject invalid calls
     private static final int MIN_PARAMETER_COUNT = 2;
@@ -77,11 +79,7 @@
     }
 
     public RegexFunction() {
-        initPattern();
-    }
-
-    private void initPattern() {
-        templatePattern = 
JMeterUtils.getPatternCache().getPattern("\\$(\\d+)\\$",  //$NON-NLS-1$
+        templatePattern = 
JMeterUtils.getPatternCache().getPattern(TEMPLATE_PATTERN,
                 Perl5Compiler.READ_ONLY_MASK);
     }
 
@@ -242,8 +240,11 @@
         PatternMatcher matcher = JMeterUtils.getMatcher();
         Util.split(pieces, matcher, templatePattern, rawTemplate);
         PatternMatcherInput input = new PatternMatcherInput(rawTemplate);
-        Iterator iter = pieces.iterator();
         boolean startsWith = isFirstElementGroup(rawTemplate);
+        if (startsWith) {
+            pieces.remove(0);// Remove initial empty entry
+        }
+        Iterator iter = pieces.iterator();
         while (iter.hasNext()) {
             boolean matchExists = matcher.contains(input, templatePattern);
             if (startsWith) {

Modified: 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/functions/TestRegexFunction.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jmeter/functions/TestRegexFunction.java?rev=718745&r1=718744&r2=718745&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/functions/TestRegexFunction.java
 (original)
+++ 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/functions/TestRegexFunction.java
 Tue Nov 18 14:32:33 2008
@@ -127,6 +127,158 @@
             assertEquals("times", vars.getObject("OUTVAR_g2"));
         }
 
+        public void testVariableExtractionFromVariable2() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("$1$$2$")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("123times", match);
+            assertEquals("123times", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable3() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("pre$2$post")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("pretimespost", match);
+            assertEquals("pretimespost", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable4() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("pre$2$")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("pretimes", match);
+            assertEquals("pretimes", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable5() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("$2$post")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("timespost", match);
+            assertEquals("timespost", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable6() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("$2$$2$")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("timestimes", match);
+            assertEquals("timestimes", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable7() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("pre$1$mid$2$post")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("pre123midtimespost", match);
+            assertEquals("pre123midtimespost", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable8() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("pre$1$mid$2$")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("pre123midtimes", match);
+            assertEquals("pre123midtimes", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
+        public void testVariableExtractionFromVariable9() throws Exception {
+            params = new LinkedList();
+            params.add(new CompoundVariable("(\\d+)\\s+(\\w+)"));
+            params.add(new CompoundVariable("$1$mid$2$post")); // template
+            params.add(new CompoundVariable("1")); // match number
+            params.add(new CompoundVariable("-")); // ALL separator
+            params.add(new CompoundVariable("default"));
+            params.add(new CompoundVariable("OUTVAR"));
+            params.add(new CompoundVariable(INPUT_VARIABLE_NAME));
+            variable.setParameters(params);
+            String match = variable.execute(result, null);
+            assertEquals("1", vars.getObject("OUTVAR_matchNr"));
+            assertEquals("123midtimespost", match);
+            assertEquals("123midtimespost", vars.getObject("OUTVAR"));
+            assertEquals("123 times", vars.getObject("OUTVAR_g0"));
+            assertEquals("123", vars.getObject("OUTVAR_g1"));
+            assertEquals("times", vars.getObject("OUTVAR_g2"));
+        }
+
                public void testVariableExtraction2() throws Exception {
                        params = new LinkedList();
                        params.add(new CompoundVariable("<value 
field=\"(pinposition\\d+)\">(\\d+)</value>"));

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=718745&r1=718744&r2=718745&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Tue Nov 18 14:32:33 2008
@@ -166,6 +166,7 @@
 <li>JMSPublisher and Subscriber fixes: thread-safety, support dynamic locale 
changes, locale independence for JMX attribute values</li>
 <li>Add HeaderAsPropertyRenderer to support header resource names; use this to 
fix locale changes in various GUI elements</li>
 <li>Fixed language change handling for menus (does not yet work for 
TestBeans)</li>
+<li>Fix regex function - was failing to process $m$mid$n$ correctly</li>
 </ul>
 
 <h3>Improvements</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to