View | Details | Raw Unified | Return to bug 52061
Collapse All | Expand All

(-)test/src/org/apache/jmeter/extractor/TestRegexExtractor.java (-10 / +10 lines)
Lines 19-26 Link Here
19
package org.apache.jmeter.extractor;
19
package org.apache.jmeter.extractor;
20
20
21
21
22
import java.net.URL;
23
24
import junit.framework.TestCase;
22
import junit.framework.TestCase;
25
23
26
import org.apache.jmeter.samplers.SampleResult;
24
import org.apache.jmeter.samplers.SampleResult;
Lines 28-33 Link Here
28
import org.apache.jmeter.threads.JMeterContextService;
26
import org.apache.jmeter.threads.JMeterContextService;
29
import org.apache.jmeter.threads.JMeterVariables;
27
import org.apache.jmeter.threads.JMeterVariables;
30
28
29
import java.net.URL;
30
31
public class TestRegexExtractor extends TestCase {
31
public class TestRegexExtractor extends TestCase {
32
        private RegexExtractor extractor;
32
        private RegexExtractor extractor;
33
33
Lines 220-239 Link Here
220
            extractor.setTemplate("$1$");
220
            extractor.setTemplate("$1$");
221
            extractor.setMatchNumber(1);
221
            extractor.setMatchNumber(1);
222
            assertTrue("useBody should be true", extractor.useBody());
222
            assertTrue("useBody should be true", extractor.useBody());
223
            assertFalse("useHdrs should be false", extractor.useHeaders());
223
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
224
            assertFalse("useURL should be false", extractor.useUrl());
224
            assertFalse("useURL should be false", extractor.useUrl());
225
            extractor.setUseField(RegexExtractor.USE_BODY);
225
            extractor.setUseField(RegexExtractor.USE_BODY);
226
            assertTrue("useBody should be true", extractor.useBody());
226
            assertTrue("useBody should be true", extractor.useBody());
227
            assertFalse("useHdrs should be false", extractor.useHeaders());
227
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
228
            assertFalse("useURL should be false", extractor.useUrl());
228
            assertFalse("useURL should be false", extractor.useUrl());
229
            extractor.setUseField(RegexExtractor.USE_HDRS);
229
            extractor.setUseField(RegexExtractor.USE_RESPONSE_HDRS);
230
            assertTrue("useHdrs should be true", extractor.useHeaders());
230
            assertTrue("useHdrs should be true", extractor.useResponseHeaders());
231
            assertFalse("useBody should be false", extractor.useBody());
231
            assertFalse("useBody should be false", extractor.useBody());
232
            assertFalse("useURL should be false", extractor.useUrl());
232
            assertFalse("useURL should be false", extractor.useUrl());
233
            extractor.process();
233
            extractor.process();
234
            assertEquals("Value1", vars.get("regVal"));
234
            assertEquals("Value1", vars.get("regVal"));
235
            extractor.setUseField(RegexExtractor.USE_URL);
235
            extractor.setUseField(RegexExtractor.USE_URL);
236
            assertFalse("useHdrs should be false", extractor.useHeaders());
236
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
237
            assertFalse("useBody should be false", extractor.useBody());
237
            assertFalse("useBody should be false", extractor.useBody());
238
            assertTrue("useURL should be true", extractor.useUrl());
238
            assertTrue("useURL should be true", extractor.useUrl());
239
        }
239
        }
Lines 243-249 Link Here
243
            extractor.setTemplate("$1$");
243
            extractor.setTemplate("$1$");
244
            extractor.setMatchNumber(1);
244
            extractor.setMatchNumber(1);
245
            extractor.setUseField(RegexExtractor.USE_URL);
245
            extractor.setUseField(RegexExtractor.USE_URL);
246
            assertFalse("useHdrs should be false", extractor.useHeaders());
246
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
247
            assertFalse("useBody should be false", extractor.useBody());
247
            assertFalse("useBody should be false", extractor.useBody());
