Author: pmouawad
Date: Fri Feb 26 20:12:33 2016
New Revision: 1732554
URL: http://svn.apache.org/viewvc?rev=1732554&view=rev
Log:
Bug 59060 - HTTP Request GUI : Move File Upload to a new Tab to have more space
for parameters and prevent incoherent configuration
Contributed by Benoit Wiart
#resolve #140
https://github.com/apache/jmeter/pull/140
Bugzilla Id: 59060
Modified:
jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPFileArgsPanel.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Fri
Feb 26 20:12:33 2016
@@ -727,6 +727,7 @@ port=Port\:
post_as_parameters=Parameters
post_body=Body Data
post_body_raw=Body Data
+post_files_upload=Files Upload
post_thread_group_title=tearDown Thread Group
previous=Previous
property_as_field_label={0}\:
Modified:
jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
Fri Feb 26 20:12:33 2016
@@ -712,6 +712,7 @@ port=Port \:
post_as_parameters=Param\u00E8tres
post_body=Corps de la requ\u00EAte
post_body_raw=Donn\u00E9es de la requ\u00EAte
+post_files_upload=Upload de fichiers
post_thread_group_title=Groupe d'unit\u00E9s de fin
previous=Pr\u00E9c\u00E9dent
property_as_field_label={0}\:
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
---
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java
(original)
+++
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java
Fri Feb 26 20:12:33 2016
@@ -28,6 +28,10 @@ import org.apache.jmeter.protocol.http.g
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
+/**
+ * @deprecated since 3.0 will be removed in the next version 3.1
+ */
+@Deprecated
public class MultipartUrlConfigGui extends UrlConfigGui {
private static final long serialVersionUID = 240L;
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
---
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
(original)
+++
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
Fri Feb 26 20:12:33 2016
@@ -45,6 +45,7 @@ import org.apache.jmeter.gui.util.JSynta
import org.apache.jmeter.gui.util.JTextScrollPane;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.http.gui.HTTPArgumentsPanel;
+import org.apache.jmeter.protocol.http.gui.HTTPFileArgsPanel;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
@@ -71,13 +72,17 @@ public class UrlConfigGui extends JPanel
private static final int TAB_PARAMETERS = 0;
- private static final int TAB_RAW_BODY = 1;
+ private int tabRawBodyIndex = 1;
+
+ private int tabFileUploadIndex = 2;
private static final Font FONT_DEFAULT = UIManager.getDefaults().getFont("TextField.font");
private static final Font FONT_SMALL = new Font("SansSerif", Font.PLAIN, (int) Math.round(FONT_DEFAULT.getSize() * 0.8));
private HTTPArgumentsPanel argsPanel;
+
+ private HTTPFileArgsPanel filesPanel;
private JTextField domain;
@@ -115,8 +120,8 @@ public class UrlConfigGui extends JPanel
private JLabeledChoice httpImplementation;
- private final boolean notConfigOnly;
// set this false to suppress some items for use in HTTP Request defaults
+ private final boolean notConfigOnly;
private final boolean showImplementation; // Set false for AJP
@@ -127,6 +132,7 @@ public class UrlConfigGui extends JPanel
private ValidationTabbedPane postContentTabbedPane;
private boolean showRawBodyPane;
+ private boolean showFileUploadPane;
/**
* Constructor which is setup to show HTTP implementation, raw body pane
and
@@ -155,9 +161,23 @@ public class UrlConfigGui extends JPanel
* flag whether the raw body pane should be shown
*/
public UrlConfigGui(boolean showSamplerFields, boolean
showImplementation, boolean showRawBodyPane) {
- notConfigOnly=showSamplerFields;
+ this(showSamplerFields, showImplementation, showRawBodyPane, false);
+ }
+
+ /**
+ * @param showSamplerFields
+ * flag whether sampler fields should be shown
+ * @param showImplementation
+ * Show HTTP Implementation
+ * @param showRawBodyPane
+ * flag whether the raw body pane should be shown
+ * @param showFileUploadPane flag whether the file upload pane should be
shown
+ */
+ public UrlConfigGui(boolean showSamplerFields, boolean showImplementation,
boolean showRawBodyPane, boolean showFileUploadPane) {
+ this.notConfigOnly = showSamplerFields;
this.showImplementation = showImplementation;
this.showRawBodyPane = showRawBodyPane;
+ this.showFileUploadPane = showFileUploadPane;
init();
}
@@ -185,6 +205,9 @@ public class UrlConfigGui extends JPanel
protocol.setText(""); // $NON-NLS-1$
contentEncoding.setText(""); // $NON-NLS-1$
argsPanel.clear();
+ if(showFileUploadPane) {
+ filesPanel.clear();
+ }
if(showRawBodyPane) {
postBodyContent.setInitialText("");// $NON-NLS-1$
}
@@ -207,7 +230,7 @@ public class UrlConfigGui extends JPanel
* @param element {@link TestElement} to modify
*/
public void modifyTestElement(TestElement element) {
- boolean useRaw =
postContentTabbedPane.getSelectedIndex()==TAB_RAW_BODY;
+ boolean useRaw =
postContentTabbedPane.getSelectedIndex()==tabRawBodyIndex;
Arguments args;
if(useRaw) {
args = new Arguments();
@@ -225,6 +248,9 @@ public class UrlConfigGui extends JPanel
} else {
args = (Arguments) argsPanel.createTestElement();
HTTPArgument.convertArgumentsToHTTP(args);
+ if(showFileUploadPane) {
+ filesPanel.modifyTestElement(element);
+ }
}
element.setProperty(HTTPSamplerBase.POST_BODY_RAW, useRaw,
HTTPSamplerBase.POST_BODY_RAW_DEFAULT);
element.setProperty(new
TestElementProperty(HTTPSamplerBase.ARGUMENTS, args));
@@ -297,10 +323,13 @@ public class UrlConfigGui extends JPanel
String postBody = computePostBody(arguments, true); // Convert
CRLF to CR, see modifyTestElement
postBodyContent.setInitialText(postBody);
postBodyContent.setCaretPosition(0);
- postContentTabbedPane.setSelectedIndex(TAB_RAW_BODY, false);
+ postContentTabbedPane.setSelectedIndex(tabRawBodyIndex, false);
} else {
argsPanel.configure(arguments);
postContentTabbedPane.setSelectedIndex(TAB_PARAMETERS, false);
+ if(showFileUploadPane) {
+ filesPanel.configure(el);
+ }
}
domain.setText(el.getPropertyAsString(HTTPSamplerBase.DOMAIN));
@@ -580,12 +609,12 @@ public class UrlConfigGui extends JPanel
protected JPanel getProtocolAndMethodPanel() {
// Implementation
-
if (showImplementation) {
httpImplementation = new
JLabeledChoice(JMeterUtils.getResString("http_implementation"), // $NON-NLS-1$
HTTPSamplerFactory.getImplementations());
httpImplementation.addValue("");
}
+
// PROTOCOL
protocol = new JTextField(4);
JLabel protocolLabel = new
JLabel(JMeterUtils.getResString("protocol")); // $NON-NLS-1$
@@ -627,26 +656,33 @@ public class UrlConfigGui extends JPanel
postContentTabbedPane = new ValidationTabbedPane();
argsPanel = new HTTPArgumentsPanel();
postContentTabbedPane.add(JMeterUtils.getResString("post_as_parameters"),
argsPanel);// $NON-NLS-1$
+
+ int indx = TAB_PARAMETERS;
if(showRawBodyPane) {
+ tabRawBodyIndex = ++indx;
postBodyContent = new JSyntaxTextArea(30, 50);// $NON-NLS-1$
postContentTabbedPane.add(JMeterUtils.getResString("post_body"),
new JTextScrollPane(postBodyContent));// $NON-NLS-1$
}
+
+ if(showFileUploadPane) {
+ tabFileUploadIndex = ++indx;
+ filesPanel = new HTTPFileArgsPanel();
+
postContentTabbedPane.add(JMeterUtils.getResString("post_files_upload"),
filesPanel);
+ }
return postContentTabbedPane;
}
/**
*
*/
- class ValidationTabbedPane extends JTabbedPane{
+ class ValidationTabbedPane extends JTabbedPane {
/**
*
*/
private static final long serialVersionUID = 7014311238367882880L;
- /* (non-Javadoc)
- * @see javax.swing.JTabbedPane#setSelectedIndex(int)
- */
+
@Override
public void setSelectedIndex(int index) {
setSelectedIndex(index, true);
@@ -662,23 +698,32 @@ public class UrlConfigGui extends JPanel
* index
*/
public void setSelectedIndex(int index, boolean check) {
- int oldSelectedIndex = getSelectedIndex();
- if(!check || oldSelectedIndex==-1) {
+ int oldSelectedIndex = this.getSelectedIndex();
+ if(!check || oldSelectedIndex == -1) {
super.setSelectedIndex(index);
}
- else if(index != this.getSelectedIndex())
+ else if(index != oldSelectedIndex)
{
- if(noData(getSelectedIndex())) {
- // If there is no data, then switching between Parameters
and Raw should be
- // allowed with no further user interaction.
+ // If there is no data, then switching between Parameters/file
upload and Raw should be
+ // allowed with no further user interaction.
+ if(noData(oldSelectedIndex)) {
argsPanel.clear();
postBodyContent.setInitialText("");
+ if(showFileUploadPane) {
+ filesPanel.clear();
+ }
super.setSelectedIndex(index);
}
- else {
- if(oldSelectedIndex == TAB_RAW_BODY) {
+ else {
+ boolean filePanelHasData = false;
+ if(showFileUploadPane) {
+ filePanelHasData = filesPanel.hasData();
+ }
+
+ if(oldSelectedIndex == tabRawBodyIndex) {
+
// If RAW data and Parameters match we allow switching
-
if(postBodyContent.getText().equals(computePostBody((Arguments)argsPanel.createTestElement()).trim()))
{
+ if(index == TAB_PARAMETERS &&
postBodyContent.getText().equals(computePostBody((Arguments)argsPanel.createTestElement()).trim()))
{
super.setSelectedIndex(index);
}
else {
@@ -693,9 +738,18 @@ public class UrlConfigGui extends JPanel
}
}
else {
- // If the Parameter data can be converted (i.e. no
names), we
- // warn the user that the Parameter data will be lost.
- if(canConvertParameters()) {
+ // can switch from parameter to fileupload
+ if((oldSelectedIndex == TAB_PARAMETERS
+ && index == tabFileUploadIndex)
+ || (oldSelectedIndex == tabFileUploadIndex
+ && index == TAB_PARAMETERS)) {
+ super.setSelectedIndex(index);
+ return;
+ }
+
+ // If the Parameter data can be converted (i.e. no
names) and there is no data in file upload
+ // we warn the user that the Parameter data will be
lost.
+ if(oldSelectedIndex == TAB_PARAMETERS && !filePanelHasData
&& canConvertParameters()) {
Object[] options = {
JMeterUtils.getResString("confirm"), //
$NON-NLS-1$
JMeterUtils.getResString("cancel")}; //
$NON-NLS-1$
@@ -718,8 +772,9 @@ public class UrlConfigGui extends JPanel
else {
// If the Parameter data cannot be converted to
Raw, then the user should be
// prevented from doing so raise an error dialog
+ String messageKey =
filePanelHasData?"web_cannot_switch_tab":"web_cannot_convert_parameters_to_raw";
JOptionPane.showConfirmDialog(this,
-
JMeterUtils.getResString("web_cannot_convert_parameters_to_raw"), // $NON-NLS-1$
+ JMeterUtils.getResString(messageKey), //
$NON-NLS-1$
JMeterUtils.getResString("warning"), //
$NON-NLS-1$
JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE);
@@ -764,7 +819,7 @@ public class UrlConfigGui extends JPanel
* @return true if no argument has a name
*/
boolean canConvertParameters() {
- Arguments arguments = (Arguments)argsPanel.createTestElement();
+ Arguments arguments = (Arguments) argsPanel.createTestElement();
for (int i = 0; i < arguments.getArgumentCount(); i++) {
if(!StringUtils.isEmpty(arguments.getArgument(i).getName())) {
return false;
@@ -776,17 +831,22 @@ public class UrlConfigGui extends JPanel
/**
* Checks if no data is available in the selected tab
*
- * @param oldSelectedIndex
- * the tab to check for data
+ * @param oldSelectedIndex the tab to check for data
* @return true if neither Parameters tab nor Raw Body tab contain data
*/
boolean noData(int oldSelectedIndex) {
- if(oldSelectedIndex == TAB_RAW_BODY) {
+ if(oldSelectedIndex == tabRawBodyIndex) {
return StringUtils.isEmpty(postBodyContent.getText().trim());
}
else {
- Arguments element = (Arguments)argsPanel.createTestElement();
- return StringUtils.isEmpty(computePostBody(element));
+ boolean noData = true;
+ Arguments element = (Arguments) argsPanel.createTestElement();
+
+ if(showFileUploadPane) {
+ noData &= !filesPanel.hasData();
+ }
+
+ return noData && StringUtils.isEmpty(computePostBody(element));
}
}
}
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
---
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
(original)
+++
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
Fri Feb 26 20:12:33 2016
@@ -34,7 +34,7 @@ import javax.swing.UIManager;
import org.apache.jmeter.gui.util.HorizontalPanel;
import org.apache.jmeter.gui.util.VerticalPanel;
-import org.apache.jmeter.protocol.http.config.gui.MultipartUrlConfigGui;
+import org.apache.jmeter.protocol.http.config.gui.UrlConfigGui;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
@@ -56,7 +56,7 @@ public class HttpTestSampleGui extends A
private static final Font FONT_SMALL = new Font("SansSerif", Font.PLAIN, (int) Math.round(FONT_DEFAULT.getSize() * 0.8));
- private MultipartUrlConfigGui urlConfigGui;
+ private UrlConfigGui urlConfigGui;
private JCheckBox getImages;
@@ -158,7 +158,7 @@ public class HttpTestSampleGui extends A
add(makeTitlePanel(), BorderLayout.NORTH);
// URL CONFIG
- urlConfigGui = new MultipartUrlConfigGui(true, !isAJP);
+ urlConfigGui = new UrlConfigGui(true, !isAJP, true, true);
add(urlConfigGui, BorderLayout.CENTER);
// Bottom (embedded resources, source address and optional tasks)
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPFileArgsPanel.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPFileArgsPanel.java?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
---
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPFileArgsPanel.java
(original)
+++
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPFileArgsPanel.java
Fri Feb 26 20:12:33 2016
@@ -20,18 +20,14 @@ package org.apache.jmeter.protocol.http.
import java.awt.BorderLayout;
import java.awt.Component;
-import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
import java.io.File;
import java.util.Iterator;
import javax.swing.BorderFactory;
import javax.swing.Box;
-import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
@@ -39,7 +35,6 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
-import javax.swing.SwingConstants;
import javax.swing.table.TableCellEditor;
import org.apache.jmeter.gui.util.FileDialoger;
@@ -66,6 +61,7 @@ public class HTTPFileArgsPanel extends J
private static final long serialVersionUID = 240L;
/** The title label for this component. */
+ @Deprecated
private JLabel tableLabel;
/** The table containing the list of files. */
@@ -100,47 +96,25 @@ public class HTTPFileArgsPanel extends J
/** The mime type column title of file table. */
private static final String MIMETYPE = "send_file_mime_label";
//$NON-NLS-1$
+
+ /**
+ * Create a new HTTPFileArgsPanel as an embedded component
+ */
public HTTPFileArgsPanel() {
- this(""); // required for unit tests
+ init();
}
-
+
/**
* Create a new HTTPFileArgsPanel as an embedded component, using the
* specified title.
*
- * @param label
- * the title for the component.
+ * @param label the title for the component.
+ * @deprecated will be removed in the next version
*/
+ @Deprecated
public HTTPFileArgsPanel(String label) {
- ImageIcon image = JMeterUtils.getImage("collapse-open.png");
- tableLabel = new JLabel(label, image, SwingConstants.LEFT);
+ tableLabel = new JLabel(label);
init();
- tableLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-
tableLabel.setToolTipText(JMeterUtils.getResString("collapse_tooltip"));
- tableLabel.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- hideFileArgsMainPanel(null);
- }
- });
- }
-
- private void hideFileArgsMainPanel(Boolean force) {
- BorderLayout bl = (BorderLayout) this.getLayout();
-
- boolean result = false;
- String[] borders = {BorderLayout.CENTER, BorderLayout.WEST,
BorderLayout.SOUTH};
- for (String border : borders) {
- Component tableComponent = bl.getLayoutComponent(border);
- if(tableComponent != null) {
- boolean visible =
force!=null?force.booleanValue():!tableComponent.isVisible();
- tableComponent.setVisible(visible);
-
- result |= visible;
- }
- }
-
-
tableLabel.setIcon(result?JMeterUtils.getImage("collapse-open.png"):JMeterUtils.getImage("collapse-close.png"));
}
/**
@@ -162,7 +136,7 @@ public class HTTPFileArgsPanel extends J
}
public static boolean testFunctors(){
- HTTPFileArgsPanel instance = new HTTPFileArgsPanel(""); //$NON-NLS-1$
+ HTTPFileArgsPanel instance = new HTTPFileArgsPanel();
instance.initializeTableModel();
return instance.tableModel.checkFunctors(null,instance.getClass());
}
@@ -191,14 +165,18 @@ public class HTTPFileArgsPanel extends J
@SuppressWarnings("unchecked") // we only put HTTPFileArgs in it
Iterator<HTTPFileArg> modelData = (Iterator<HTTPFileArg>)
tableModel.iterator();
HTTPFileArg[] files = new HTTPFileArg[rows];
- int row=0;
+ int row = 0;
while (modelData.hasNext()) {
HTTPFileArg file = modelData.next();
- files[row++]=file;
+ files[row++] = file;
}
base.setHTTPFiles(files);
}
}
+
+ public boolean hasData() {
+ return tableModel.iterator().hasNext();
+ }
/**
* A newly created component can be initialized with the contents of a
@@ -230,11 +208,9 @@ public class HTTPFileArgsPanel extends J
if (tableModel.getRowCount() == 0) {
browse.setEnabled(false);
delete.setEnabled(false);
- hideFileArgsMainPanel(Boolean.FALSE);
} else {
browse.setEnabled(true);
delete.setEnabled(true);
- hideFileArgsMainPanel(Boolean.TRUE);
}
}
@@ -372,9 +348,9 @@ public class HTTPFileArgsPanel extends J
/**
* Create a panel containing the title label for the table.
- *
* @return a panel containing the title label
*/
+ @Deprecated
private Component makeLabelPanel() {
JPanel labelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
labelPanel.add(tableLabel);
@@ -418,7 +394,10 @@ public class HTTPFileArgsPanel extends J
p.setLayout(new BorderLayout());
- p.add(makeLabelPanel(), BorderLayout.NORTH);
+ // retro compatibility, will be removed in the next version
+ if(tableLabel != null) {
+ p.add(makeLabelPanel(), BorderLayout.NORTH);
+ }
p.add(makeMainPanel(), BorderLayout.CENTER);
// Force a minimum table height of 70 pixels
p.add(Box.createVerticalStrut(70), BorderLayout.WEST);
Modified: jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1732554&r1=1732553&r2=1732554&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Fri Feb 26 20:12:33 2016
@@ -116,6 +116,7 @@ Summary
<li><bug>59028</bug>Use SystemDefaultDnsResolver singleton. Contributed by
Benoit Wiart (benoit dot wiart at gmail.com)</li>
<li><bug>59036</bug>FormCharSetFinder : Use JSoup instead of deprecated
HTMLParser</li>
<li><bug>59034</bug>Parallel downloads connection management is not realistic.
Contributed by Benoit Wiart (benoit dot wiart at gmail.com) and Philippe Mouawad</li>
+ <li><bug>59060</bug>HTTP Request GUI : Move File Upload to a new Tab to have
more space for parameters and prevent incoherent configuration. Contributed by Benoit Wiart (benoit dot
wiart at gmail.com)</li>
</ul>
<h3>Other samplers</h3>