Package org.apache.myfaces.view.facelets

Source Code of org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategyTest$MockViewDeclarationLanguage

/*
* 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.myfaces.view.facelets;

import java.beans.BeanInfo;
import java.io.IOException;
import java.util.Iterator;

import javax.faces.FactoryFinder;
import javax.faces.application.Resource;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import javax.faces.render.RenderKitFactory;
import javax.faces.render.ResponseStateManager;
import javax.faces.view.StateManagementStrategy;
import javax.faces.view.ViewDeclarationLanguage;
import javax.faces.view.ViewDeclarationLanguageFactory;
import javax.faces.view.ViewMetadata;

import org.apache.myfaces.application.ApplicationFactoryImpl;
import org.apache.myfaces.application.StateManagerImpl;
import org.apache.myfaces.component.visit.VisitContextFactoryImpl;
import org.apache.myfaces.renderkit.html.HtmlButtonRenderer;
import org.apache.myfaces.renderkit.html.HtmlFormRenderer;
import org.apache.myfaces.renderkit.html.HtmlTextRenderer;
import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMockTestCase;
import org.apache.myfaces.test.mock.MockRenderKit;
import org.apache.myfaces.view.ViewMetadataBase;
import org.junit.Assert;
import org.junit.Test;

public class DefaultFaceletsStateManagementStrategyTest extends
        AbstractJsfConfigurableMockTestCase
{

    public DefaultFaceletsStateManagementStrategyTest()
    {
        super();
    }
   
    public Object stateToRestore;
   
    @Override
    public void setUp() throws Exception
    {
        super.setUp();
       
        FactoryFinder.setFactory(FactoryFinder.VISIT_CONTEXT_FACTORY, VisitContextFactoryImpl.class.getName());
       
        RenderKitFactory renderKitFactory = (RenderKitFactory)FactoryFinder.getFactory("javax.faces.render.RenderKitFactory");
        renderKit = new MockRenderKit()
        {
            ResponseStateManager stateManager = new ResponseStateManager(){
                public Object getState(FacesContext context, String viewId)
                {
                    return stateToRestore;
                }
            };

            @Override
            public ResponseStateManager getResponseStateManager()
            {
                return stateManager;
            }
        };
        renderKitFactory.addRenderKit("HTML_BASIC2", renderKit);
       
        //FactoryFinder.setFactory(FactoryFinder.VISIT_CONTEXT_FACTORY,
        //        VisitContextFactoryImpl.class.getName());

        renderKit.addRenderer(
                new HtmlCommandButton().getFamily(),
                new HtmlCommandButton().getRendererType(),
                new HtmlButtonRenderer());
        renderKit.addRenderer(
                new HtmlForm().getFamily(),
                new HtmlForm().getRendererType(),
                new HtmlFormRenderer());
        renderKit.addRenderer(
                new HtmlOutputText().getFamily(),
                new HtmlOutputText().getRendererType(),
                new HtmlTextRenderer());
        renderKit.addRenderer(
                new HtmlInputText().getFamily(),
                new HtmlInputText().getRendererType(),
                new HtmlTextRenderer());          
    }

    @Override
    public void tearDown() throws Exception
    {
        stateToRestore = null;
        super.tearDown();
    }

    public static class MockViewDeclarationLanguageFactory extends ViewDeclarationLanguageFactory
    {

        public ViewDeclarationLanguage vdl = new MockViewDeclarationLanguage();
       
        @Override
        public ViewDeclarationLanguage getViewDeclarationLanguage(String viewId)
        {
            return vdl;
        }
       
    }
   
    @Override
    protected void setFactories() throws Exception
    {
        super.setFactories();
        FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
                ApplicationFactoryImpl.class.getName());
        FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY, MockViewDeclarationLanguageFactory.class.getName());
    }

    @Test
    public void testSimpleSaveRestore() throws Exception
    {
        ViewDeclarationLanguage vdl =((MockViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)).vdl;
        DefaultFaceletsStateManagementStrategy stateManagement = new DefaultFaceletsStateManagementStrategy();
       
        servletContext.addInitParameter("javax.faces.STATE_SAVING_METHOD", "client");
       
        UIViewRoot viewRoot = vdl.createView(facesContext, "/root");
        vdl.buildView(facesContext, viewRoot);
        stateManagement.suscribeListeners(viewRoot);
       
        viewRoot.getAttributes().put("somekey", "somevalue");
       
        Object state1 = stateManagement.saveView(facesContext);
        stateToRestore = state1;
        facesContext.setViewRoot(null);
        stateManagement.restoreView(facesContext, "/root", viewRoot.getRenderKitId());
       
        viewRoot = facesContext.getViewRoot();
       
        Assert.assertEquals("somevalue", viewRoot.getAttributes().get("somekey"));
        Assert.assertNotNull(viewRoot.findComponent("form1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:foo1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:var1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:button1"));
    }
   
    @Test
    public void testSaveRestoreAddComponent() throws Exception
    {
        ViewDeclarationLanguage vdl =((MockViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)).vdl;
        DefaultFaceletsStateManagementStrategy stateManagement = new DefaultFaceletsStateManagementStrategy();
       
        servletContext.addInitParameter("javax.faces.STATE_SAVING_METHOD", "client");
       
        UIViewRoot viewRoot = vdl.createView(facesContext, "/root");
        vdl.buildView(facesContext, viewRoot);
        stateManagement.suscribeListeners(viewRoot);

        viewRoot.getAttributes().put("somekey", "somevalue");
       
        HtmlOutputText a = new HtmlOutputText();
       
        a.setId("output1");
        a.setValue("testOutput1");
       
        viewRoot.getChildren().add(a);
       
        Object state1 = stateManagement.saveView(facesContext);
        stateToRestore = state1;
        facesContext.setViewRoot(null);
        stateManagement.restoreView(facesContext, "/root", viewRoot.getRenderKitId());
       
        viewRoot = facesContext.getViewRoot();
       
        Assert.assertEquals("somevalue", viewRoot.getAttributes().get("somekey"));
        Assert.assertNotNull(viewRoot.findComponent("form1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:foo1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:var1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:button1"));
       
        a = (HtmlOutputText) viewRoot.findComponent("output1");
        Assert.assertNotNull(a);
        Assert.assertEquals("testOutput1",a.getValue());
    }
   
    @Test
    public void testSaveRestoreAddComponentMultiplePostback() throws Exception
    {
        ViewDeclarationLanguage vdl =((MockViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)).vdl;
        DefaultFaceletsStateManagementStrategy stateManagement = new DefaultFaceletsStateManagementStrategy();
       
        servletContext.addInitParameter("javax.faces.STATE_SAVING_METHOD", "client");
       
        UIViewRoot viewRoot = vdl.createView(facesContext, "/root");
       
        facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
       
        vdl.buildView(facesContext, viewRoot);
       
        stateManagement.suscribeListeners(viewRoot);
       
        facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
       
        viewRoot.getAttributes().put("somekey", "somevalue");
       
        HtmlOutputText a = new HtmlOutputText();
        a.setId("output1");
        a.setValue("testOutput1");
        viewRoot.getChildren().add(a);
       
        viewRoot = saveAndRestore(stateManagement, viewRoot);

        HtmlOutputText b = new HtmlOutputText();
        b.setId("output2");
        b.setValue("testOutput2");
        viewRoot.getChildren().add(b);

        viewRoot = saveAndRestore(stateManagement, viewRoot);
       
        HtmlOutputText c = new HtmlOutputText();
        c.setId("output3");
        c.setValue("testOutput3");
        viewRoot.getChildren().add(c);

        viewRoot = saveAndRestore(stateManagement, viewRoot);
       
        HtmlOutputText d = new HtmlOutputText();
        d.setId("output4");
        d.setValue("testOutput4");
        viewRoot.getChildren().add(d);
       
        viewRoot = saveAndRestore(stateManagement, viewRoot);
       
        Assert.assertEquals("somevalue", viewRoot.getAttributes().get("somekey"));
        Assert.assertNotNull(viewRoot.findComponent("form1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:foo1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:var1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:button1"));
       
        a = (HtmlOutputText) viewRoot.findComponent("output1");
        Assert.assertNotNull(a);
        Assert.assertEquals("testOutput1",a.getValue());
        b = (HtmlOutputText) viewRoot.findComponent("output2");
        Assert.assertNotNull(b);
        Assert.assertEquals("testOutput2",b.getValue());
        c = (HtmlOutputText) viewRoot.findComponent("output3");
        Assert.assertNotNull(c);
        Assert.assertEquals("testOutput3",c.getValue());
        d = (HtmlOutputText) viewRoot.findComponent("output4");
        Assert.assertNotNull(d);
        Assert.assertEquals("testOutput4",d.getValue());
    }
   
    @Test
    public void testSaveRestoreToogleComponent() throws Exception
    {
        ViewDeclarationLanguage vdl =((MockViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)).vdl;
        DefaultFaceletsStateManagementStrategy stateManagement = new DefaultFaceletsStateManagementStrategy();
       
        servletContext.addInitParameter("javax.faces.STATE_SAVING_METHOD", "client");
       
        UIViewRoot viewRoot = vdl.createView(facesContext, "/root");
        vdl.buildView(facesContext, viewRoot);
        stateManagement.suscribeListeners(viewRoot);

        viewRoot.getAttributes().put("somekey", "somevalue");
       
        HtmlOutputText a = new HtmlOutputText();
        a.setId("output1");
        a.setValue("testOutput1");
       
        viewRoot.getChildren().add(a);
       
        viewRoot = saveAndRestore(stateManagement, viewRoot);
       
        Assert.assertEquals("form1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(1).getId());
       
        UIComponent component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("output1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("form1",viewRoot.getChildren().get(1).getId());
       
        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("form1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(1).getId());
       
        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("output1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("form1",viewRoot.getChildren().get(1).getId());
       
        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("form1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(1).getId());
       
        Assert.assertEquals("somevalue", viewRoot.getAttributes().get("somekey"));
        Assert.assertNotNull(viewRoot.findComponent("form1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:foo1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:var1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:button1"));
       
        a = (HtmlOutputText) viewRoot.findComponent("output1");
        Assert.assertNotNull(a);
        Assert.assertEquals("testOutput1",a.getValue());
    }
   
    @Test
    public void testSaveRestoreToogleComponent2() throws Exception
    {
        ViewDeclarationLanguage vdl =((MockViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)).vdl;
        DefaultFaceletsStateManagementStrategy stateManagement = new DefaultFaceletsStateManagementStrategy();
       
        servletContext.addInitParameter("javax.faces.STATE_SAVING_METHOD", "client");
       
        UIViewRoot viewRoot = vdl.createView(facesContext, "/root");
        vdl.buildView(facesContext, viewRoot);
        stateManagement.suscribeListeners(viewRoot);

        viewRoot.getAttributes().put("somekey", "somevalue");
       
        HtmlOutputText a = new HtmlOutputText();
        a.setId("output1");
        a.setValue("testOutput1");       
        viewRoot.getChildren().add(a);

        HtmlOutputText b = new HtmlOutputText();
        b.setId("output2");
        b.setValue("testOutput2");       
        viewRoot.getChildren().add(b);
       
        viewRoot = saveAndRestore(stateManagement, viewRoot);
       
        Assert.assertEquals("form1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(1).getId());
        Assert.assertEquals("output2",viewRoot.getChildren().get(2).getId());
       
        UIComponent component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("output1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output2",viewRoot.getChildren().get(1).getId());
        Assert.assertEquals("form1",viewRoot.getChildren().get(2).getId());
       
        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("output2",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("form1",viewRoot.getChildren().get(1).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(2).getId());

        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("form1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output1",viewRoot.getChildren().get(1).getId());
        Assert.assertEquals("output2",viewRoot.getChildren().get(2).getId());
       
        component = viewRoot.getChildren().remove( 0 );
        viewRoot.getChildren().add( component );

        viewRoot = saveAndRestore(stateManagement, viewRoot);

        Assert.assertEquals("output1",viewRoot.getChildren().get(0).getId());
        Assert.assertEquals("output2",viewRoot.getChildren().get(1).getId());
        Assert.assertEquals("form1",viewRoot.getChildren().get(2).getId());

        Assert.assertEquals("somevalue", viewRoot.getAttributes().get("somekey"));
        Assert.assertNotNull(viewRoot.findComponent("form1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:foo1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:var1"));
        Assert.assertNotNull(viewRoot.findComponent("form1:button1"));
       
        a = (HtmlOutputText) viewRoot.findComponent("output1");
        Assert.assertNotNull(a);
        Assert.assertEquals("testOutput1",a.getValue());
    }
   
    public UIViewRoot saveAndRestore(StateManagementStrategy stateManagement, UIViewRoot viewRoot)
    {
        externalContext.getRequestMap()
            .remove(StateManagerImpl.class.getName() + ".SERIALIZED_VIEW");       
        Object state1 = stateManagement.saveView(facesContext);
        stateToRestore = state1;
        facesContext.setViewRoot(null);
        stateManagement.restoreView(facesContext, "/root", viewRoot.getRenderKitId());
        return facesContext.getViewRoot();
    }
   
    public static class MockViewDeclarationLanguage extends ViewDeclarationLanguage
    {

        @Override
        public void buildView(FacesContext context, UIViewRoot viewRoot)
                throws IOException
        {           
            HtmlOutputText output = new HtmlOutputText();
            output.setValue("foo");
            output.setId("foo1");

            HtmlInputText input = new HtmlInputText();
            input.setValue("var");
            input.setId("var1");
           
            HtmlCommandButton button = new HtmlCommandButton();
            button.setId("button1");
           
            UIForm form = new HtmlForm();
            form.setId("form1");
           
            form.getChildren().add(output);
            form.getChildren().add(input);
            form.getChildren().add(button);
            viewRoot.getChildren().add(form);
           
            markInitialState(viewRoot);
        }
       
        public void markInitialState(UIComponent component)
        {
            component.markInitialState();
           
            Iterator<UIComponent> it = component.getFacetsAndChildren();
           
            while(it.hasNext())
            {
                markInitialState(it.next());
            }
        }

        @Override
        public UIViewRoot createView(FacesContext context, String viewId)
        {
            UIViewRoot viewRoot = new UIViewRoot();
            viewRoot.setViewId(viewId);
            viewRoot.setRenderKitId("HTML_BASIC2");
            context.setViewRoot(viewRoot);
            return viewRoot;
        }

        @Override
        public BeanInfo getComponentMetadata(FacesContext context,
                Resource componentResource)
        {
            return null;
        }

        @Override
        public Resource getScriptComponentResource(FacesContext context,
                Resource componentResource)
        {
            return null;
        }

        @Override
        public StateManagementStrategy getStateManagementStrategy(
                FacesContext context, String viewId)
        {
            return null;
        }

        @Override
        public ViewMetadata getViewMetadata(FacesContext context, String viewId)
        {
            return new ViewMetadataBase(viewId)
            {

                @Override
                public UIViewRoot createMetadataView(FacesContext context)
                {
                    try
                    {
                        context.setProcessingEvents(false);
                        String viewId = getViewId();
                        UIViewRoot view = createView(context, viewId);
                        return view;
                    }
                    finally
                    {
                        context.setProcessingEvents(true);
                    }
                }               
            };
        }

        @Override
        public void renderView(FacesContext context, UIViewRoot view)
                throws IOException
        {

        }

        @Override
        public UIViewRoot restoreView(FacesContext context, String viewId)
        {
            return null;
        }
       
    }   
}
TOP

Related Classes of org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategyTest$MockViewDeclarationLanguage

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.