Package javango.forms.widgets

Source Code of javango.forms.widgets.SelectWidgetTest$TestForm

package javango.forms.widgets;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.google.inject.Inject;

import javango.forms.AbstractForm;
import javango.forms.Form;
import javango.forms.fields.BoundField;
import javango.forms.fields.ChoiceField;
import javango.forms.fields.Field;
import javango.forms.fields.FieldFactory;
import javango.forms.fields.SelectField;
import javango.forms.fields.annotations.CharFieldProperties;
import javango.forms.fields.annotations.Choice;
import javango.forms.fields.annotations.ChoiceFieldProperties;
import javango.forms.fields.annotations.FieldProperties;
import javango.forms.tests.InjectedTestCaseBase;
import javango.forms.widgets.CheckboxWidget;
import javango.forms.widgets.SelectMultipleWidget;
import javango.forms.widgets.SelectWidget;
import javango.forms.widgets.Widget;
import javango.forms.widgets.WidgetFactory;
import junit.framework.TestCase;

public class SelectWidgetTest extends InjectedTestCaseBase {

  private Log log = LogFactory.getLog(SelectWidgetTest.class);
 
  public void testBaseHtml() {
    Map<String, String> choices = new LinkedHashMap<String, String>();
    choices.put("1", "One");
    choices.put("2", "Two");
    Widget w = new SelectWidget<String, String>().setChoices(choices);
//    ChoiceField field = (ChoiceField) new SelectField(injector.getInstance(WidgetFactory.class)).setChoices(choices).setAllowNull(false);
//    w.setField(field);
    String value = "2";
    String output = w.render("field", value, new HashMap<String, Object>());
    String html = "<select name=\"field\"><option value=\"1\" >One</option><option value=\"2\" selected=\"selected\">Two</option></select>";
    assertEquals(html, output);
  }
 
  public void testNullValue() {
    Map<String, String> choices = new LinkedHashMap<String, String>();
    choices.put("1", "One");
    choices.put("2", "Two");
    Widget w = new SelectWidget<String, String>().setChoices(choices);
//    ChoiceField field = (ChoiceField) new SelectField(injector.getInstance(WidgetFactory.class)).setChoices(choices).setAllowNull(false);
//    w.setField(field);
    String value = null;
    String output = w.render("field", value, new HashMap<String, Object>());
    String html = "<select name=\"field\"><option value=\"1\" >One</option><option value=\"2\" >Two</option></select>";
    assertEquals(html, output);
  }

  public void testValueFromMap() throws Exception {
    Map<String, String[]> postData = new LinkedHashMap<String, String[]>();
    postData.put("pickme", new String[] {"2"});

    Map<String, String> choices = new LinkedHashMap<String, String>();
    choices.put("1", "One");
    choices.put("2", "Two");
    SelectWidget w = new SelectWidget();
    ChoiceField field = (ChoiceField) new SelectField(injector.getInstance(WidgetFactory.class)).setChoices(choices).setAllowNull(false).setName("pickme");
//    w.setField(field);
   
    String[] o = w.valueFromMap(postData, "pickme");
    assertEquals("2", o[0]);
   
    Map<String, String> errors = new HashMap<String, String>();
    Object cleaned = field.clean(o, errors);
    assertTrue(errors.isEmpty());
    assertEquals("2", cleaned);
  }
 
  public static class TestForm extends AbstractForm {
   
    @FieldProperties(widgetClass=CheckboxWidget.class)
    @ChoiceFieldProperties(choices = {@Choice(key="Y", value="Yes")})
    public SelectField pickme;

    @ChoiceFieldProperties(choices = {@Choice(key="Y", value="Yes"),@Choice(key="N", value="No")})
    public SelectField selectme;

    @Inject
    public TestForm(FieldFactory fieldFactory) {
      super(fieldFactory);
      // TODO Auto-generated constructor stub
    }
   
  }
  public void testCheckboxWidget() throws Exception {
//    Map<String, Object> choices = new LinkedHashMap<String, Object>();
//    choices.put("1", "One");
//// TODO should this allow multiple values,  or is that an exception...  how does selctfield handle multiple,, force multiplselectwidget?
//    Form form = injector.getInstance(TestForm.class);
//   
//    // TODO This expected may not be 100% correct.
//    String expected = "<tr><th>pickme</th><td><input id=\"id_pickme\" type=\"checkbox\" name=\"pickme\" value==\"Y\"> Yes\n</td></tr>\n";
//
//    assertEquals(expected, form.asTable());
  }
 
  public void testNotEditable() throws Exception {
    Form form = injector.getInstance(TestForm.class);
    form.getFields().get("pickme").setEditable(false);
    form.getFields().get("selectme").setEditable(false);
   
    String expected =
        "<tr><th><label for='id_pickme'>Pickme</label></th><td><input id=\"id_pickme\" type=\"checkbox\" name=\"pickme\" disabled=\"disabled\" /></td></tr>\n" +
        "<tr><th><label for='id_selectme'>Selectme</label></th><td><select id=\"id_selectme\" name=\"selectme\" disabled=\"disabled\"><option value=\"\" >--</option><option value=\"Y\" >Yes</option><option value=\"N\" >No</option></select></td></tr>\n";

    assertEquals(expected, form.asTable());   
  }
}
TOP

Related Classes of javango.forms.widgets.SelectWidgetTest$TestForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.