/* * JBoss, Home of Professional Open Source * Copyright ${year}, Red Hat, Inc. and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.richfaces.component; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.faces.component.UIComponent; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import org.jboss.test.faces.AbstractFacesTest; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.ajax4jsf.model.DataVisitor; import org.ajax4jsf.model.ExtendedDataModel; import org.ajax4jsf.model.Range; import org.richfaces.model.Arrangeable; import org.richfaces.model.ArrangeableState; import org.richfaces.model.FilterField; import org.richfaces.model.SortField; import org.richfaces.model.SortMode; /** * @author Konstantin Mishin * */ public class UIDataTableTest extends AbstractFacesTest { private class MockArrangeableModel extends ExtendedDataModel<Object> implements Arrangeable { private ArrangeableState state; @Override public Object getRowKey() { return null; } @Override public void setRowKey(Object key) { } @Override public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) { } @Override public int getRowCount() { return 0; } @Override public Object getRowData() { return null; } @Override public int getRowIndex() { return 0; } @Override public Object getWrappedData() { return null; } @Override public boolean isRowAvailable() { return false; } @Override public void setRowIndex(int rowIndex) { } @Override public void setWrappedData(Object data) { } public void arrange(FacesContext context, ArrangeableState state) { this.state = state; } public ArrangeableState getState() { return state; } } private UIDataTable table = null; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { super.setUp(); setupFacesRequest(); table = new UIDataTable(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { table = null; super.tearDown(); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getRendersChildren()}. */ @Test public void testGetRendersChildren() { Assert.assertTrue(table.getRendersChildren()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#dataChildren()}. */ @Test public void testDataChildren() { Assert.assertTrue(table.dataChildren() instanceof DataTableDataChildrenIterator); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#fixedChildren()}. */ @Test public void testFixedChildren() { Assert.assertTrue(table.fixedChildren() instanceof DataTableFixedChildrenIterator); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#createExtendedDataModel()}. */ @Test public void testCreateExtendedDataModel() { Assert.assertFalse(table.createExtendedDataModel() instanceof Arrangeable); List<Object> sortPriority = Arrays.<Object>asList("id2", "id0", "id1"); List<UIComponent> children = table.getChildren(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ELContext elContext = facesContext.getELContext(); UIColumn column = new UIColumn(); column.setRendered(false); children.add(column); for (int i = 0; i < sortPriority.size(); i++) { UIColumn child = new UIColumn(); child.setId("id" + i); child.setValueExpression("filterExpression", expressionFactory.createValueExpression(elContext, "#{'id" + i + "'}", Object.class)); child.setValueExpression("sortBy", expressionFactory.createValueExpression(elContext, "#{'id" + i + "'}", Object.class)); child.setSortOrder(SortOrder.ascending); children.add(child); } Assert.assertTrue(table.createExtendedDataModel() instanceof Arrangeable); MockArrangeableModel model = new MockArrangeableModel(); table.setValue(model); table.setSortPriority(sortPriority); Assert.assertSame(model, table.createExtendedDataModel()); ArrangeableState state = model.getState(); List<FilterField> filterFields = state.getFilterFields(); for (int i = 0; i < sortPriority.size(); i++) { Assert.assertEquals("id" + i, filterFields.get(i).getFilterExpression().getValue(elContext)); } List<SortField> sortFields = state.getSortFields(); for (int i = 0; i < sortPriority.size(); i++) { Assert.assertEquals(sortPriority.get(i), sortFields.get(i).getSortBy().getValue(elContext)); } Assert.assertEquals(facesContext.getViewRoot().getLocale(), state.getLocale()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#columns()}. */ @Test public void testColumns() { Assert.assertTrue(table.columns() instanceof DataTableColumnsIterator); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getHeader()}. */ @Test public void testGetHeader() { UIOutput component = new UIOutput(); table.getFacets().put("header", component); Assert.assertSame(component, table.getHeader()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getFooter()}. */ @Test public void testGetFooter() { UIOutput component = new UIOutput(); table.getFacets().put("footer", component); Assert.assertSame(component, table.getFooter()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getFilterVar()} and * {@link org.richfaces.component.UIDataTableBase#setFilterVar(java.lang.String)}. */ @Test public void testFilterVar() { String string = "fv"; table.setFilterVar(string); Assert.assertEquals(string, table.getFilterVar()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getSortPriority()} and * {@link org.richfaces.component.UIDataTableBase#setSortPriority(java.util.Collection)}. */ @Test public void testSortPriority() { table.setSortPriority(Collections.emptyList()); Assert.assertEquals(0, table.getSortPriority().size()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#getSortMode()} and * {@link org.richfaces.component.UIDataTableBase#setSortMode(org.richfaces.model.SortMode)}. */ @Test public void testSortMode() { table.setSortMode(SortMode.multi); Assert.assertEquals(SortMode.multi, table.getSortMode()); } /** * Test method for {@link org.richfaces.component.UIDataTableBase#isColumnFacetPresent(java.lang.String)}. */ @Test public void testIsColumnFacetPresent() { String facetName = "header"; Assert.assertFalse(table.isColumnFacetPresent(facetName)); UIColumn child = new UIColumn(); List<UIComponent> children = table.getChildren(); children.add(new UIColumn()); children.add(child); Assert.assertFalse(table.isColumnFacetPresent(facetName)); child.getFacets().put(facetName, new UIOutput()); Assert.assertTrue(table.isColumnFacetPresent(facetName)); child.setRendered(false); Assert.assertFalse(table.isColumnFacetPresent(facetName)); } }