248
            assertTrue("useURL should be true", extractor.useUrl());
248
            assertTrue("useURL should be true", extractor.useUrl());
249
            extractor.process();
249
            extractor.process();
Lines 258-264 Link Here
258
            extractor.setTemplate("$1$");
258
            extractor.setTemplate("$1$");
259
            extractor.setMatchNumber(1);
259
            extractor.setMatchNumber(1);
260
            extractor.setUseField(RegexExtractor.USE_CODE);
260
            extractor.setUseField(RegexExtractor.USE_CODE);
261
            assertFalse("useHdrs should be false", extractor.useHeaders());
261
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
262
            assertFalse("useBody should be false", extractor.useBody());
262
            assertFalse("useBody should be false", extractor.useBody());
263
            assertFalse("useURL should be false", extractor.useUrl());
263
            assertFalse("useURL should be false", extractor.useUrl());
264
            assertFalse("useMessage should be false", extractor.useMessage());
264
            assertFalse("useMessage should be false", extractor.useMessage());
Lines 266-272 Link Here
266
            extractor.process();
266
            extractor.process();
267
            assertEquals("abcd",vars.get("regVal"));
267
            assertEquals("abcd",vars.get("regVal"));
268
            extractor.setUseField(RegexExtractor.USE_MESSAGE);
268
            extractor.setUseField(RegexExtractor.USE_MESSAGE);
269
            assertFalse("useHdrs should be false", extractor.useHeaders());
269
            assertFalse("useHdrs should be false", extractor.useResponseHeaders());
270
            assertFalse("useBody should be false", extractor.useBody());
270
            assertFalse("useBody should be false", extractor.useBody());
271
            assertFalse("useURL should be false", extractor.useUrl());
271
            assertFalse("useURL should be false", extractor.useUrl());
272
            assertTrue("useMessage should be true", extractor.useMessage());
272
            assertTrue("useMessage should be true", extractor.useMessage());
