[CLK-782]FileField#getValueObject() is fixed to return FileItem.
git-svn-id: https://svn.apache.org/repos/asf/click/trunk/click@1309299 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/org/apache/click/control/FileField.java b/framework/src/org/apache/click/control/FileField.java
index d4b0162..6ebf529 100644
--- a/framework/src/org/apache/click/control/FileField.java
+++ b/framework/src/org/apache/click/control/FileField.java
@@ -220,6 +220,18 @@
}
/**
+ * Return the <tt>org.apache.commons.fileupload.FileItem</tt>, or null.
+ *
+ * @see Field#getValueObject()
+ *
+ * @return the object representation of the Field value
+ */
+ @Override
+ public Object getValueObject() {
+ return this.fileItem;
+ }
+
+ /**
* Return the FileField JavaScript client side validation function.
*
* @return the field JavaScript client side validation function
diff --git a/framework/test/org/apache/click/util/ClickUtilsTest.java b/framework/test/org/apache/click/util/ClickUtilsTest.java
index b076093..9e68b5c 100644
--- a/framework/test/org/apache/click/util/ClickUtilsTest.java
+++ b/framework/test/org/apache/click/util/ClickUtilsTest.java
@@ -26,16 +26,20 @@
import java.util.Map;
import junit.framework.TestCase;
+
import org.apache.click.Context;
import org.apache.click.MockContext;
import org.apache.click.Page;
import org.apache.click.control.Checkbox;
import org.apache.click.control.Field;
import org.apache.click.control.FieldSet;
+import org.apache.click.control.FileField;
import org.apache.click.control.Form;
import org.apache.click.control.HiddenField;
import org.apache.click.control.TextField;
+import org.apache.click.fileupload.MockFileItem;
import org.apache.click.servlet.MockRequest;
+import org.apache.commons.fileupload.FileItem;
/**
* Tests for ClickUtils.
@@ -52,7 +56,8 @@
private static final boolean BOOLEAN = true;
private static final double DOUBLE = -87.23;
private static final String TELEPHONE = "9877262";
-
+ private static final FileItem FILEITEM = new MockFileItem();
+
static {
Calendar calendar = new GregorianCalendar(2000, 01, 02);
DATE_OF_BIRTH = calendar.getTime();
@@ -73,7 +78,7 @@
// set up the form
Form form = new Form("sample");
-
+
TextField idField = new TextField("id");
form.add(idField);
@@ -85,22 +90,25 @@
TextField dateField = new TextField("dateOfBirth");
fieldset.add(dateField);
-
+
TextField intField = new TextField("int");
form.add(intField);
TextField doubleField = new TextField("double");
form.add(doubleField);
-
+
Checkbox checkBox = new Checkbox("boolean");
- form.add(checkBox);
-
+ form.add(checkBox);
+
TextField telephoneField = new TextField("telephone");
form.add(telephoneField);
-
+
HiddenField hidden = new HiddenField("hidden", String.class);
form.add(hidden);
-
+
+ FileField fileField = new FileField("file");
+ form.add(fileField);
+
// Populate fields
idField.setValueObject(ID);
nameField.setValue(NAME);
@@ -109,6 +117,7 @@
doubleField.setValue(String.valueOf(DOUBLE));
checkBox.setChecked(BOOLEAN);
telephoneField.setValue(TELEPHONE);
+ fileField.setValueObject(FILEITEM);
// copy form to object
SampleObject sampleObject = new SampleObject();
@@ -117,22 +126,23 @@
// has the object been configured correctly?
assertEquals(new Integer(idField.getValue()), sampleObject.getId());
assertEquals(nameField.getValue(), sampleObject.getName());
-
+
//NOTE the dateField was NOT copied to the sampleObject's Date property.
- //Use org.apache.click.extras.control.DateField in the extras project, to
+ //Use org.apache.click.extras.control.DateField in the extras project, to
//copy a Date property.
assertEquals(null, sampleObject.getDateOfBirth());
assertEquals(telephoneField.getValueObject().toString(), sampleObject.getTelephone());
- assertTrue(sampleObject.getInt() == new Integer(intField.getValue()).intValue());
- assertTrue(sampleObject.getDouble() == new Double(doubleField.getValue()).doubleValue());
- assertTrue(sampleObject.isBoolean() == checkBox.isChecked());
-
+ assertEquals(new Integer(intField.getValue()).intValue(), sampleObject.getInt());
+ assertEquals(new Double(doubleField.getValue()).doubleValue(), sampleObject.getDouble());
+ assertEquals(checkBox.isChecked(), sampleObject.isBoolean());
+ assertSame(fileField.getFileItem(), sampleObject.getFile());
+
// Test object path copying
-
+
User user = new User();
user.setAddress(new Address());
user.getAddress().setState(new State());
-
+
form = new Form();
TextField codeField = new TextField("address.state.code");
codeField.setValue("NSW");
@@ -147,7 +157,7 @@
public void testCopyObjectToForm() {
// set up the form
Form form = new Form("sample");
-
+
TextField idField = new TextField("id");
form.add(idField);
@@ -156,22 +166,25 @@
TextField nameField = new TextField("name");
fieldset.add(nameField);
-
+
TextField dateField = new TextField("dateOfBirth");
- fieldset.add(dateField);
-
+ fieldset.add(dateField);
+
TextField intField = new TextField("int");
form.add(intField);
-
+
TextField doubleField = new TextField("double");
form.add(doubleField);
-
+
Checkbox checkBox = new Checkbox("boolean");
form.add(checkBox);
-
+
HiddenField hidden = new HiddenField("hidden", String.class);
form.add(hidden);
-
+
+ FileField fileField = new FileField("file");
+ form.add(fileField);
+
// Populate object
SampleObject sampleObject = new SampleObject();
sampleObject.setId(ID);
@@ -180,6 +193,7 @@
sampleObject.setInt(INT);
sampleObject.setDouble(DOUBLE);
sampleObject.setBoolean(BOOLEAN);
+ sampleObject.setFile(FILEITEM);
// copy object to form
ClickUtils.copyObjectToForm(sampleObject, form, true);
@@ -188,9 +202,10 @@
assertEquals(sampleObject.getId(), new Integer(idField.getValue()));
assertEquals(sampleObject.getName(), nameField.getValue());
assertEquals(sampleObject.getDateOfBirth().toString(), dateField.getValue());
- assertTrue(sampleObject.getInt() == new Integer(intField.getValue()).intValue());
- assertTrue(sampleObject.getDouble() == new Double(doubleField.getValue()).doubleValue());
- assertTrue(sampleObject.isBoolean() == checkBox.isChecked());
+ assertEquals(new Integer(intField.getValue()).intValue(), sampleObject.getInt());
+ assertEquals(new Double(doubleField.getValue()).doubleValue(), sampleObject.getDouble());
+ assertEquals(checkBox.isChecked(), sampleObject.isBoolean());
+ assertNull(fileField.getValueObject());
// Test object path copying
@@ -198,13 +213,13 @@
user.setAddress(new Address());
user.getAddress().setState(new State());
user.getAddress().getState().setCode("NSW");
-
+
form = new Form();
TextField codeField = new TextField("address.state.code");
form.add(codeField);
form.copyFrom(user, true);
assertEquals("NSW", codeField.getValueObject());
-
+
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "malcolm");
form = new Form();
@@ -226,7 +241,7 @@
Integer age = new Integer(61);
String stateCode = "NSW";
String street = "12 Short street";
-
+
// Setup the map
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", id);
@@ -270,7 +285,7 @@
* CLK-239.
*/
public void testCopyFormToMap() {
-
+
Integer id = new Integer(9876);
String name = "Rocky Balboa";
Integer age = new Integer(61);
@@ -290,16 +305,16 @@
TextField idField = new TextField("id");
idField.setValue(id.toString());
form.add(idField);
-
+
// Create fieldset
FieldSet fieldset = new FieldSet("fieldset");
form.add(fieldset);
TextField nameField = new TextField("name");
nameField.setValue(name);
fieldset.add(nameField);
-
+
TextField ageField = new TextField("age");
- ageField.setValue(age.toString());
+ ageField.setValue(age.toString());
form.add(ageField);
TextField streetField = new TextField("address.street");
streetField.setValue(street);
@@ -329,9 +344,9 @@
final String code = "NSW";
final boolean active = false;
final Boolean registered = Boolean.TRUE;
-
+
Form form = new Form();
-
+
TextField idField = new TextField("address.id");
form.add(idField);
TextField lineOneField = new TextField("address.lineOne");
@@ -346,15 +361,15 @@
TextField codeField = new TextField("address.state.code");
codeField.setValue(code);
form.add(codeField);
-
- User user = new User();
+
+ User user = new User();
form.copyTo(user, true);
-
+
assertNull(user.getAddress().getId());
- assertEquals(lineOne, user.getAddress().getLineOne());
- assertEquals(active, user.getAddress().isActive());
+ assertEquals(lineOne, user.getAddress().getLineOne());
+ assertEquals(active, user.getAddress().isActive());
assertEquals(registered, user.getAddress().isRegistered());
- assertEquals(code, user.getAddress().getState().getCode());
+ assertEquals(code, user.getAddress().getState().getCode());
}
/**
@@ -365,39 +380,39 @@
assertEquals("Customer Number", ClickUtils.toLabel("customerNumber"));
assertEquals("Card PIN", ClickUtils.toLabel("cardPIN"));
}
-
+
/**
* Sanity checks for ClickUtils.toMD5Hash.
*/
public void testToMD5Hash() {
- assertEquals("5f4dcc3b5aa765d61d8327deb882cf99",
+ assertEquals("5f4dcc3b5aa765d61d8327deb882cf99",
ClickUtils.toMD5Hash("password"));
}
-
+
/**
* Sanity checks for ClickUtils.getParentMessages.
*/
public void testGetParentMessages() {
TextField textField = new TextField("test");
-
+
Map<String, String> map = ClickUtils.getParentMessages(textField);
assertNotNull(map);
assertTrue(map.isEmpty());
assertTrue(map == Collections.EMPTY_MAP);
-
+
Page page = new Page();
page.addControl(textField);
-
+
Map<String, String> map2 = ClickUtils.getParentMessages(textField);
assertNotNull(map2);
assertEquals(1, map2.size());
assertFalse(map2 == Collections.EMPTY_MAP);
-
+
Page page2 = new Page();
-
+
Form form = new Form("form");
page2.addControl(form);
-
+
TextField textField2 = new TextField("test");
form.add(textField2);
@@ -499,7 +514,7 @@
String value4 = ClickUtils.escapeHtml(value3);
assertEquals(value3, value4);
assertTrue(value3 == value4);
-
+
assertEquals(""", ClickUtils.escapeHtml("\""));
assertEquals("&", ClickUtils.escapeHtml("&"));
assertEquals("<", ClickUtils.escapeHtml("<"));
@@ -533,23 +548,23 @@
assertTrue(false);
}
}
-
+
/**
* Sanity checks for encoding and decoding a password in a cookie.
*/
public void testCookiePassword() {
String username = "username";
String password = "password";
-
+
String cookie = ClickUtils.encodePasswordCookie(username, password, 12);
-
+
String[] result = ClickUtils.decodePasswordCookie(cookie, 12);
-
+
assertEquals(username, result[0]);
assertEquals(password, result[1]);
-
+
result = ClickUtils.decodePasswordCookie(cookie, 21);
-
+
assertFalse(username.equals(result[0]));
assertFalse(password.equals(result[1]));
}
diff --git a/framework/test/org/apache/click/util/SampleObject.java b/framework/test/org/apache/click/util/SampleObject.java
index 14b93c0..7f730e0 100644
--- a/framework/test/org/apache/click/util/SampleObject.java
+++ b/framework/test/org/apache/click/util/SampleObject.java
@@ -18,6 +18,8 @@
*/
package org.apache.click.util;
+import org.apache.commons.fileupload.FileItem;
+
public class SampleObject {
private Integer id;
private String name;
@@ -27,6 +29,7 @@
private double _double;
private String telephone;
private boolean active;
+ private FileItem file;
public Integer getId() {
return id;
@@ -51,35 +54,35 @@
public void setDateOfBirth(java.util.Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
-
+
public boolean isBoolean() {
return _boolean;
}
-
+
public void setBoolean(boolean b) {
_boolean = b;
}
-
+
public double getDouble() {
return _double;
}
-
+
public void setDouble(double d) {
_double = d;
}
-
+
public int getInt() {
return _int;
}
-
+
public void setInt(int i) {
_int = i;
}
-
+
public String getTelephone() {
return telephone;
}
-
+
public void setTelephone(String telephone) {
this.telephone = telephone;
}
@@ -92,4 +95,12 @@
this.active = active;
}
+ public void setFile(FileItem file){
+ this.file = file;
+ }
+
+ public FileItem getFile(){
+ return this.file;
+ }
+
}
diff --git a/mock/src/org/apache/click/fileupload/MockFileItem.java b/mock/src/org/apache/click/fileupload/MockFileItem.java
new file mode 100644
index 0000000..3453e40
--- /dev/null
+++ b/mock/src/org/apache/click/fileupload/MockFileItem.java
@@ -0,0 +1,86 @@
+package org.apache.click.fileupload;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.fileupload.FileItem;
+
+public class MockFileItem implements FileItem {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void delete() {
+ }
+
+ @Override
+ public byte[] get() {
+ return null;
+ }
+
+ @Override
+ public String getContentType() {
+ return null;
+ }
+
+ @Override
+ public String getFieldName() {
+ return null;
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return null;
+ }
+
+ @Override
+ public OutputStream getOutputStream() throws IOException {
+ return null;
+ }
+
+ @Override
+ public long getSize() {
+ return 0;
+ }
+
+ @Override
+ public String getString() {
+ return null;
+ }
+
+ @Override
+ public String getString(String arg0) throws UnsupportedEncodingException {
+ return null;
+ }
+
+ @Override
+ public boolean isFormField() {
+ return false;
+ }
+
+ @Override
+ public boolean isInMemory() {
+ return false;
+ }
+
+ @Override
+ public void setFieldName(String arg0) {
+ }
+
+ @Override
+ public void setFormField(boolean arg0) {
+ }
+
+ @Override
+ public void write(File arg0) throws Exception {
+ }
+
+}