org.araneaframework.tests.FormTest.java Source code

Java tutorial

Introduction

Here is the source code for org.araneaframework.tests.FormTest.java

Source

/**
 * Copyright 2006 Webmedia Group Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
**/

package org.araneaframework.tests;

import java.text.SimpleDateFormat;
import java.util.Date;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.araneaframework.core.StandardPath;
import org.araneaframework.mock.MockInputData;
import org.araneaframework.servlet.core.StandardServletInputData;
import org.araneaframework.tests.mock.MockEnviroment;
import org.araneaframework.uilib.event.OnClickEventListener;
import org.araneaframework.uilib.form.Control;
import org.araneaframework.uilib.form.FormElement;
import org.araneaframework.uilib.form.FormWidget;
import org.araneaframework.uilib.form.constraint.ConstraintGroupHelper;
import org.araneaframework.uilib.form.constraint.NotEmptyConstraint;
import org.araneaframework.uilib.form.control.ButtonControl;
import org.araneaframework.uilib.form.control.CheckboxControl;
import org.araneaframework.uilib.form.control.DateTimeControl;
import org.araneaframework.uilib.form.control.SelectControl;
import org.araneaframework.uilib.form.control.TextControl;
import org.araneaframework.uilib.form.control.TextareaControl;
import org.araneaframework.uilib.form.converter.IdenticalConverter;
import org.araneaframework.uilib.form.converter.StringToLongConverter;
import org.araneaframework.uilib.form.converter.TimestampToDateConverter;
import org.araneaframework.uilib.form.data.BooleanData;
import org.araneaframework.uilib.form.data.DateData;
import org.araneaframework.uilib.form.data.LongData;
import org.araneaframework.uilib.form.data.StringData;
import org.araneaframework.uilib.support.DisplayItem;
import org.springframework.mock.web.MockHttpServletRequest;

/**
 * @author <a href="mailto:ekabanov@webmedia.ee">Jevgeni Kabanov</a>
 * 
 */
public class FormTest extends TestCase {

    private static Logger log = Logger.getLogger(FormTest.class);

    boolean eventsWork = false;

    public FormTest(String name) {
        super(name);
    }

    private FormWidget makeUsualForm() throws Exception {

        //Creating form :-)
        FormWidget testForm = new FormWidget();
        testForm._getComponent().init(new MockEnviroment());

        //Adding elements to form
        testForm.addElement("myCheckBox", "my checkbox", new CheckboxControl(), new BooleanData(), true);
        testForm.addElement("myLongText", "my long text", new TextControl(), new LongData(), true);
        testForm.addElement("myDateTime", "my date and time", new DateTimeControl(), new DateData(), false);
        testForm.addElement("myButton", "my button", new ButtonControl(), null, false);

        //Adding a composite element
        FormWidget hierarchyTest = testForm.addSubForm("hierarchyTest");
        hierarchyTest.addElement("myTextarea", "my text area", new TextareaControl(), new StringData(), true);

        //Filling in select control (which is under a composite element)
        FormElement mySelectElement = hierarchyTest.addElement("mySelect", "my drop down", new SelectControl(),
                new LongData(), true);
        SelectControl mySelect = (SelectControl) mySelectElement.getControl();
        mySelect.addItem(new DisplayItem("1", "one"));
        mySelect.addItem(new DisplayItem("2", "two"));
        mySelect.addItem(new DisplayItem("3", "three"));
        mySelect.addItem(new DisplayItem("4", "four"));

        return testForm;
    }

    /**
     * Tests converter picking
     */
    public void testConverters() throws Exception {

        FormWidget testForm = makeUsualForm();

        FormWidget hierarchyTest = (FormWidget) testForm.getElement("hierarchyTest");

        //Checking that converter is picked right
        assertTrue(((FormElement) testForm.getElement("myCheckBox")).getConverter() instanceof IdenticalConverter);
        assertTrue(
                ((FormElement) testForm.getElement("myLongText")).getConverter() instanceof StringToLongConverter);
        assertTrue(((FormElement) testForm.getElement("myDateTime"))
                .getConverter() instanceof TimestampToDateConverter);
        assertTrue(((FormElement) hierarchyTest.getElement("mySelect"))
                .getConverter() instanceof StringToLongConverter);
        assertTrue(((FormElement) hierarchyTest.getElement("myTextarea"))
                .getConverter() instanceof IdenticalConverter);
    }

