Package org.apache.shale.clay.config

Source Code of org.apache.shale.clay.config.SymbolsTestCase

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you 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.apache.shale.clay.config;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

import javax.faces.component.UIComponent;

import junit.framework.Test;
import junit.framework.TestSuite;

import org.apache.commons.chain.Command;
import org.apache.shale.clay.component.chain.AbstractCommand;
import org.apache.shale.clay.component.chain.ClayContext;
import org.apache.shale.clay.component.chain.CreateComponentCommand;
import org.apache.shale.clay.component.chain.PropertyValueCommand;
import org.apache.shale.clay.config.beans.AttributeBean;
import org.apache.shale.clay.config.beans.ComponentBean;
import org.apache.shale.clay.config.beans.ElementBean;
import org.apache.shale.clay.config.beans.SymbolBean;

// tests properties and symbol evaluation
public class SymbolsTestCase extends AbstractTestCaseConfig {

    // Construct a new instance of this test case.
    public SymbolsTestCase(String name) {
        super(name);
    }

    // Return the tests included in this test case.
    public static Test suite() {

        return (new TestSuite(SymbolsTestCase.class));

    }
    public void testNestedSymbolReplacement() {
       
       
        Map symbols = new TreeMap();
       
        ClayContext clayContext = new ClayContext();
        clayContext.setFacesContext(facesContext);
        clayContext.setSymbols(symbols);
       
        SymbolBean symbol = this.createSymbol("@a", "@b");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@b", "@c");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@c", "@d");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@d", "test");
        symbols.put(symbol.getName(), symbol);
       
        AbstractCommand.realizeSymbols(clayContext);
       
        symbol = (SymbolBean) symbols.get("@a");
        assertNotNull(symbol);
        assertEquals("test", symbol.getValue());
       
        symbol = (SymbolBean) symbols.get("@b");
        assertNotNull(symbol);
        assertEquals("test", symbol.getValue());
       
        symbol = (SymbolBean) symbols.get("@c");
        assertNotNull(symbol);
        assertEquals("test", symbol.getValue());
       
        symbol = (SymbolBean) symbols.get("@d");
        assertNotNull(symbol);
        assertEquals("test", symbol.getValue());
       
       
        symbols.clear();
       
        symbol = this.createSymbol("@a", "@b");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@b", "@a");
        symbols.put(symbol.getName(), symbol);
       
        AbstractCommand.realizeSymbols(clayContext);
       
        symbol = (SymbolBean) symbols.get("@a");
        assertNotNull(symbol);
        assertEquals("@a", symbol.getValue());
       
        symbol = (SymbolBean) symbols.get("@b");
        assertNotNull(symbol);
        assertEquals("@a", symbol.getValue());
       
       
       
        symbols.clear();
       