(-)src/core/org/apache/jmeter/resources/messages.properties (-2 / +3 lines)
Lines 776-786 Link Here
776
regex_params_values_field=Parameter values regex group number
776
regex_params_values_field=Parameter values regex group number
777
regex_params_ref_name_field=Regular Expression Reference Name
777
regex_params_ref_name_field=Regular Expression Reference Name
778
regex_params_title=RegEx User Parameters
778
regex_params_title=RegEx User Parameters
779
regex_source=Response Field to check
779
regex_source=Field to check
780
regex_src_body=Body
780
regex_src_body=Body
781
regex_src_body_as_document=Body as a Document
781
regex_src_body_as_document=Body as a Document
782
regex_src_body_unescaped=Body (unescaped)
782
regex_src_body_unescaped=Body (unescaped)
783
regex_src_hdrs=Headers
783
regex_src_hdrs_resp=Resp. Headers
784
regex_src_hdrs_req=Req. Headers
784
regex_src_url=URL
785
regex_src_url=URL
785
regexfunc_param_1=Regular expression used to search previous sample - or variable.
786
regexfunc_param_1=Regular expression used to search previous sample - or variable.
786
regexfunc_param_2=Template for the replacement string, using groups from the regular expression.  Format is $[group]$.  Example $1$.
787
regexfunc_param_2=Template for the replacement string, using groups from the regular expression.  Format is $[group]$.  Example $1$.
(-)src/components/org/apache/jmeter/extractor/RegexExtractor.java (-15 / +16 lines)
Lines 18-28 Link Here
18
18
19
package org.apache.jmeter.extractor;
19
package org.apache.jmeter.extractor;
20
20
21
import java.io.Serializable;
22
import java.util.ArrayList;
23
import java.util.Collections;
24
import java.util.List;
25
26
import org.apache.commons.lang3.StringEscapeUtils;
21
import org.apache.commons.lang3.StringEscapeUtils;
27
import org.apache.jmeter.processor.PostProcessor;
22
import org.apache.jmeter.processor.PostProcessor;
28
import org.apache.jmeter.samplers.SampleResult;
23
import org.apache.jmeter.samplers.SampleResult;
Lines 35-47 Link Here
35
import org.apache.jorphan.logging.LoggingManager;
30
import org.apache.jorphan.logging.LoggingManager;
36
import org.apache.log.Logger;
31
import org.apache.log.Logger;
37
import org.apache.oro.text.MalformedCachePatternException;
32
import org.apache.oro.text.MalformedCachePatternException;
38
import org.apache.oro.text.regex.MatchResult;
33
import org.apache.oro.text.regex.*;
39
import org.apache.oro.text.regex.Pattern;
40
import org.apache.oro.text.regex.PatternMatcher;
41
import org.apache.oro.text.regex.PatternMatcherInput;
42
import org.apache.oro.text.regex.Perl5Compiler;
43
import org.apache.oro.text.regex.Perl5Matcher;
44
34
35
import java.io.Serializable;
36
import java.util.ArrayList;
37
import java.util.Collections;
38
import java.util.List;
39
45
// @see org.apache.jmeter.extractor.TestRegexExtractor for unit tests
40
// @see org.apache.jmeter.extractor.TestRegexExtractor for unit tests
46
41
47
public class RegexExtractor extends AbstractScopedTestElement implements PostProcessor, Serializable {
42
public class RegexExtractor extends AbstractScopedTestElement implements PostProcessor, Serializable {
Lines 61-67 Link Here
61
     *
56
     *
62
     *  Do not change these values!
57
     *  Do not change these values!
63
    */
58
    */
64
    public static final String USE_HDRS = "true"; // $NON-NLS-1$
59
    public static final String USE_RESPONSE_HDRS = "response_headers"; // $NON-NLS-1$
60
    public static final String USE_REQUEST_HDRS = "request_headers"; // $NON-NLS-1$
65
    public static final String USE_BODY = "false"; // $NON-NLS-1$
61
    public static final String USE_BODY = "false"; // $NON-NLS-1$
66
    public static final String USE_BODY_UNESCAPED = "unescaped"; // $NON-NLS-1$
62
    public static final String USE_BODY_UNESCAPED = "unescaped"; // $NON-NLS-1$
67
    public static final String USE_BODY_AS_DOCUMENT = "as_document"; // $NON-NLS-1$
63
    public static final String USE_BODY_AS_DOCUMENT = "as_document"; // $NON-NLS-1$
Lines 171-177 Link Here
171
167
172
    private String getInputString(SampleResult result) {
168
    private String getInputString(SampleResult result) {
173
        String inputString = useUrl() ? result.getUrlAsString() // Bug 39707
169
        String inputString = useUrl() ? result.getUrlAsString() // Bug 39707
174
                : useHeaders() ? result.getResponseHeaders()
170
                : useResponseHeaders() ? result.getResponseHeaders()
171
                : useRequestHeaders() ? result.getRequestHeaders()
175
                : useCode() ? result.getResponseCode() // Bug 43451
172
                : useCode() ? result.getResponseCode() // Bug 43451
176
                : useMessage() ? result.getResponseMessage() // Bug 43451
173
                : useMessage() ? result.getResponseMessage() // Bug 43451
177
                : useUnescapedBody() ? StringEscapeUtils.unescapeHtml4(result.getResponseDataAsString())
174
                : useUnescapedBody() ? StringEscapeUtils.unescapeHtml4(result.getResponseDataAsString())
Lines 431-438 Link Here
431
        return getPropertyAsString(TEMPLATE);
428
        return getPropertyAsString(TEMPLATE);
432
    }
429
    }
433
430
434
    public boolean useHeaders() {
431
    public boolean useResponseHeaders() {
435
        return USE_HDRS.equalsIgnoreCase( getPropertyAsString(MATCH_AGAINST));
432
        return USE_RESPONSE_HDRS.equalsIgnoreCase(getPropertyAsString(MATCH_AGAINST));
433
    }
434
435
    public boolean useRequestHeaders() {
436
        return USE_REQUEST_HDRS.equalsIgnoreCase(getPropertyAsString(MATCH_AGAINST));
436
    }
437
    }
437
438
438
    // Allow for property not yet being set (probably only applies to Test cases)
439
    // Allow for property not yet being set (probably only applies to Test cases)
(-)src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java (-18 / +17 lines)
Lines 18-35 Link Here
18
18
19
package org.apache.jmeter.extractor.gui;
19
package org.apache.jmeter.extractor.gui;
20
20
21
import java.awt.BorderLayout;
22
import java.awt.GridBagConstraints;
23
import java.awt.GridBagLayout;
24
import java.util.List;
25
26
import javax.swing.BorderFactory;
27
import javax.swing.Box;
28
import javax.swing.ButtonGroup;
29
import javax.swing.JComponent;
30
import javax.swing.JPanel;
31
import javax.swing.JRadioButton;
32
33
import org.apache.jmeter.extractor.RegexExtractor;
21
import org.apache.jmeter.extractor.RegexExtractor;
34
import org.apache.jmeter.processor.gui.AbstractPostProcessorGui;
22
import org.apache.jmeter.processor.gui.AbstractPostProcessorGui;
35
import org.apache.jmeter.testelement.AbstractScopedTestElement;
23
import org.apache.jmeter.testelement.AbstractScopedTestElement;
Lines 37-42 Link Here
37
import org.apache.jmeter.util.JMeterUtils;
25
import org.apache.jmeter.util.JMeterUtils;
38
import org.apache.jorphan.gui.JLabeledTextField;
26
import org.apache.jorphan.gui.JLabeledTextField;
39
27
28
import javax.swing.*;
29
import java.awt.*;
30
import java.util.List;
31
40
/**
32
/**
41
 * Regular Expression Extractor Post-Processor GUI
33
 * Regular Expression Extractor Post-Processor GUI
42
 */
34
 */
Lines 59-66 Link Here
59
51
60
    private JRadioButton useBodyAsDocument;
52
    private JRadioButton useBodyAsDocument;
61
53
62
    private JRadioButton useHeaders;
54
    private JRadioButton useResponseHeaders;
63
55
56
    private JRadioButton useRequestHeaders;
57
64
    private JRadioButton useURL;
58
    private JRadioButton useURL;
65
59
66
    private JRadioButton useCode;
60
    private JRadioButton useCode;
Lines 85-91 Link Here
85
        if (el instanceof RegexExtractor){
79
        if (el instanceof RegexExtractor){
86
            RegexExtractor re = (RegexExtractor) el;
80
            RegexExtractor re = (RegexExtractor) el;
87
            showScopeSettings(re, true);
81
            showScopeSettings(re, true);
88
            useHeaders.setSelected(re.useHeaders());
82
            useResponseHeaders.setSelected(re.useResponseHeaders());
83
            useRequestHeaders.setSelected(re.useRequestHeaders());
89
            useBody.setSelected(re.useBody());
84
            useBody.setSelected(re.useBody());
90
            useUnescapedBody.setSelected(re.useUnescapedBody());
85
            useUnescapedBody.setSelected(re.useUnescapedBody());
91
            useBodyAsDocument.setSelected(re.useBodyAsDocument());
86
            useBodyAsDocument.setSelected(re.useBodyAsDocument());
Lines 165-171 Link Here
165
        useBody = new JRadioButton(JMeterUtils.getResString("regex_src_body")); //$NON-NLS-1$
160
        useBody = new JRadioButton(JMeterUtils.getResString("regex_src_body")); //$NON-NLS-1$
166
        useUnescapedBody = new JRadioButton(JMeterUtils.getResString("regex_src_body_unescaped")); //$NON-NLS-1$
161
        useUnescapedBody = new JRadioButton(JMeterUtils.getResString("regex_src_body_unescaped")); //$NON-NLS-1$
167
        useBodyAsDocument = new JRadioButton(JMeterUtils.getResString("regex_src_body_as_document")); //$NON-NLS-1$
162
        useBodyAsDocument = new JRadioButton(JMeterUtils.getResString("regex_src_body_as_document")); //$NON-NLS-1$
168
        useHeaders = new JRadioButton(JMeterUtils.getResString("regex_src_hdrs")); //$NON-NLS-1$
163
        useResponseHeaders = new JRadioButton(JMeterUtils.getResString("regex_src_hdrs_resp")); //$NON-NLS-1$
164
        useRequestHeaders = new JRadioButton(JMeterUtils.getResString("regex_src_hdrs_req")); //$NON-NLS-1$
169
        useURL = new JRadioButton(JMeterUtils.getResString("regex_src_url")); //$NON-NLS-1$
165
        useURL = new JRadioButton(JMeterUtils.getResString("regex_src_url")); //$NON-NLS-1$
170
        useCode = new JRadioButton(JMeterUtils.getResString("assertion_code_resp")); //$NON-NLS-1$
166
        useCode = new JRadioButton(JMeterUtils.getResString("assertion_code_resp")); //$NON-NLS-1$
171
        useMessage = new JRadioButton(JMeterUtils.getResString("assertion_message_resp")); //$NON-NLS-1$
167
        useMessage = new JRadioButton(JMeterUtils.getResString("assertion_message_resp")); //$NON-NLS-1$
Lines 174-180 Link Here
174
        group.add(useBody);
170
        group.add(useBody);
175
        group.add(useUnescapedBody);
171
        group.add(useUnescapedBody);
176
        group.add(useBodyAsDocument);
172
        group.add(useBodyAsDocument);
177
        group.add(useHeaders);
173
        group.add(useResponseHeaders);
174
        group.add(useRequestHeaders);
178
        group.add(useURL);
175
        group.add(useURL);
179
        group.add(useCode);
176
        group.add(useCode);
180
        group.add(useMessage);
177
        group.add(useMessage);
Lines 182-188 Link Here
182
        panel.add(useBody);
179
        panel.add(useBody);
183
        panel.add(useUnescapedBody);
180
        panel.add(useUnescapedBody);
184
        panel.add(useBodyAsDocument);
181
        panel.add(useBodyAsDocument);
185
        panel.add(useHeaders);
182
        panel.add(useResponseHeaders);
183
        panel.add(useRequestHeaders);
186
        panel.add(useURL);
184
        panel.add(useURL);
187
        panel.add(useCode);
185
        panel.add(useCode);
188
        panel.add(useMessage);
186
        panel.add(useMessage);
Lines 193-199 Link Here
193
        useBody.setActionCommand(RegexExtractor.USE_BODY);
191
        useBody.setActionCommand(RegexExtractor.USE_BODY);
194
        useUnescapedBody.setActionCommand(RegexExtractor.USE_BODY_UNESCAPED);
192
        useUnescapedBody.setActionCommand(RegexExtractor.USE_BODY_UNESCAPED);
195
        useBodyAsDocument.setActionCommand(RegexExtractor.USE_BODY_AS_DOCUMENT);
193
        useBodyAsDocument.setActionCommand(RegexExtractor.USE_BODY_AS_DOCUMENT);
196
        useHeaders.setActionCommand(RegexExtractor.USE_HDRS);
194
        useResponseHeaders.setActionCommand(RegexExtractor.USE_RESPONSE_HDRS);
195
        useRequestHeaders.setActionCommand(RegexExtractor.USE_REQUEST_HDRS);
197
        useURL.setActionCommand(RegexExtractor.USE_URL);
196
        useURL.setActionCommand(RegexExtractor.USE_URL);
198
        useCode.setActionCommand(RegexExtractor.USE_CODE);
197
        useCode.setActionCommand(RegexExtractor.USE_CODE);
199
        useMessage.setActionCommand(RegexExtractor.USE_MESSAGE);
198
        useMessage.setActionCommand(RegexExtractor.USE_MESSAGE);

Return to bug 52061