package org.primefaces.expression; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.FacesException; import javax.faces.component.UICommand; import javax.faces.component.UIComponent; import javax.faces.component.UIForm; import javax.faces.component.UINamingContainer; import javax.faces.component.UIOutput; import javax.faces.component.UIPanel; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.primefaces.expression.SearchExpressionFacade; public class SearchExpressionFacadeTest { @Before public void setup() { Map<Object, Object> attributes = new HashMap<Object, Object>(); attributes.put(UINamingContainer.SEPARATOR_CHAR_PARAM_NAME, ':'); FacesContext context = new FacesContextMock(attributes); context.setViewRoot(new UIViewRoot()); } private UIComponent resolveComponent(UIComponent source, String expression) { FacesContext context = FacesContext.getCurrentInstance(); return SearchExpressionFacade.resolveComponent(context, source, expression); } private UIComponent resolveComponent(UIComponent source, String expression, int options) { FacesContext context = FacesContext.getCurrentInstance(); return SearchExpressionFacade.resolveComponent(context, source, expression, options); } private String resolveComponentForClient(UIComponent source, String expression) { FacesContext context = FacesContext.getCurrentInstance(); return SearchExpressionFacade.resolveComponentForClient(context, source, expression); } private List<UIComponent> resolveComponents(UIComponent source, String expression) { FacesContext context = FacesContext.getCurrentInstance(); return SearchExpressionFacade.resolveComponents(context, source, expression); } private String resolveComponentsForClient(UIComponent source, String expression) { FacesContext context = FacesContext.getCurrentInstance(); return SearchExpressionFacade.resolveComponentsForClient(context, source, expression); } @Test public void resolveComponent_Parent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", innerContainer, resolveComponent(source, "@parent")); } @Test public void resolveComponent_ParentParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", outerContainer, resolveComponent(source, "@parent:@parent")); } @Test public void resolveComponent_Form() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", form, resolveComponent(source, "@form")); } @Test public void resolveComponent_FormParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", root, resolveComponent(source, "@form:@parent")); } @Test public void resolveComponent_All() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", root, resolveComponent(source, "@all")); } @Test public void resolveComponent_This() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", source, resolveComponent(source, "@this")); } @Test public void resolveComponent_ThisParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", innerContainer, resolveComponent(source, "@this:@parent")); } @Test public void resolveComponent_Namingcontainer() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", innerContainer, resolveComponent(source, "@namingcontainer")); } @Test public void resolveComponent_NamingcontainerNamingcontainer() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", outerContainer, resolveComponent(source, "@namingcontainer:@namingcontainer")); } @Test public void resolveComponent_NamingcontainerParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertSame("Failed", outerContainer, resolveComponent(source, "@namingcontainer:@parent")); } @Test public void resolveComponent_None() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", null, resolveComponent(source, "@none")); } @Test public void resolveComponent_Absolute() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertSame("Failed", source, resolveComponent(source, " :form:outerContainer:innerContainer:source ")); } @Test public void resolveComponent_Relative() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertSame("Failed", component, resolveComponent(source, " other ")); } @Test public void resolveComponent_AbsoluteForm() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertSame("Failed", root, resolveComponent(source, " :form:@parent ")); } @Test public void resolveComponent_ParentChild() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertSame("Failed", component, resolveComponent(source, " @parent:@child(0) ")); assertSame("Failed", source, resolveComponent(source, " @parent:@child(1) ")); } @Test public void resolveComponentForClient_ParentChild() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other", resolveComponentForClient(source, " @parent:@child(0) ")); assertEquals("Failed", "form:outerContainer:innerContainer:source", resolveComponentForClient(source, " @parent:@child(1) ")); } @Test public void resolveComponent_AbsoluteNamingcontainer() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertSame("Failed", form, resolveComponent(source, " :form:outerContainer:@namingcontainer ")); } @Test public void resolveComponent_AbsoluteNamingcontainerParent() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", root, resolveComponent(source, " :form:outerContainer:@namingcontainer:@parent ")); } @Test public void resolveComponentForClient_None() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "@none", resolveComponentForClient(source, " @none")); } @Test public void resolveComponentForClient_PFS() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "@(.myClass, div)", resolveComponentForClient(source, "@(.myClass, div) ")); } @Test public void resolveComponentForClient_All() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "@all", resolveComponentForClient(source, "@all")); } @Test public void resolveComponentForClient_WidgetVar() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "@widgetVar(myDialog_widget)", resolveComponentForClient(source, " @widgetVar(myDialog_widget)")); } @Test public void resolveComponent_NotNestablePasstrough() { UIComponent source = new UICommand(); source.setId("source"); try { resolveComponent(source, " @widgetVar(myForm:myDiv):asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } try { resolveComponent(source, " @none:@all:asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponentForClient_NotNestablePasstrough() { UIComponent source = new UICommand(); source.setId("source"); try { resolveComponentForClient(source, " @widgetVar(myForm:myDiv):asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } try { resolveComponentForClient(source, " @none:@all:asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponentForClient_Parent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer", resolveComponentForClient(source, " @parent ")); } @Test public void resolveComponentForClient_This() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:source", resolveComponentForClient(source, " @this ")); } @Test public void resolveComponentForClient_Namingcontainer() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer", resolveComponentForClient(source, " @namingcontainer ")); } @Test public void resolveComponentForClient_Form() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form", resolveComponentForClient(source, " @form ")); } @Test public void resolveComponentForClient_Root() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); innerContainer.getChildren().add(source); assertEquals("Failed", "form", resolveComponentForClient(source, " :form ")); } @Test public void resolveComponentForClient_Absolute() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:source", resolveComponentForClient(source, " :form:outerContainer:innerContainer:source ")); } @Test public void resolveComponentForClient_Relative() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other", resolveComponentForClient(source, " other ")); } @Test public void resolveComponentForClient_AbsoluteForm() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "root", resolveComponentForClient(source, " :form:@parent ")); } @Test public void resolveComponentForClient_AbsoluteNamingcontainer() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form", resolveComponentForClient(source, " :form:outerContainer:@namingcontainer ")); } @Test public void resolveComponentForClient_AbsoluteNamingcontainerParent() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "root", resolveComponentForClient(source, " :form:outerContainer:@namingcontainer:@parent ")); } @Test public void resolveComponent_AbsoluteKeywordStart() { UIComponent source = new UICommand(); source.setId("source"); try { resolveComponent(source, " :@form:asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponentForClient_AbsoluteKeywordStart() { UIComponent source = new UICommand(); source.setId("source"); try { resolveComponentForClient(source, " :@form:asd"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponentsForClient_RelativeAndParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other form:outerContainer:innerContainer", resolveComponentsForClient(source, " other @parent")); } @Test public void resolveComponentsForClient_RelativeAndParentParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other form:outerContainer", resolveComponentsForClient(source, " other @parent:@parent")); } @Test public void resolveComponentsForClient_RelativeAndThisParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other form:outerContainer:innerContainer", resolveComponentsForClient(source, " other @this:@parent")); } @Test public void resolveComponentsForClient_RelativeAndPFSAndWidgetVarAndFormParent() { UIComponent root = new UIPanel(); root.setId("root"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); assertEquals("Failed", "form:outerContainer:innerContainer:other @(.myClass, .myClass2) @widgetVar(test) root @(.myClass :not:(select))", resolveComponentsForClient(source, " other,@(.myClass, .myClass2) @widgetVar(test),@form:@parent @(.myClass :not:(select))")); } @Test public void resolveComponents_RelativeAndParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); List<UIComponent> resolvedComponents = resolveComponents(source, " other @parent"); assertTrue("Failed", resolvedComponents.contains(component)); assertTrue("Failed", resolvedComponents.contains(innerContainer)); assertEquals("Failed", 2, resolvedComponents.size()); } @Test public void resolveComponents_RelativeAndParentParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); List<UIComponent> resolvedComponents = resolveComponents(source, " other @parent:@parent "); assertTrue("Failed", resolvedComponents.contains(component)); assertTrue("Failed", resolvedComponents.contains(outerContainer)); assertEquals("Failed", 2, resolvedComponents.size()); } @Test public void resolveComponents_RelativeAndThisParent() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); UINamingContainer outerContainer = new UINamingContainer(); outerContainer.setId("outerContainer"); form.getChildren().add(outerContainer); UINamingContainer innerContainer = new UINamingContainer(); innerContainer.setId("innerContainer"); outerContainer.getChildren().add(innerContainer); UIComponent component = new UIOutput(); component.setId("other"); innerContainer.getChildren().add(component); UIComponent source = new UICommand(); source.setId("source"); innerContainer.getChildren().add(source); List<UIComponent> resolvedComponents = resolveComponents(source, " other,@this:@parent "); assertTrue("Failed", resolvedComponents.contains(component)); assertTrue("Failed", resolvedComponents.contains(innerContainer)); assertEquals("Failed", 2, resolvedComponents.size()); } @Test public void resolveComponentsForClient_PFSNestedParenthese() { UIComponent source = new UICommand(); source.setId("source"); assertEquals("@(.ui-panel :input:not(select)) @widgetVar(test)", resolveComponentsForClient(source, " @(.ui-panel :input:not(select)),@widgetVar(test) ")); } @Test public void resolveComponentsForClient_PFSMultipleIds() { UIComponent source = new UICommand(); source.setId("source"); assertEquals("source @(.ui-panel :input:not(select), #myPanel, #myPanel2) @(myId3) source", resolveComponentsForClient(source, " @this,@(.ui-panel :input:not(select), #myPanel, #myPanel2) @(myId3),@this")); } @Test public void resolveComponentForClient_NonCombineableAllAndNone() { UIComponent source = new UICommand(); source.setId("source"); try { resolveComponentsForClient(source, " :@form:asd @none @all "); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponentWithParentFallback() { UIComponent root = new UIPanel(); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); assertEquals( root, SearchExpressionFacade.resolveComponent( FacesContext.getCurrentInstance(), form, null, SearchExpressionFacade.PARENT_FALLBACK)); assertEquals( root, SearchExpressionFacade.resolveComponent( FacesContext.getCurrentInstance(), form, " ", SearchExpressionFacade.PARENT_FALLBACK)); } @Test public void resolveComponentsForClientWithParentFallback() { UIComponent root = new UIPanel(); root.setId("test"); UIForm form = new UIForm(); form.setId("form"); root.getChildren().add(form); assertEquals( "test", SearchExpressionFacade.resolveComponentsForClient( FacesContext.getCurrentInstance(), form, null, SearchExpressionFacade.PARENT_FALLBACK)); assertEquals( "test", SearchExpressionFacade.resolveComponentsForClient( FacesContext.getCurrentInstance(), form, " ", SearchExpressionFacade.PARENT_FALLBACK)); } @Test public void resolveComponent_Next() { UIComponent root = new UIPanel(); root.setId("root"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); UIComponent command3 = new UICommand(); command3.setId("command3"); root.getChildren().add(command3); assertSame("Failed", command2, resolveComponent(command1, " @next ")); assertSame("Failed", command3, resolveComponent(command2, " @next ")); try { resolveComponent(command3, " @next"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponent_NextNext() { UIComponent root = new UIPanel(); root.setId("root"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); UIComponent command3 = new UICommand(); command3.setId("command3"); root.getChildren().add(command3); assertSame("Failed", command3, resolveComponent(command1, " @next:@next ")); try { resolveComponent(command2, " @next:@next"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } try { resolveComponent(command3, " @next:@next"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponent_Previous() { UIComponent root = new UIPanel(); root.setId("root"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); UIComponent command3 = new UICommand(); command3.setId("command3"); root.getChildren().add(command3); assertSame("Failed", command1, resolveComponent(command2, " @previous ")); assertSame("Failed", command2, resolveComponent(command3, " @previous ")); try { resolveComponent(command1, " @previous"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponent_PreviousPrevious() { UIComponent root = new UIPanel(); root.setId("root"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); UIComponent command3 = new UICommand(); command3.setId("command3"); root.getChildren().add(command3); assertSame("Failed", command1, resolveComponent(command3, " @previous:@previous ")); try { resolveComponent(command2, " @previous:@previous"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } try { resolveComponent(command1, " @previous:@previous"); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponent_FormChildNextNext() { UIForm root = new UIForm(); root.setId("form"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); UIComponent command3 = new UICommand(); command3.setId("command3"); root.getChildren().add(command3); assertSame("Failed", command3, resolveComponent(command1, " @form:@child(0):@next:@next ")); } @Test public void resolveComponent_NoResult() { UIForm root = new UIForm(); root.setId("form"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); try { assertSame("Failed", root, resolveComponent(command1, " command1:@parent:command3 ")); Assert.fail("This should actually raise an exception"); } catch (Exception e) { assertEquals(FacesException.class, e.getClass()); } } @Test public void resolveComponent_IgnoreNoResult() { UIForm root = new UIForm(); root.setId("form"); UIComponent command1 = new UICommand(); command1.setId("command1"); root.getChildren().add(command1); UIComponent command2 = new UICommand(); command2.setId("command2"); root.getChildren().add(command2); assertSame("Failed", null, resolveComponent(command1, " command3 ", SearchExpressionFacade.IGNORE_NO_RESULT)); } }