/* * JBoss, Home of Professional Open Source * Copyright 2013, 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.skin; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import static org.richfaces.application.CoreConfiguration.BASE_SKIN_PARAM_NAME; import static org.richfaces.application.CoreConfiguration.SKIN_PARAM_NAME; import java.util.HashMap; import java.util.Map; import javax.faces.FacesException; import javax.faces.context.FacesContext; import org.junit.Rule; import org.junit.Test; import org.richfaces.ContextInitParameter; import org.richfaces.ContextInitParameters; import org.richfaces.FacesRequestSetupRule; /** * Test for Skin/skin factory methods. * * @author asmirnov@exadel.com (latest modification by $Author: alexsmirnov $) * @version $Revision: 1.1.2.1 $ $Date: 2007/01/10 14:28:13 $ * */ public class SkinTestCase { @Rule public FacesRequestSetupRule rule = new FacesRequestSetupRule(); private void addParameters(FacesContext facesContext, Object[][] strings) { Map<Object, Object> baseMap = new HashMap<Object, Object>(); for (Object[] objects : strings) { baseMap.put(objects[0], objects[1]); } facesContext.getExternalContext().getRequestMap().put("test", baseMap); } @Test public void testGetInstance() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); SkinFactory factory1 = SkinFactory.getInstance(facesContext); assertSame(factory, factory1); } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @Test @ContextInitParameter(name = SKIN_PARAM_NAME, value = "test") public void testGetSkin() { FacesContext facesContext = FacesContext.getCurrentInstance(); addParameters(facesContext, new Object[][] { new Object[] { "bean", "test.value" } }); SkinFactory factory = SkinFactory.getInstance(facesContext); // test call Skin skin = factory.getSkin(facesContext); assertNotNull("Null skin!", skin); // test properties assertEquals("string", skin.getParameter(facesContext, "string.property")); assertEquals("base.string", skin.getParameter(facesContext, "base.property")); assertEquals("test.value", skin.getParameter(facesContext, "bind.property")); // assertEquals("HTML_BASIC",skin.getRenderKitId(mockContext)); } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "test"), @ContextInitParameter(name = BASE_SKIN_PARAM_NAME, value = "DEFAULT") }) public void testSkinReferences() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); // test call Skin skin = factory.getSkin(facesContext); assertNotNull("Null skin!", skin); assertEquals("default", skin.getParameter(facesContext, "c")); assertEquals("yyy", skin.getParameter(facesContext, "y")); } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "style"), @ContextInitParameter(name = BASE_SKIN_PARAM_NAME, value = "style_base") }) public void testSkinReferences1() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); // test call Skin skin = factory.getSkin(facesContext); assertNotNull("Null skin!", skin); assertEquals("#F5F0E7", skin.getParameter(facesContext, "intermediateTextColor")); assertEquals("10px", skin.getParameter(facesContext, "intermediateTextSize")); assertEquals("#F5F0E7", skin.getParameter(facesContext, "generalTextColor")); assertEquals("white.textcolor", skin.getParameter(facesContext, "additionalTextColor")); } @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "dynatest"), @ContextInitParameter(name = BASE_SKIN_PARAM_NAME, value = "dynatest_base") }) public void testBaseSkin() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); addParameters(facesContext, new Object[][] { new Object[] { "bean", "dynabase1" } }); Skin skin = factory.getSkin(facesContext); assertEquals("default", skin.getParameter(facesContext, "default")); assertEquals("itself", skin.getParameter(facesContext, "selfValue")); assertEquals("#AAA", skin.getParameter(facesContext, "customFormColor")); Map<String, String> map = (Map<String, String>) facesContext.getExternalContext().getRequestMap().get("test"); map.put("bean", "dynabase2"); assertEquals("xxx", skin.getParameter(facesContext, "default")); assertEquals("itself", skin.getParameter(facesContext, "selfValue")); assertEquals("#AAA", skin.getParameter(facesContext, "customFormColor")); } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "cyclic") }) public void testCyclicSkinReferences() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); try { Skin skin = factory.getSkin(facesContext); skin.getParameter(facesContext, "x"); fail(); } catch (FacesException e) { // it's ok } } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "noref") }) public void testBadSkinReferences() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); // test call try { Skin skin = factory.getSkin(facesContext); skin.getParameter(facesContext, "x"); fail(); } catch (FacesException e) { // it's ok } } /* * Test method for 'org.richfaces.skin.SkinFactory.getSkin(FacesContext)' */ @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "#{test.skin}") }) public void testGetBindedSkin() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); addParameters(facesContext, new Object[][] { new Object[] { "skin", "bindedtest" }, new Object[] { "bean", "binded.test.value" } }); // test call Skin skin = factory.getSkin(facesContext); assertNotNull("Null skin!", skin); // test properties assertEquals("bindedstring", skin.getParameter(facesContext, "string.property")); // assertEquals("base.string",skin.getParameter(mockContext,"base.property")); assertEquals("binded.test.value", skin.getParameter(facesContext, "bind.property")); } @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "#{test.skin}") }) public void testSkinHash() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = SkinFactory.getInstance(facesContext); addParameters(facesContext, new Object[][] { new Object[] { "skin", "bindedtest" }, new Object[] { "bean", "binded.test.value" } }); Skin skin = factory.getSkin(facesContext); // test properties int hash = skin.hashCode(facesContext); assertEquals(hash, skin.hashCode(facesContext)); Map<String, Object> requestMap = facesContext.getExternalContext().getRequestMap(); Map map = (Map) requestMap.get("test"); ((CompositeSkinImpl) skin).resetCachedHashCode(); map.put("bean", "other.test.value"); assertFalse(hash == skin.hashCode(facesContext)); } /* * Test method for 'org.richfaces.skin.SkinFactory.getDefaultProperties()' */ @Test public void testGetDefaultProperties() { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = (SkinFactory) SkinFactory.getInstance(facesContext); // assertEquals("HTML_BASIC",defaultProps.getProperty("render.kit")); // Second default config assertEquals("default", factory.getDefaultSkin(facesContext).getParameter(facesContext, "a")); } @Test @ContextInitParameters({ @ContextInitParameter(name = SKIN_PARAM_NAME, value = "plain") }) public void testPlainSkin() throws Exception { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = (SkinFactory) SkinFactory.getInstance(facesContext); assertNull(factory.getSkin(facesContext).getParameter(facesContext, Skin.GENERAL_BACKGROUND_COLOR)); } @Test @ContextInitParameters({ @ContextInitParameter(name = BASE_SKIN_PARAM_NAME, value = "plain") }) public void testPlainSkinBase() throws Exception { FacesContext facesContext = FacesContext.getCurrentInstance(); SkinFactory factory = (SkinFactory) SkinFactory.getInstance(facesContext); assertNull(factory.getBaseSkin(facesContext).getParameter(facesContext, Skin.GENERAL_BACKGROUND_COLOR)); } }