/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://glassfish.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ // TestUpdateModelValuesPhase.java package com.sun.faces.lifecycle; import com.sun.faces.cactus.ServletFacesTestCase; import com.sun.faces.context.ExceptionHandlerImpl; import com.sun.faces.el.ELUtils; import com.sun.faces.util.Util; import javax.faces.component.UIForm; import javax.faces.component.UIInput; import javax.faces.component.UIViewRoot; import java.util.Locale; /** * <B>TestUpdateModelValuesPhase</B> is a class ... * <p/> * <B>Lifetime And Scope</B> <P> * */ public class TestUpdateModelValuesPhase extends ServletFacesTestCase { // // Protected Constants // // // Class Variables // // // Instance Variables // // Attribute Instance Variables // Relationship Instance Variables // // Constructors and Initializers // public TestUpdateModelValuesPhase() { super("TestUpdateModelValuesPhase"); } public TestUpdateModelValuesPhase(String name) { super(name); } // // Class methods // // // General Methods // public void testUpdateNormal() { //DebugUtil.waitForDebugger(); UIForm form = null; TestUIInput userName = null; TestUIInput userName1 = null; TestUIInput userName2 = null; com.sun.faces.cactus.TestBean testBean = (com.sun.faces.cactus.TestBean) (getFacesContext().getExternalContext().getSessionMap()).get( "TestBean"); String value = null; Phase updateModelValues = new UpdateModelValuesPhase(); form = new UIForm(); form.setId("form"); form.setSubmitted(true); userName = new TestUIInput(); userName.setId("userName"); userName.setValue("one"); userName.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); userName.testSetValid(true); form.getChildren().add(userName); userName1 = new TestUIInput(); userName1.setId("userName1"); userName1.setValue("one"); userName1.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); userName1.testSetValid(true); form.getChildren().add(userName1); userName2 = new TestUIInput(); userName2.setId("userName2"); userName2.setValue("one"); userName2.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); userName2.testSetValid(true); form.getChildren().add(userName2); UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null); viewRoot.setLocale(Locale.US); viewRoot.getChildren().add(form); viewRoot.setViewId("updateModel.xul"); getFacesContext().setViewRoot(viewRoot); try { updateModelValues.execute(getFacesContext()); } catch (Throwable e) { e.printStackTrace(); assertTrue(false); } assertTrue(!(getFacesContext().getRenderResponse()) && !(getFacesContext().getResponseComplete())); Object localvalue = userName.getLocalValue(); assertTrue(localvalue == null); assertTrue(testBean.getOne().equals("one")); assertTrue(!getFacesContext().getMessages().hasNext()); } public void testUpdateFailed() { UIForm form = null; TestUIInput userName = null; TestUIInput userName1 = null; TestUIInput userName2 = null; TestUIInput userName3 = null; String value = null; Phase updateModelValues = new UpdateModelValuesPhase(); form = new UIForm(); form.setId("form"); form.setSubmitted(true); userName = new TestUIInput(); userName.setId("userName"); userName.setValue("one"); userName.testSetValid(true); userName.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.two}")); form.getChildren().add(userName); userName1 = new TestUIInput(); userName1.setId("userName1"); userName1.setValue("one"); userName1.testSetValid(true); userName1.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); form.getChildren().add(userName1); userName2 = new TestUIInput(); userName2.setId("userName2"); userName2.setValue("one"); userName2.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); userName2.testSetValid(true); form.getChildren().add(userName2); userName3 = new TestUIInput(); userName3.setId("userName3"); userName3.setValue("four"); userName3.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.four}")); userName3.testSetValid(true); form.getChildren().add(userName3); UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null); viewRoot.setLocale(Locale.US); viewRoot.getChildren().add(form); viewRoot.setViewId("updateModel.xul"); getFacesContext().setViewRoot(viewRoot); // This stage will go to render, since there was at least one error // during component updates... try { updateModelValues.execute(getFacesContext()); } catch (Throwable e) { e.printStackTrace(); assertTrue(false); } getFacesContext().getExceptionHandler().handle(); assertTrue(getFacesContext().getRenderResponse()); assertTrue(true == (getFacesContext().getMessages().hasNext())); //assertions for our default update failed message assertTrue(true == (getFacesContext().getMessages("form:userName3").hasNext())); java.util.Iterator iter = getFacesContext().getMessages("form:userName3"); javax.faces.application.FacesMessage msg = null; javax.faces.application.FacesMessage expectedMsg = com.sun.faces.util.MessageFactory.getMessage(getFacesContext(), "javax.faces.component.UIInput.UPDATE", new Object[] {com.sun.faces.util.MessageFactory.getLabel(getFacesContext(), userName3)}); while (iter.hasNext()) { msg = (javax.faces.application.FacesMessage)iter.next(); } assertTrue(msg.getSummary().equals(expectedMsg.getSummary())); } public void testUpdateFailed2() { UIForm form = null; TestUIInput userName = null; TestUIInput userName1 = null; TestUIInput userName2 = null; TestUIInput userName3 = null; String value = null; Phase updateModelValues = new UpdateModelValuesPhase(); form = new UIForm(); form.setId("form"); form.setSubmitted(true); userName = new TestUIInput(); userName.setId("userName"); userName.setValue("one"); userName.testSetValid(true); userName.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.two}")); form.getChildren().add(userName); userName1 = new TestUIInput(); userName1.setId("userName1"); userName1.setValue("one"); userName1.testSetValid(true); userName1.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); form.getChildren().add(userName1); userName2 = new TestUIInput(); userName2.setId("userName2"); userName2.setValue("one"); userName2.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.one}")); userName2.testSetValid(true); form.getChildren().add(userName2); userName3 = new TestUIInput(); userName3.setId("userName3"); userName3.setValue("four"); userName3.setValueExpression("value", ELUtils.createValueExpression("#{TestBean.four}")); userName3.testSetValid(true); form.getChildren().add(userName3); UIViewRoot viewRoot = Util.getViewHandler(getFacesContext()).createView(getFacesContext(), null); viewRoot.setLocale(Locale.US); viewRoot.getChildren().add(form); viewRoot.setViewId("updateModel.xul"); getFacesContext().setViewRoot(viewRoot); getFacesContext().setExceptionHandler(new ExceptionHandlerImpl()); // This stage will go to render, since there was at least one error // during component updates... try { updateModelValues.execute(getFacesContext()); } catch (Throwable e) { e.printStackTrace(); assertTrue(false); } boolean exceptionThrown = false; try { getFacesContext().getExceptionHandler().handle(); } catch (Throwable t) { exceptionThrown = true; } assertTrue(exceptionThrown); assertTrue(false == (getFacesContext().getMessages().hasNext())); } public static class TestUIInput extends UIInput { public void testSetValid(boolean validState) { this.setValid(validState); } } } // end of class TestUpdateModelValuesPhase