    /**
     * Tests value assigning.
     */
    public void testValueAssigning() throws Exception {

        FormWidget testForm = makeUsualForm();

        FormWidget hierarchyTest = (FormWidget) testForm.getElement("hierarchyTest");

        //Setting initial form data
        ((FormElement) testForm.getElement("myCheckBox")).getData().setValue(Boolean.TRUE);
        ((FormElement) testForm.getElement("myLongText")).getData().setValue(new Long(16));

        Date now = new Date(System.currentTimeMillis());

        ((FormElement) testForm.getElement("myDateTime")).getData().setValue(now);
        ((FormElement) hierarchyTest.getElement("mySelect")).getData().setValue(new Long(12637));
        ((FormElement) hierarchyTest.getElement("myTextarea")).getData().setValue("MIB");

        //Checking that the data assigning works
        assertTrue(((FormElement) testForm.getElement("myCheckBox")).getData().getValue().equals(Boolean.TRUE));
        assertTrue(((FormElement) testForm.getElement("myLongText")).getData().getValue().equals(new Long(16)));
        assertTrue(((FormElement) testForm.getElement("myDateTime")).getData().getValue().equals(now));
        assertTrue(
                ((FormElement) hierarchyTest.getElement("mySelect")).getData().getValue().equals(new Long(12637)));
        assertTrue(((FormElement) hierarchyTest.getElement("myTextarea")).getData().getValue().equals("MIB"));
    }

    /**
     * Testing reading from valid request.
     */
    public void testFormValidRequestReading() throws Exception {

        FormWidget testForm = makeUsualForm();

        FormWidget hierarchyTest = (FormWidget) testForm.getElement("hierarchyTest");

        MockHttpServletRequest validRequest = new MockHttpServletRequest();

        validRequest.addParameter("testForm.__present", "true");
        validRequest.addParameter("testForm.myCheckBox", (String) null);
        validRequest.addParameter("testForm.myLongText", "108");
        validRequest.addParameter("testForm.myDateTime.date", "11.10.2015");
        validRequest.addParameter("testForm.myDateTime.time", "01:01");
        validRequest.addParameter("testForm.hierarchyTest.myTextarea", "blah");
        validRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        //Trying to read from a valid request
        StandardServletInputData input = new StandardServletInputData(validRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        Date reqDate = (new SimpleDateFormat("dd.MM.yyyy hh:mm")).parse("11.10.2015 01:01");

        //Checking that reading from request works
        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());

        assertTrue(((FormElement) testForm.getElement("myCheckBox")).getData().getValue().equals(Boolean.FALSE));
        assertTrue(((FormElement) testForm.getElement("myLongText")).getData().getValue().equals(new Long(108)));
        assertTrue(((FormElement) testForm.getElement("myDateTime")).getData().getValue().equals(reqDate));
        assertTrue(((FormElement) hierarchyTest.getElement("mySelect")).getData().getValue().equals(new Long(2)));
        assertTrue(((FormElement) hierarchyTest.getElement("myTextarea")).getData().getValue().equals("blah"));
    }

