Package org.richfaces.component

Source Code of org.richfaces.component.ComponentControlTest

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/

package org.richfaces.component;

import java.util.List;

import javax.faces.FacesException;
import javax.faces.component.UIForm;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutput;
import javax.faces.component.UIPanel;
import javax.faces.component.UIParameter;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.component.html.HtmlPanelGroup;

import org.ajax4jsf.component.AjaxOutput;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;

import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlScript;

/**
* Unit test for simple Component.
*/
public class ComponentControlTest extends AbstractAjax4JsfTestCase {
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public ComponentControlTest (String testName) {
        super( testName );
    }
   
    private UIForm form = null;
    private UIComponentControl componentControl = null;
    private UIPanel panelGrid = null;
    private UIOutput output = null;
    public UIParameter param = null;

    public void setUp() throws Exception {
      super.setUp();
     
      application.addComponent(UIComponentControl.COMPONENT_TYPE, "org.richfaces.component.html.HtmlComponentControl");
     
      form = new HtmlForm();
        form.setId("form");
        facesContext.getViewRoot().getChildren().add(form);
       
        panelGrid = new HtmlPanelGrid();
        panelGrid.setId("input");
        form.getChildren().add(panelGrid);
       
        componentControl =  (UIComponentControl) application.createComponent(UIComponentControl.COMPONENT_TYPE);
        componentControl.setEvent("onclick");
        componentControl.setOperation("testOperation");
        componentControl.setName("testName");
        componentControl.setId("componentControl");
        componentControl.setParams("x:'y'");
        componentControl.setFor("button");
        panelGrid.getChildren().add(componentControl);

        output = new UIOutput();
        output.setId("output");
        output.setValue("test");
        form.getChildren().add(output);
       
        param = new UIParameter();
        param.setName("name");
        param.setValue("value");
        componentControl.getChildren().add(param);
    }
   
    public void tearDown() throws Exception {
      super.tearDown();
     
      param = null;
      panelGrid = null;
      componentControl = null;
      output = null;
      form = null;
    }

    public void testEventString() throws Exception {
      HtmlPage page = renderView();
      assertNotNull(page);
     
      HtmlElement htmlElement = (HtmlElement)page.getHtmlElementById(panelGrid.getClientId(facesContext));
      assertNotNull(htmlElement);
     
      String eventString = htmlElement.getAttributeValue("onclick");
      assertNotNull(eventString);
      assertTrue(eventString.contains("Richfaces.componentControl.performOperation"));
     
      eventStringParams(eventString);
    }

    public void testAttachStringEmpty() throws Exception {
      HtmlPage page = renderView();
        assertNotNull(page);
       
        List<?> scripts = page.getByXPath("//script");
       
        String eventString = null;
        for (Object obj : scripts) {
            HtmlElement element = (HtmlElement) obj;
            if (element.asXml().contains("Richfaces.componentControl.attachEvent")) {
                eventString = element.asXml();
                break;
            }
        }
       
        assertNull(eventString);
    }
   
    public void testAttachString() throws Exception {
        this.componentControl.setAttachTo("#output");
     
      HtmlPage page = renderView();
        assertNotNull(page);
       
        List<?> scripts = page.getByXPath("//script");
        assertFalse(scripts.isEmpty());
       
        String eventString = null;
        for (Object obj : scripts) {
            HtmlScript element = (HtmlScript) obj;
            if (element.asXml().contains("Richfaces.componentControl.attachAvailable")) {
                eventString = element.asXml();
                break;
            }
        }
       
        assertNotNull(eventString);
    }

    private void eventStringParams(String eventString) {
        String [] params = eventString.split(",");
      assertEquals(6, params.length);
     
      assertTrue(params[0].trim().endsWith("event"));
      assertEquals("'onclick'", params[1].trim());
      assertEquals("'#button'", params[2].trim());
      assertEquals("'testOperation'", params[3].trim());
      assertTrue(params[4].trim().startsWith("function(){return{"));
      assertTrue(params[5].trim().endsWith("}})"));
    }
   
    public void testParametersMap() throws Exception {
      String paramMap = componentControl.getEncodedParametersMap();
      assertNotNull(paramMap);
     
      String [] arr = paramMap.split(",");
      assertEquals(2, arr.length);
     
      String [] arr1 = arr[0].split(":");
      assertEquals(2, arr1.length);
      String [] arr2 = arr[1].split(":");
      assertEquals(2, arr2.length);
      if ("x".equals(arr1[0].trim())) {
        assertEquals("'y'", arr1[1].trim());
        assertEquals("'name'", arr2[0].trim());
        assertEquals("'value'", arr2[1].trim());
      } else {
        assertEquals("'name'", arr1[0].trim());
        assertEquals("'value'", arr1[1].trim());
        assertEquals("x", arr2[0].trim());
        assertEquals("'y'", arr2[1].trim());
      }
     
      param.setName(null);
      try {
      renderView();
      assertTrue("Parameter name is null, but exception isn't thrown!", false);
    } catch (Exception e) {
     
    }
    }
   
    public void testCheckValidity() throws Exception {
      HtmlPage page = renderView();
      assertNotNull(page);
     
      componentControl.setAttachTiming("wrong value");
      try {
      renderView();
      assertTrue("attachTiming attribute has wrong value, but exception isn't thrown!", false);
    } catch (FacesException e) {
     
    }
     
    componentControl.setAttachTiming("onload");
    componentControl.setOperation("");
    try {
      renderView();
      assertTrue("operation is empty, but exception isn't thrown!", false);
    } catch (FacesException e) {
     
    }
    }
}
TOP

Related Classes of org.richfaces.component.ComponentControlTest

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.