        symbol = this.createSymbol("@foo", "@xbeanx.@xpropertyx");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@xbeanx", "@a");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@xpropertyx", "@b");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@a", "foo");
        symbols.put(symbol.getName(), symbol);
       
        symbol = this.createSymbol("@b", "bar");
        symbols.put(symbol.getName(), symbol);
       
        AbstractCommand.realizeSymbols(clayContext);
       
        symbol = (SymbolBean) symbols.get("@foo");
        assertNotNull(symbol);
        assertEquals("foo.bar", symbol.getValue());
       
    }
   
   
   
    public void testGenericPropertyCommand () throws Exception {
        javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText)
                                facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
       assertNotNull("javax.faces.HtmlOutputText", child);
      
      
       AttributeBean attr = new AttributeBean();
       attr.setName("value");
       attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
       attr.setValue("10");
      
       ComponentBean displayElement = new ComponentBean();
       displayElement.setJsfid("inputText");
       displayElement.setComponentType("javax.faces.HtmlOutputText");
       displayElement.setId("testId");
       displayElement.addAttribute(attr);
      
       assertNotNull("attribute case insensitive", displayElement.getAttribute("VaLue"));
      
       ClayContext clayContext = new ClayContext();
       clayContext.setFacesContext(facesContext);
       clayContext.setChild(child);
       clayContext.setAttribute(attr);
       clayContext.setDisplayElement(displayElement);
             
       Command command = new PropertyValueCommand();
       boolean isFinal = command.execute(clayContext);
       assertEquals("command finished", true, isFinal);      
       assertEquals("value = 10", child.getValue(), "10");

      
       child = (javax.faces.component.html.HtmlOutputText)
                               facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
       assertNotNull("javax.faces.HtmlOutputText", child);
       clayContext.setChild(child);
      
       servletContext.setAttribute("goodYear", "1969");
       attr.setBindingType(AttributeBean.BINDING_TYPE_VALUE);
       attr.setValue("#{goodYear}");

       isFinal = command.execute(clayContext);
       assertEquals("command finished", true, isFinal);      
       assertEquals("value = 1969", "1969", child.getValue());
      
       child = (javax.faces.component.html.HtmlOutputText)
                             facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
       assertNotNull("javax.faces.HtmlOutputText", child);
       clayContext.setChild(child);
      
       servletContext.setAttribute("ping", "pong");
       attr.setBindingType(AttributeBean.BINDING_TYPE_EARLY);
       attr.setValue("#{ping}");

       isFinal = command.execute(clayContext);
       assertEquals("command finished", true, isFinal);      
       assertEquals("value = pong", child.getValue(), "pong");


       child = (javax.faces.component.html.HtmlOutputText)
                               facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
       assertNotNull("javax.faces.HtmlOutputText", child);
       clayContext.setChild(child);
      
       attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
       attr.setValue("#{forManfred}");

       isFinal = command.execute(clayContext);
       assertEquals("command finished", true, isFinal);      
       assertEquals("value = #{forManfred}", "#{forManfred}", child.getValue());

       
    }
  
    //factory method for creating a symbol bean
    private SymbolBean createSymbol(String name, String value) {
        SymbolBean symbol = new SymbolBean();
        symbol.setName(name);
        symbol.setValue(value);
        return symbol;
    }  
   
    // test symbolic property replacement
    public void testSymbolicProperties() throws Exception {
           javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText)
                              facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);
          
          
           AttributeBean attr = new AttributeBean();
           attr.setName("value");
           attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
           attr.setValue("@value")//symbolic attribute
                     
           ComponentBean displayElement = new ComponentBean();
           displayElement.setJsfid("inputText");
           displayElement.setComponentType("javax.faces.HtmlOutputText");
           displayElement.setId("testId");
           displayElement.addAttribute(attr);
           displayElement.addSymbol(createSymbol("@value", "10"));
                     
           ClayContext clayContext = new ClayContext();
           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
           clayContext.setSymbols(displayElement.getSymbols());
          
           Command command = new PropertyValueCommand();
           boolean isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = 10", "10", child.getValue());

          
           // test a symbol value of an el value
           child = (javax.faces.component.html.HtmlOutputText)
                        facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);

           displayElement.addSymbol(createSymbol("@value", "#{value}"));
           attr.setBindingType(AttributeBean.BINDING_TYPE_EARLY);
           servletContext.setAttribute("value", "10");
         
           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
           clayContext.setSymbols(displayElement.getSymbols());
          
           isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = 10", "10", child.getValue());

          
           // test a symbol value with a null value symbol replacement
           child = (javax.faces.component.html.HtmlOutputText)
                 facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);

           displayElement.addSymbol(createSymbol("@value", null));
           attr.setBindingType(AttributeBean.BINDING_TYPE_EARLY);
         
           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
           clayContext.setSymbols(displayElement.getSymbols());
          
           isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = null", null, child.getValue());


           // test a symbol value with an empty String value. 
           // this will evaluate to null since it is a symbol replacement.
           child = (javax.faces.component.html.HtmlOutputText)
                     facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);

           displayElement.addSymbol(createSymbol("@value", ""));
           attr.setBindingType(AttributeBean.BINDING_TYPE_EARLY);
         
           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
           clayContext.setSymbols(displayElement.getSymbols());
          
           isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = null", null, child.getValue());

           //no symbol replacement for a empty string - should return
           //an empty string.  This allows components like the selectItem
           //to create an empty select list pick.
           attr.setValue("")//empty string          
           child = (javax.faces.component.html.HtmlOutputText)
                        facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);

           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
          
           isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = \"\"", "", child.getValue());

           //Case insensitive and reoccurring replacement
           attr.setValue("@TeSt1, @tEst1 never @test2; @test1, @teSt1 till ya @tesT3")//test multiple symbols          
           child = (javax.faces.component.html.HtmlOutputText)
                     facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
           assertNotNull("javax.faces.HtmlOutputText", child);

           displayElement.addSymbol(createSymbol("@test1", "rock"));
           displayElement.addSymbol(createSymbol("@test2", "stop"));
           displayElement.addSymbol(createSymbol("@test3", "drop"));

           clayContext.setFacesContext(facesContext);
           clayContext.setChild(child);
           clayContext.setAttribute(attr);
           clayContext.setDisplayElement(displayElement);
           // normally done in the AssignChildrenCommand
           clayContext.setSymbols(displayElement.getSymbols());
          
           isFinal = command.execute(clayContext);
           assertEquals("command finished", true, isFinal);      
           assertEquals("value = \"rock, rock never stop; rock, rock till ya drop\"",
                   "rock, rock never stop; rock, rock till ya drop", child.getValue());

    }

    //test component creation using symbols for component id's
    public void testCreateComponent()throws Exception {
       
        UIComponent parent = (UIComponent)
              facesContext.getApplication().createComponent("javax.faces.NamingContainer");
        assertNotNull("javax.faces.NamingContainer", parent);
        parent.setId("parent");
       
        ComponentBean displayElement = new ComponentBean();
        displayElement.setJsfid("inputText");
        displayElement.setComponentType("javax.faces.HtmlOutputText");
        displayElement.setId("@wynn");
        displayElement.addSymbol(createSymbol("@wynn", "test"));
       
        ClayContext clayContext = new ClayContext();
        clayContext.setFacesContext(facesContext);
        clayContext.setParent(parent);
        clayContext.setDisplayElement(displayElement);
        clayContext.setSymbols(displayElement.getSymbols());
        clayContext.setJspIds(new TreeSet());
               
        Command command = new CreateComponentCommand();
        boolean isFinal = command.execute(clayContext);
        assertEquals("command finished", false, isFinal);
       
        UIComponent child = (UIComponent) clayContext.getChild();
        assertNotNull("child", child);
       
        assertEquals("id = test", "test", child.getId());
       
       
        //null component id symbol replacement
        parent = (UIComponent)
             facesContext.getApplication().createComponent("javax.faces.NamingContainer");
        assertNotNull("javax.faces.NamingContainer", parent);
        parent.setId("parent");
       
        displayElement = new ComponentBean();
        displayElement.setJsfid("inputText");
        displayElement.setComponentType("javax.faces.HtmlOutputText");
        displayElement.setId("@wynn");
        displayElement.addSymbol(createSymbol("@wynn", null));
       
        clayContext = new ClayContext();
        clayContext.setFacesContext(facesContext);
        clayContext.setParent(parent);
        clayContext.setDisplayElement(displayElement);
        clayContext.setSymbols(displayElement.getSymbols());
        clayContext.setJspIds(new TreeSet());
               
        command = new CreateComponentCommand();
        try {
            isFinal = command.execute(clayContext);
            assertTrue("id replacement failed", false);
        } catch (RuntimeException e) {
            assertTrue("null component id",
                    e.getMessage().startsWith("The component symbol substitution failed for id \"@wynn\""));   
        }
       
        //missing component id symbol replacement
        parent = (UIComponent)
             facesContext.getApplication().createComponent("javax.faces.NamingContainer");
        assertNotNull("javax.faces.NamingContainer", parent);
        parent.setId("parent");
       
        displayElement = new ComponentBean();
        displayElement.setJsfid("inputText");
        displayElement.setComponentType("javax.faces.HtmlOutputText");
        displayElement.setId("@wynn");
       
        clayContext = new ClayContext();
        clayContext.setFacesContext(facesContext);
        clayContext.setParent(parent);
        clayContext.setDisplayElement(displayElement);
        clayContext.setSymbols(displayElement.getSymbols());
        clayContext.setJspIds(new TreeSet());
               
        command = new CreateComponentCommand();
        try {
            isFinal = command.execute(clayContext);
            assertTrue("id replacement failed", false);
        } catch (RuntimeException e) {
            assertTrue("missing component id",
                    e.getMessage().startsWith("The component symbol substitution failed for id \"@wynn\""));   
        }

       
    }
   
    public void testSymbolDelimiters() throws Exception {

        //create a target component
        javax.faces.component.html.HtmlOutputText child = (javax.faces.component.html.HtmlOutputText)
                           facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
        assertNotNull("javax.faces.HtmlOutputText", child);
       
        //setup some metadata
        AttributeBean attr = new AttributeBean();
        attr.setName("value");
        attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
        attr.setValue("@[a]@[ab]")//symbolic attribute
                  
        ComponentBean displayElement = new ComponentBean();
        displayElement.setJsfid("inputText");
        displayElement.setComponentType("javax.faces.HtmlOutputText");
        displayElement.setId("testId");
        displayElement.addAttribute(attr);
        displayElement.addSymbol(createSymbol("@[ab]", "43"));
        displayElement.addSymbol(createSymbol("@[a]", "67"));
            
        ClayContext clayContext = new ClayContext();
        clayContext.setFacesContext(facesContext);
        clayContext.setChild(child);
        clayContext.setAttribute(attr);
        clayContext.setDisplayElement(displayElement);
        // normally done in the AssignChildrenCommand
        clayContext.setSymbols(displayElement.getSymbols());
               
        Command command = new PropertyValueCommand();
        boolean isFinal = command.execute(clayContext);
        assertEquals("command finished", true, isFinal);      
        assertEquals("value = 6743", "6743", child.getValue());     

   
        //create a target component
        child = (javax.faces.component.html.HtmlOutputText)
                           facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
        assertNotNull("javax.faces.HtmlOutputText", child);

        attr.setValue("@{a}@{ab}")//symbolic attribute
        displayElement.addSymbol(createSymbol("@{ab}", "43"));
        displayElement.addSymbol(createSymbol("@{a}", "67"));

        clayContext.setChild(child);

        isFinal = command.execute(clayContext);
        assertEquals("command finished", true, isFinal);      
        assertEquals("value = 6743", "6743", child.getValue());     


       
        //create a target component
        child = (javax.faces.component.html.HtmlOutputText)
                           facesContext.getApplication().createComponent("javax.faces.HtmlOutputText");
        assertNotNull("javax.faces.HtmlOutputText", child);

        attr.setValue("@(a)@(ab)")//symbolic attribute
        displayElement.addSymbol(createSymbol("@(ab)", "43"));
        displayElement.addSymbol(createSymbol("@(a)", "67"));

        clayContext.setChild(child);

        isFinal = command.execute(clayContext);
        assertEquals("command finished", true, isFinal);      
        assertEquals("value = 6743", "6743", child.getValue());     
       
       
    }
    
    //test symbol inheritance
    public void testSymbolInheritance() {

        //loads the default and the custom address config files
        loadConfigFile("/org/apache/shale/clay/config/address-config.xml");
         
        // test vertical inheritance
        ComponentBean bean = standardConfigBean.getElement("baseSymbolLabel");
        assertNotNull(bean);
        //look for a base symbol definition
        SymbolBean symbol = (SymbolBean) bean.getSymbols().get("@mystyle");
        assertNotNull(symbol);
        assertEquals("@mystyle == color:blue", "color:blue", symbol.getValue());

        // symbol1Label extends baseSymbolLabel
        bean = standardConfigBean.getElement("symbol1Label");
        assertNotNull(bean);
        //look for inherited symbol
        symbol = (SymbolBean) bean.getSymbols().get("@mystyle");
        assertNotNull(symbol);
        assertEquals("@mystyle == color:blue", "color:blue", symbol.getValue());

        // symbol2Label extends symbol1Label
        bean = standardConfigBean.getElement("symbol2Label");
        assertNotNull(bean);
        //look for an overridden symbol
        symbol = (SymbolBean) bean.getSymbols().get("@mystyle");
        assertNotNull(symbol);
        assertEquals("@mystyle == color:red", "color:red", symbol.getValue());

       
        //test nested/inner element inheritance
        bean = standardConfigBean.getElement("symbolPanel");
        assertNotNull(bean);
       
        assertEquals(bean.getChildren().size(), 2);
        Iterator ei = bean.getChildrenIterator();
        while (ei.hasNext()) {
            ElementBean ebean = (ElementBean) ei.next();
            if (ebean.getRenderId() == 1) {
                //look for inherited symbol
                symbol = (SymbolBean) ebean.getSymbols().get("@mystyle");
                assertNotNull(symbol);
                assertEquals("@mystyle == color:blue", "color:blue", symbol.getValue());               
            } else if (ebean.getRenderId() == 2) {
                //look for an overridden symbol
                symbol = (SymbolBean) ebean.getSymbols().get("@mystyle");
                assertNotNull(symbol);
                assertEquals("@mystyle == color:red", "color:red", symbol.getValue());
               
            }
        }
       
              
    }

   
}
TOP

Related Classes of org.apache.shale.clay.config.SymbolsTestCase

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.