package org.richfaces.component.util; import java.util.Iterator; import java.util.List; import javax.faces.component.UIParameter; import javax.faces.component.UISelectItem; import javax.faces.component.UISelectOne; import javax.faces.model.SelectItem; import org.jboss.test.faces.AbstractFacesTest; import org.junit.Assert; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; /** * @author Gleb Galkin * @since 27.01.11 */ public class SelectUtilsTest extends AbstractFacesTest { @Override public void setUp() throws Exception { super.setUp(); setupFacesRequest(); } @Override public void tearDown() throws Exception { super.tearDown(); } private static <T> List<T> asList(Iterator<T> itr) { List<T> result = Lists.newArrayList(); Iterators.addAll(result, itr); return result; } /** * The aim of this test is to check first part of {@link SelectUtils#getSelectItems}, for {@link UISelectOne} */ public void testGetSelectItem() { UISelectOne selectOne = new UISelectOne(); selectOne.getChildren().add(new UISelectItemStub("value1", "label1", "description1", false, false, false)); selectOne.getChildren().add(new UISelectItemStub("value2", "label2", "description2", false, true, true)); UISelectItem item = new UISelectItem(); item.setValue(new SelectItem("value3", "label3", "description3", true, true, true)); selectOne.getChildren().add(item); // non select item at end UIParameter param = new UIParameter(); param.setName("param"); param.setValue("paramValue"); selectOne.getChildren().add(param); checkSelectItems(asList(SelectUtils.getSelectItems(facesContext, selectOne))); // non select item in middle selectOne = new UISelectOne(); selectOne.getChildren().add(new UISelectItemStub("value1", "label1", "description1", false, false, false)); selectOne.getChildren().add(param); selectOne.getChildren().add(new UISelectItemStub("value2", "label2", "description2", false, true, true)); checkTwoSelectItems(asList(SelectUtils.getSelectItems(facesContext, selectOne))); // non select item as value cause IllegalArgumentException item = new UISelectItem(); item.setValue(new UISelectItem()); selectOne.getChildren().add(item); try { SelectUtils.getSelectItems(facesContext, selectOne); } catch (Exception e) { if (!(e instanceof IllegalArgumentException)) { Assert.fail("Non select item as value should cause IllegalArgumentException"); } } } private void checkSelectItems(List<SelectItem> selectItems) { checkTwoSelectItems(selectItems); Assert.assertNotNull(selectItems.get(2)); Assert.assertEquals("value3", selectItems.get(2).getValue()); Assert.assertEquals("label3", selectItems.get(2).getLabel()); Assert.assertEquals("description3", selectItems.get(2).getDescription()); Assert.assertEquals(true, selectItems.get(2).isDisabled()); Assert.assertEquals(true, selectItems.get(2).isEscape()); Assert.assertEquals(true, selectItems.get(2).isNoSelectionOption()); } private void checkTwoSelectItems(List<SelectItem> selectItems) { Assert.assertNotNull(selectItems.get(0)); Assert.assertEquals("value1", selectItems.get(0).getValue()); Assert.assertEquals("label1", selectItems.get(0).getLabel()); Assert.assertEquals("description1", selectItems.get(0).getDescription()); Assert.assertEquals(false, selectItems.get(0).isDisabled()); Assert.assertEquals(false, selectItems.get(0).isEscape()); Assert.assertEquals(false, selectItems.get(0).isNoSelectionOption()); Assert.assertNotNull(selectItems.get(1)); Assert.assertEquals("value2", selectItems.get(1).getValue()); Assert.assertEquals("label2", selectItems.get(1).getLabel()); Assert.assertEquals("description2", selectItems.get(1).getDescription()); Assert.assertEquals(false, selectItems.get(1).isDisabled()); Assert.assertEquals(true, selectItems.get(1).isEscape()); Assert.assertEquals(true, selectItems.get(1).isNoSelectionOption()); } private class UISelectItemStub extends UISelectItem { public UISelectItemStub(Object itemValue, String itemLabel, String itemDescription, boolean itemDisabled, boolean itemEscaped, boolean noSelectionOption) { super(); setItemValue(itemValue); setItemLabel(itemLabel); setItemDescription(itemDescription); setItemDisabled(itemDisabled); setItemEscaped(itemEscaped); setNoSelectionOption(noSelectionOption); } } }