You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2016/11/23 01:36:27 UTC
svn commit: r1770904 [3/3] - in /myfaces/core/branches/2.3.x:
api/src/main/java/javax/faces/ api/src/main/java/javax/faces/application/
api/src/main/java/javax/faces/component/search/
impl/src/main/java/org/apache/myfaces/application/ impl/src/main/jav...
Added: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java?rev=1770904&view=auto
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java (added)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java Wed Nov 23 01:36:27 2016
@@ -0,0 +1,327 @@
+/*
+ * 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.component.search;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.faces.application.StateManager;
+import javax.faces.component.ContextCallback;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
+import javax.faces.component.search.ComponentNotFoundException;
+import javax.faces.component.search.SearchExpressionContext;
+import javax.faces.component.search.SearchExpressionHandler;
+import javax.faces.component.search.SearchExpressionHint;
+import javax.faces.context.FacesContext;
+import org.apache.myfaces.mc.test.core.AbstractMyFacesRequestTestCase;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class SearchExpressionImplTest extends AbstractMyFacesRequestTestCase
+{
+ @Override
+ protected boolean isScanAnnotations()
+ {
+ return true;
+ }
+
+ @Override
+ protected void setUpWebConfigParams() throws Exception
+ {
+ super.setUpWebConfigParams();
+ servletContext.addInitParameter("org.apache.myfaces.annotation.SCAN_PACKAGES","org.apache.myfaces.component.search");
+ servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_CLIENT);
+ servletContext.addInitParameter("javax.faces.PARTIAL_STATE_SAVING", "true");
+ }
+
+ @Test
+ public void testSearchExpression1() throws Exception
+ {
+ startViewRequest("/search1.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+ UIOutput out = (UIOutput) facesContext.getViewRoot().findComponent("mainForm:showName");
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out);
+ Collection<String> list = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "mainForm:showName");
+
+ boolean found = false;
+ for (String clientId : list)
+ {
+ System.out.println(clientId);
+ found = true;
+ }
+ Assert.assertTrue(found);
+
+ String componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@this").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@this:@parent:showName").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@parent:showName:@parent:showName").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@form:showName").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@namingcontainer:showName").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ UIOutput name = (UIOutput) facesContext.getViewRoot().findComponent("mainForm:name");
+ searchContext = SearchExpressionContext.createSearchExpressionContext(facesContext, name);
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@previous").get(0);
+ Assert.assertEquals(componentId, "mainForm:labelName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@next").get(0);
+ Assert.assertEquals(componentId, "mainForm:msgName");
+
+ componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
+ searchContext, "@parent:@id(msgName)").get(0);
+ Assert.assertEquals(componentId, "mainForm:msgName");
+
+ facesContext.getViewRoot().invokeOnComponent(facesContext, "mainForm:table:3:nested:1:nestedButton",
+ new ContextCallback()
+ {
+ @Override
+ public void invokeContextCallback(FacesContext context, UIComponent target)
+ {
+ SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(context, target);
+ String componentId = handler.resolveClientIds(searchContext, "mainForm:showName").get(0);
+ Assert.assertEquals(componentId, "mainForm:showName");
+
+ componentId = handler.resolveClientIds(searchContext, "nested:nestedText").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:3:nested:1:nestedText");
+
+ componentId = handler.resolveClientIds(searchContext, "table:baseText").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:3:baseText");
+
+ componentId = handler.resolveClientIds(searchContext, "table:0:baseText").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:0:baseText");
+
+ componentId = handler.resolveClientIds(searchContext, "nested:0:nestedText").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:3:nested:0:nestedText");
+
+ componentId = handler.resolveClientIds(searchContext, "table:nested").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:3:nested");
+
+ componentId = handler.resolveClientIds(searchContext, "table:1:nested:0:nestedText").get(0);
+ Assert.assertEquals(componentId, "mainForm:table:1:nested:0:nestedText");
+
+ //System.out.println(componentId);
+ }
+ });
+
+ processRemainingPhases();
+ }
+
+ @Test
+ public void testResolveClientId1() throws Exception
+ {
+ startViewRequest("/search1.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+ UIOutput out = (UIOutput) facesContext.getViewRoot().findComponent("mainForm:showName");
+ Set<SearchExpressionHint> expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.PARENT_FALLBACK);
+ SearchExpressionContext searchContextWithParentFallback =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out, expressionHints, null);
+ SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+
+ String clientId = handler.resolveClientId(searchContextWithParentFallback, "@none");
+ Assert.assertNotNull(clientId);
+
+ expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.IGNORE_NO_RESULT);
+ SearchExpressionContext searchContextWithIgnoreNoResult =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out, expressionHints, null);
+
+ clientId = handler.resolveClientId(searchContextWithIgnoreNoResult, "@none");
+ Assert.assertNull(clientId);
+
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out);
+
+ try
+ {
+ clientId = handler.resolveClientId(searchContext, "@none");
+ Assert.fail();
+ }
+ catch (ComponentNotFoundException e)
+ {
+ //No op
+ }
+ }
+
+ @Test
+ public void testResolveClientIds1() throws Exception
+ {
+ startViewRequest("/search1.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+ UIOutput out = (UIOutput) facesContext.getViewRoot().findComponent("mainForm:showName");
+ Set<SearchExpressionHint> expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.PARENT_FALLBACK);
+ SearchExpressionContext searchContextWithParentFallback =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out, expressionHints, null);
+ SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+
+ List<String> clientId = handler.resolveClientIds(searchContextWithParentFallback, "@none");
+ Assert.assertNotNull(clientId.get(0));
+
+ expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.IGNORE_NO_RESULT);
+ SearchExpressionContext searchContextWithIgnoreNoResult =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out, expressionHints, null);
+
+ clientId = handler.resolveClientIds(searchContextWithIgnoreNoResult, "@none");
+ Assert.assertTrue(clientId.isEmpty());
+
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, out);
+
+ try
+ {
+ clientId = handler.resolveClientIds(searchContext, "@none");
+ Assert.fail();
+ }
+ catch (ComponentNotFoundException e)
+ {
+ //No op
+ }
+ }
+
+ @Test
+ public void testIsValid() throws Exception
+ {
+ startViewRequest("/search1.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, null);
+ SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:showName"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested:1:nestedText"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:baseText"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:0:baseText"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested:0:nestedText"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:1:nested:0:nestedText"));
+
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@this"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@this:@parent:showName"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@parent:showName:@parent:showName"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@form:showName"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@namingcontainer:showName"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@previous"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@next"));
+ Assert.assertTrue(handler.isValidExpression(searchContext, "@parent:@id(msgName)"));
+
+ Assert.assertFalse(handler.isValidExpression(searchContext, "@whoNows"));
+ Assert.assertFalse(handler.isValidExpression(searchContext, "@parent:@whoNows"));
+ Assert.assertFalse(handler.isValidExpression(searchContext, "mainForm:@whoNows"));
+ Assert.assertFalse(handler.isValidExpression(searchContext, "!whoNows"));
+
+ Assert.assertFalse(handler.isValidExpression(searchContext, "@none:@parent"));
+ Assert.assertFalse(handler.isValidExpression(searchContext, "@all:@parent"));
+ }
+
+ @Test
+ public void testIsPassthroughExpression() throws Exception
+ {
+ startViewRequest("/search1.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+ SearchExpressionContext searchContext =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, null);
+ SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:3:nested:1:nestedText"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:3:baseText"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:0:baseText"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:3:nested:0:nestedText"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:3:nested"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:table:1:nested:0:nestedText"));
+
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@this"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@this:@parent:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@parent:showName:@parent:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@form"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@form:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@namingcontainer:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@previous"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@next"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@parent:@id(msgName)"));
+
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@whoNows"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "@parent:@whoNows"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "mainForm:@whoNows"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContext, "!whoNows"));
+
+ Set<SearchExpressionHint> expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.RESOLVE_AJAX);
+ SearchExpressionContext searchContextWithAjaxResolve =
+ SearchExpressionContext.createSearchExpressionContext(facesContext, null, expressionHints, null);
+
+ Assert.assertTrue(handler.isPassthroughExpression(searchContextWithAjaxResolve, "@form"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContextWithAjaxResolve, "@form:showName"));
+ Assert.assertFalse(handler.isPassthroughExpression(searchContextWithAjaxResolve, "@form:@child(0)"));
+ }
+
+ @Test
+ public void testCompositeComponentExpression() throws Exception
+ {
+ startViewRequest("/testCompositeActionSource.xhtml");
+ processLifecycleExecute();
+ executeBeforeRender();
+ executeBuildViewCycle();
+
+
+ }
+
+}
Modified: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlLabelRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlLabelRendererTest.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlLabelRendererTest.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlLabelRendererTest.java Wed Nov 23 01:36:27 2016
@@ -20,34 +20,51 @@ package org.apache.myfaces.renderkit.htm
import java.io.IOException;
import java.io.StringWriter;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.component.html.HtmlOutputLabel;
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.apache.myfaces.application.ApplicationImpl;
+import org.apache.myfaces.application.ApplicationImplJsfTest;
-import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMockTestCase;
import org.apache.myfaces.test.mock.MockRenderKitFactory;
import org.apache.myfaces.test.mock.MockResponseWriter;
import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
import org.apache.myfaces.test.utils.HtmlRenderedAttr;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
-public class HtmlLabelRendererTest extends AbstractJsfTestCase
+public class HtmlLabelRendererTest extends AbstractJsfConfigurableMockTestCase
{
private MockResponseWriter writer;
private HtmlOutputLabel label;
- public HtmlLabelRendererTest(String name)
+ public HtmlLabelRendererTest()
{
- super(name);
}
- public static Test suite() {
- return new TestSuite(HtmlLabelRendererTest.class);
+ @Override
+ protected void setFactories() throws Exception
+ {
+ super.setFactories();
+
+ FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+ "org.apache.myfaces.view.facelets.mock.MockViewDeclarationLanguageFactory");
+ FactoryFinder.setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
+ "org.apache.myfaces.view.facelets.impl.FaceletCacheFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.SEARCH_EXPRESSION_CONTEXT_FACTORY,
+ "org.apache.myfaces.component.search.SearchExpressionContextFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
+ "org.apache.myfaces.application.ApplicationFactoryImpl");
}
public void setUp() throws Exception {
+
super.setUp();
label = new HtmlOutputLabel();
writer = new MockResponseWriter(new StringWriter(), null, null);
@@ -59,6 +76,11 @@ public class HtmlLabelRendererTest exten
label.getRendererType(),
new HtmlLabelRenderer());
facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
+
+
+ //Application _testApplication = new ApplicationImplJsfTest.TestApplicationWrapper(new ApplicationImpl());
+ //facesContext.setApplication(_testApplication);
+ //facesContext.getApplication().setSearchExpressionHandler(new SearchExpressionHandlerImpl());
}
public void tearDown() throws Exception {
@@ -67,6 +89,7 @@ public class HtmlLabelRendererTest exten
label = null;
}
+ @Test
public void testHtmlPropertyPassTru() throws Exception
{
HtmlRenderedAttr[] attrs = {
@@ -115,6 +138,7 @@ public class HtmlLabelRendererTest exten
return ((StringWriter) writer.getWriter()).toString();
}
+ @Test
public void testEscapeUntouched() throws IOException
{
label.setId("labelId");
@@ -127,6 +151,7 @@ public class HtmlLabelRendererTest exten
assertEquals("<label id=\"labelId\"><span class="required">field label</span></label>", page);
}
+ @Test
public void testEscapeSetToFalse() throws IOException
{
label.setId("labelId");
@@ -143,6 +168,7 @@ public class HtmlLabelRendererTest exten
/**
* Components that render client behaviors should always render "id" and "name" attribute
*/
+ @Test
public void testClientBehaviorHolderRendersIdAndName()
{
label.addClientBehavior("keypress", new AjaxBehavior());
Modified: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessageRendererTest.java Wed Nov 23 01:36:27 2016
@@ -19,22 +19,22 @@
package org.apache.myfaces.renderkit.html;
import java.io.StringWriter;
+import javax.faces.FactoryFinder;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlMessage;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
import org.apache.myfaces.test.utils.HtmlRenderedAttr;
-import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMockTestCase;
import org.apache.myfaces.test.mock.MockRenderKitFactory;
import org.apache.myfaces.test.mock.MockResponseWriter;
+import static org.junit.Assert.fail;
+import org.junit.Test;
-public class HtmlMessageRendererTest extends AbstractJsfTestCase
+public class HtmlMessageRendererTest extends AbstractJsfConfigurableMockTestCase
{
private static final String ERROR_CLASS = "errorClass";
private static final String WARN_CLASS = "warnClass";
@@ -45,13 +45,24 @@ public class HtmlMessageRendererTest ext
private HtmlForm form;
private HtmlInputText inputText;
- public HtmlMessageRendererTest(String name)
+ public HtmlMessageRendererTest()
{
- super(name);
+
}
- public static Test suite() {
- return new TestSuite(HtmlMessageRendererTest.class);
+ @Override
+ protected void setFactories() throws Exception
+ {
+ super.setFactories();
+
+ FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+ "org.apache.myfaces.view.facelets.mock.MockViewDeclarationLanguageFactory");
+ FactoryFinder.setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
+ "org.apache.myfaces.view.facelets.impl.FaceletCacheFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.SEARCH_EXPRESSION_CONTEXT_FACTORY,
+ "org.apache.myfaces.component.search.SearchExpressionContextFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
+ "org.apache.myfaces.application.ApplicationFactoryImpl");
}
public void setUp() throws Exception
@@ -94,7 +105,8 @@ public class HtmlMessageRendererTest ext
{
super.tearDown();
}
-
+
+ @Test
public void testHtmlPropertyPassTru() throws Exception
{
HtmlRenderedAttr[] attrs = {
@@ -136,6 +148,7 @@ public class HtmlMessageRendererTest ext
}
}
+ @Test
public void testRenderSpanOnlyWhenNecessary() throws Exception
{
facesContext.addMessage(inputText.getClientId(), new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
@@ -146,6 +159,7 @@ public class HtmlMessageRendererTest ext
System.out.println(output);
}
+ @Test
public void testHtmlPropertyPassTruNotRendered() throws Exception
{
HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
Modified: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlMessagesRendererTest.java Wed Nov 23 01:36:27 2016
@@ -19,24 +19,25 @@
package org.apache.myfaces.renderkit.html;
import java.io.StringWriter;
+import javax.faces.FactoryFinder;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlMessages;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
import org.apache.myfaces.test.utils.HtmlRenderedAttr;
-import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMockTestCase;
import org.apache.myfaces.test.mock.MockRenderKitFactory;
import org.apache.myfaces.test.mock.MockResponseWriter;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
/**
* @author Bruno Aranda (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class HtmlMessagesRendererTest extends AbstractJsfTestCase
+public class HtmlMessagesRendererTest extends AbstractJsfConfigurableMockTestCase
{
private static final String ERROR_CLASS = "errorClass";
private static final String WARN_CLASS = "warnClass";
@@ -45,13 +46,23 @@ public class HtmlMessagesRendererTest ex
private HtmlMessages messages;
private MockResponseWriter writer;
- public HtmlMessagesRendererTest(String name)
+ public HtmlMessagesRendererTest()
{
- super(name);
}
- public static Test suite() {
- return new TestSuite(HtmlMessagesRendererTest.class);
+ @Override
+ protected void setFactories() throws Exception
+ {
+ super.setFactories();
+
+ FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+ "org.apache.myfaces.view.facelets.mock.MockViewDeclarationLanguageFactory");
+ FactoryFinder.setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
+ "org.apache.myfaces.view.facelets.impl.FaceletCacheFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.SEARCH_EXPRESSION_CONTEXT_FACTORY,
+ "org.apache.myfaces.component.search.SearchExpressionContextFactoryImpl");
+ FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
+ "org.apache.myfaces.application.ApplicationFactoryImpl");
}
public void setUp() throws Exception
@@ -77,7 +88,8 @@ public class HtmlMessagesRendererTest ex
messages = null;
writer = null;
}
-
+
+ @Test
public void testHtmlPropertyPassTru() throws Exception
{
HtmlRenderedAttr[] attrs = {
@@ -119,6 +131,7 @@ public class HtmlMessagesRendererTest ex
}
}
+ @Test
public void testRenderSpanOnlyWhenNecessary1() throws Exception
{
facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
@@ -129,6 +142,7 @@ public class HtmlMessagesRendererTest ex
assertTrue(!output.contains("span"));
}
+ @Test
public void testRenderSpanOnlyWhenNecessary2() throws Exception
{
facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
@@ -140,6 +154,7 @@ public class HtmlMessagesRendererTest ex
assertTrue(!output.contains("span"));
}
+ @Test
public void testRenderSpanOnlyWhenNecessary3() throws Exception
{
facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
@@ -155,6 +170,7 @@ public class HtmlMessagesRendererTest ex
* It should output the class on li
* @throws Exception
*/
+ @Test
public void testRenderSpanOnlyWhenNecessary4() throws Exception
{
facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
@@ -172,6 +188,7 @@ public class HtmlMessagesRendererTest ex
* It should output the class on td
* @throws Exception
*/
+ @Test
public void testRenderSpanOnlyWhenNecessary5() throws Exception
{
facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
@@ -186,6 +203,7 @@ public class HtmlMessagesRendererTest ex
assertTrue(!output.contains("span"));
}
+ @Test
public void testHtmlPropertyPassTruNotRendered() throws Exception
{
HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
Modified: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/view/facelets/FaceletTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/view/facelets/FaceletTestCase.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/view/facelets/FaceletTestCase.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/view/facelets/FaceletTestCase.java Wed Nov 23 01:36:27 2016
@@ -40,6 +40,7 @@ import javax.faces.render.RenderKitFacto
import org.apache.myfaces.application.ApplicationFactoryImpl;
import org.apache.myfaces.application.ViewHandlerImpl;
+import org.apache.myfaces.component.search.SearchExpressionContextFactoryImpl;
import org.apache.myfaces.config.FacesConfigDispenser;
import org.apache.myfaces.config.FacesConfigUnmarshaller;
import org.apache.myfaces.config.RuntimeConfig;
@@ -156,6 +157,8 @@ public abstract class FaceletTestCase ex
MockVisitContextFactory.class.getName());
FactoryFinder.setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
FaceletCacheFactoryImpl.class.getName());
+ FactoryFinder.setFactory(FactoryFinder.SEARCH_EXPRESSION_CONTEXT_FACTORY,
+ SearchExpressionContextFactoryImpl.class.getName());
}
@Override
Copied: myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/resources/testComposite/compositeActionSource.xhtml (from r1757774, myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeActionSource.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/resources/testComposite/compositeActionSource.xhtml?p2=myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/resources/testComposite/compositeActionSource.xhtml&p1=myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeActionSource.xhtml&r1=1757774&r2=1770904&rev=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeActionSource.xhtml (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/resources/testComposite/compositeActionSource.xhtml Wed Nov 23 01:36:27 2016
@@ -23,12 +23,14 @@
</head>
<body>
<composite:interface>
- <composite:actionSource name="button2" targets="button3"/>
+ <composite:actionSource name="button2" targets="@child(0):button3"/>
</composite:interface>
<composite:implementation>
-<testComposite:simpleActionSource id="button3" >
- <f:actionListener for="button" binding="#{helloWorldBean.actionListener}"/>
-</testComposite:simpleActionSource>
+<h:panelGroup id="panel">
+ <testComposite:simpleActionSource id="button3" >
+ <f:actionListener for="button" binding="#{helloWorldBean.actionListener}"/>
+ </testComposite:simpleActionSource>
+</h:panelGroup>
</composite:implementation>
</body>
</html>
\ No newline at end of file
Copied: myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/search1.xhtml (from r1757774, myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/application/flow/flow1_1.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/search1.xhtml?p2=myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/search1.xhtml&p1=myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/application/flow/flow1_1.xhtml&r1=1757774&r2=1770904&rev=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/application/flow/flow1_1.xhtml (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/resources/org/apache/myfaces/component/search/search1.xhtml Wed Nov 23 01:36:27 2016
@@ -27,7 +27,27 @@
<h:body>
<h:panelGrid columns="1">
<h:form id="mainForm">
- <h:commandButton id="startFlow1" action="flow1" value="Start Flow 1"/>
+
+ <h:outputLabel id="labelName" for="name" value="Name: "/>
+ <h:inputText id="name" value="NAME"/>
+ <h:message id="msgName" for="name"/>
+
+ <h:outputText id="showName" value="showName"/>
+
+ <h:dataTable id="table" value="#{searchBean.model}" var="row">
+ <h:column>
+ <h:outputText id="baseText" value="#{row.text}"/>
+ <h:outputText id="nestedText"/>
+ <h:dataTable id="nested" value="#{row.nested}" var="item">
+ <h:column>
+ <h:outputText id="nestedText" value="#{item}"/>
+ <h:outputText id="baseText"/>
+ <h:commandButton id="nestedButton" value="Press Me!"/>
+ </h:column>
+ </h:dataTable>
+ </h:column>
+ </h:dataTable>
+
</h:form>
</h:panelGrid>
</h:body>
Modified: myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java (original)
+++ myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessageRendererBase.java Wed Nov 23 01:36:27 2016
@@ -19,9 +19,11 @@
package org.apache.myfaces.shared.renderkit.html;
import java.io.IOException;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
@@ -31,6 +33,9 @@ import javax.faces.component.UIViewRoot;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorHolder;
import javax.faces.component.html.HtmlMessage;
+import javax.faces.component.search.SearchExpressionContext;
+import javax.faces.component.search.SearchExpressionHandler;
+import javax.faces.component.search.SearchExpressionHint;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -82,8 +87,26 @@ public abstract class HtmlMessageRendere
return;
}
- UIComponent forComponent = message.findComponent(forAttr);
- if (forComponent == null)
+ //UIComponent forComponent = message.findComponent(forAttr);
+ //UIComponent forComponent = message.findComponent(forAttr);
+ //if (forComponent == null)
+ //{
+ // log.severe("Could not render Message. Unable to find component '"
+ // + forAttr + "' (calling findComponent on component '"
+ // + message.getClientId(facesContext)
+ // + "'). If the provided id was correct, wrap the message and its "
+ // + "component into an h:panelGroup or h:panelGrid.");
+ // return;
+ //}
+
+ //String clientId = forComponent.getClientId(facesContext);
+ SearchExpressionHandler searchExpressionHandler = facesContext.getApplication().getSearchExpressionHandler();
+ Set<SearchExpressionHint> expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.IGNORE_NO_RESULT);
+ String clientId = searchExpressionHandler.resolveClientId(
+ SearchExpressionContext.createSearchExpressionContext(
+ facesContext, message, expressionHints, null), forAttr);
+ if (clientId == null)
{
log.severe("Could not render Message. Unable to find component '"
+ forAttr + "' (calling findComponent on component '"
@@ -93,8 +116,6 @@ public abstract class HtmlMessageRendere
return;
}
- String clientId = forComponent.getClientId(facesContext);
-
Iterator<FacesMessage> messageIterator = facesContext.getMessages(clientId);
if (!messageIterator.hasNext())
{
Modified: myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java?rev=1770904&r1=1770903&r2=1770904&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java (original)
+++ myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlMessagesRendererBase.java Wed Nov 23 01:36:27 2016
@@ -19,10 +19,12 @@
package org.apache.myfaces.shared.renderkit.html;
import java.io.IOException;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -33,6 +35,9 @@ import javax.faces.component.UIViewRoot;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorHolder;
import javax.faces.component.html.HtmlMessages;
+import javax.faces.component.search.SearchExpressionContext;
+import javax.faces.component.search.SearchExpressionHandler;
+import javax.faces.component.search.SearchExpressionHint;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -70,9 +75,11 @@ public abstract class HtmlMessagesRender
{
// check the for attribute
String forAttr = getFor(messages);
- UIComponent forComponent = null;
+ //UIComponent forComponent = null;
+ String clientId = null;
if(forAttr != null && !"".equals(forAttr))
{
+ /*
forComponent = messages.findComponent(forAttr);
if (forComponent == null)
{
@@ -82,11 +89,27 @@ public abstract class HtmlMessagesRender
+ "'). If the provided id was correct, wrap the message and its "
+ "component into an h:panelGroup or h:panelGrid.");
return;
+ }*/
+ SearchExpressionHandler searchExpressionHandler =
+ facesContext.getApplication().getSearchExpressionHandler();
+ Set<SearchExpressionHint> expressionHints = new HashSet<SearchExpressionHint>();
+ expressionHints.add(SearchExpressionHint.IGNORE_NO_RESULT);
+ clientId = searchExpressionHandler.resolveClientId(
+ SearchExpressionContext.createSearchExpressionContext(
+ facesContext, messages, expressionHints, null), forAttr);
+ if (clientId == null)
+ {
+ log.severe("Could not render Message. Unable to find component '"
+ + forAttr + "' (calling findComponent on component '"
+ + clientId
+ + "'). If the provided id was correct, wrap the message and its "
+ + "component into an h:panelGroup or h:panelGrid.");
+ return;
}
}
MessagesIterator messagesIterator = new MessagesIterator(facesContext,
- isGlobalOnly(messages), isRedisplay(messages), forComponent);
+ isGlobalOnly(messages), isRedisplay(messages), clientId);
if (messagesIterator.hasNext())
{
@@ -472,13 +495,13 @@ public abstract class HtmlMessagesRender
private Object _next;
public MessagesIterator(FacesContext facesContext, boolean globalOnly, boolean redisplay,
- UIComponent forComponent)
+ String clientId)
{
_facesContext = facesContext;
// The for attribute is mutually exclusive with globalOnly and take precedence if used.
- if(forComponent != null)
+ if(clientId != null)
{
- _clientId = forComponent.getClientId(facesContext);
+ _clientId = clientId;
_componentMessagesIterator = facesContext.getMessages(_clientId);
_globalMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();
_clientIdsWithMessagesIterator = org.apache.myfaces.shared.util.NullIterator.instance();