    /**
     * Testing reading from invalid request.
     */
    public void testFormInvalidRequestReading() throws Exception {
        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest invalidRequest = new MockHttpServletRequest();

        invalidRequest.addParameter("testForm.__present", "true");
        invalidRequest.addParameter("testForm.myCheckBox", "ksjf");
        invalidRequest.addParameter("testForm.myDateTime.date", "HA-HA");
        invalidRequest.addParameter("testForm.myDateTime.time", "BLAH");
        invalidRequest.addParameter("testForm.hierarchyTest.myTextarea", "");

        //Testing that invalid requests are read right
        StandardServletInputData input = new StandardServletInputData(invalidRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a mandatory element missing.
     */
    public void testFormMandatoryMissingRequestReading() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest mandatoryMissingRequest = new MockHttpServletRequest();

        mandatoryMissingRequest.addParameter("testForm.__present", "true");
        mandatoryMissingRequest.addParameter("testForm.myCheckBox", "true");
        mandatoryMissingRequest.addParameter("testForm.myLongText", "108");
        mandatoryMissingRequest.addParameter("testForm.myDateTime.date", "11.10.2015");
        mandatoryMissingRequest.addParameter("testForm.myDateTime.time", "01:01");
        mandatoryMissingRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        //Testing that mandatory items are processed right
        StandardServletInputData input = new StandardServletInputData(mandatoryMissingRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a not mandatory element missing.
     */
    public void testFormNotMandatoryMissingRequestReading() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest notMandatoryMissingRequest = new MockHttpServletRequest();

        notMandatoryMissingRequest.addParameter("testForm.__present", "true");
        notMandatoryMissingRequest.addParameter("testForm.myCheckBox", (String) null);
        notMandatoryMissingRequest.addParameter("testForm.myLongText", "108");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.myTextarea", "blah");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        StandardServletInputData input = new StandardServletInputData(notMandatoryMissingRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
       * Testing reading from request with a grouped constraint set.
       */
    public void testFormActiveGroupedConstraintInvalidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest notMandatoryMissingRequest = new MockHttpServletRequest();

        notMandatoryMissingRequest.addParameter("testForm.__present", "true");
        notMandatoryMissingRequest.addParameter("testForm.myCheckBox", "true");
        notMandatoryMissingRequest.addParameter("testForm.myLongText", "108");
        notMandatoryMissingRequest.addParameter("testForm.myDateTime", (String) null);
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.myTextarea", "blah");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(notMandatoryMissingRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        groupHelper.setActiveGroup("active");

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a grouped constraint set.
     */
    public void testFormActiveGroupedConstraintValidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest notMandatoryMissingRequest = new MockHttpServletRequest();

        notMandatoryMissingRequest.addParameter("testForm.__present", "true");
        notMandatoryMissingRequest.addParameter("testForm.myCheckBox", "true");
        notMandatoryMissingRequest.addParameter("testForm.myLongText", "108");
        notMandatoryMissingRequest.addParameter("testForm.myDateTime.date", "11.10.2015");
        notMandatoryMissingRequest.addParameter("testForm.myDateTime.time", "01:01");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.myTextarea", "blah");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(notMandatoryMissingRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        groupHelper.setActiveGroup("active");
        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a grouped constraint set.
     */
    public void testFormInactiveGroupedConstraintValidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest notMandatoryMissingRequest = new MockHttpServletRequest();

        notMandatoryMissingRequest.addParameter("testForm.__present", "true");
        notMandatoryMissingRequest.addParameter("testForm.myCheckBox", "true");
        notMandatoryMissingRequest.addParameter("testForm.myLongText", "108");
        notMandatoryMissingRequest.addParameter("testForm.myDateTime.date", "11.10.2015");
        notMandatoryMissingRequest.addParameter("testForm.myDateTime.time", "01:01");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.myTextarea", "blah");
        notMandatoryMissingRequest.addParameter("testForm.hierarchyTest.mySelect", "2");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(notMandatoryMissingRequest);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Testing events.
     */
    public void testFormEventProcessing() throws Exception {

        FormWidget testForm = makeUsualForm();

        //Simple event
        ((ButtonControl) ((FormElement) testForm.getElement("myButton")).getControl())
                .addOnClickEventListener(new TestOnClickEventHandler());

        testForm._getWidget().event(new StandardPath("myButton.onClicked"), new MockInputData());

        assertTrue("Event succeeded", eventsWork);
    }

    /**
     * Tests helper functions that access form parts by their full name.
     */
    public void testFormTraversal() throws Exception {
        FormWidget form = makeUsualForm();

        assertTrue("'myCheckBox' must contain a CheckboxControl!",
                form.getControlByFullName("myCheckBox") instanceof CheckboxControl);
        assertTrue("'hierarchyTest.myTextarea' must contain a TextareaControl!",
                form.getControlByFullName("hierarchyTest.myTextarea") instanceof TextareaControl);

        Control result = form.getControlByFullName("hierarchyTestm.yTextarea");

        assertTrue("An exception must be thrown if wrong element name is given!", result == null);
    }

    private class TestOnClickEventHandler implements OnClickEventListener {

        public void onClick() {
            log.debug("Received onClick event!");
            eventsWork = true;
        }
    }
}