/* * 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.renderkit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.richfaces.renderkit.RenderKitUtils.addToScriptHash; import static org.richfaces.renderkit.RenderKitUtils.toScriptArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.ajax4jsf.javascript.JSFunctionDefinition; import org.ajax4jsf.javascript.ScriptUtils; import org.junit.Test; import org.richfaces.renderkit.RenderKitUtils.ScriptHashVariableWrapper; /** * @author Nick Belaevski * */ public class RenderKitUtilsTest { @Test public void testEscape() throws Exception { assertEquals("", RenderKitUtils.escape("")); assertEquals("abcd", RenderKitUtils.escape("abcd")); assertEquals("\\'abcd", RenderKitUtils.escape("'abcd")); assertEquals("abcd\\'", RenderKitUtils.escape("abcd'")); assertEquals("ab\\'cd", RenderKitUtils.escape("ab'cd")); assertEquals("ab\\'\\'cd", RenderKitUtils.escape("ab''cd")); assertEquals("ab\\'c\\'d", RenderKitUtils.escape("ab'c'd")); } @Test public void testChain() throws Exception { StringBuilder sb = new StringBuilder(); assertFalse(RenderKitUtils.chain(sb, "", false)); assertTrue(sb.length() == 0); assertFalse(RenderKitUtils.chain(sb, null, false)); assertTrue(sb.length() == 0); assertFalse(RenderKitUtils.chain(sb, "test", false)); assertEquals("test", sb.toString()); assertFalse(RenderKitUtils.chain(sb, "", false)); assertEquals("test", sb.toString()); assertTrue(RenderKitUtils.chain(sb, "another'object", false)); assertEquals("'test','another\\'object'", sb.toString()); assertTrue(RenderKitUtils.chain(sb, "one more", true)); assertEquals("'test','another\\'object','one more'", sb.toString()); } @Test public void testShouldRenderAttribute() throws Exception { assertFalse(RenderKitUtils.shouldRenderAttribute(null)); assertFalse(RenderKitUtils.shouldRenderAttribute("")); assertTrue(RenderKitUtils.shouldRenderAttribute("test")); assertTrue(RenderKitUtils.shouldRenderAttribute(new Object())); assertTrue(RenderKitUtils.shouldRenderAttribute(Long.valueOf(10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Long.valueOf(0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Long.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Integer.valueOf(10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Integer.valueOf(0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Integer.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Short.valueOf((short) 10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Short.valueOf((short) 0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Short.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Character.valueOf('a'))); assertTrue(RenderKitUtils.shouldRenderAttribute(Character.valueOf((char) 13))); assertFalse(RenderKitUtils.shouldRenderAttribute(Character.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Byte.valueOf((byte) 10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Byte.valueOf((byte) 0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Byte.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Double.valueOf(10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Double.valueOf(0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Double.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Float.valueOf(10))); assertTrue(RenderKitUtils.shouldRenderAttribute(Float.valueOf(0))); assertFalse(RenderKitUtils.shouldRenderAttribute(Float.MIN_VALUE)); assertTrue(RenderKitUtils.shouldRenderAttribute(Boolean.TRUE)); assertFalse(RenderKitUtils.shouldRenderAttribute(Boolean.FALSE)); } private static String dehydrate(String s) { return s.replaceAll("\\s+", ""); } @Test public void testToScriptArgs() throws Exception { assertEquals("", toScriptArgs()); assertEquals("", toScriptArgs((Object) null)); assertEquals("", toScriptArgs((Object[]) null)); assertEquals("\"test\"", toScriptArgs("test")); assertEquals("[5,8]", dehydrate(toScriptArgs(Arrays.asList(5, 8)))); assertEquals("{\"a\":true}", dehydrate(toScriptArgs(Collections.singletonMap("a", true)))); assertEquals("\"test\"", toScriptArgs("test", null)); assertEquals("null,\"test\"", toScriptArgs(null, "test")); assertEquals("\"test\"", toScriptArgs("test", Collections.emptyList())); assertEquals("[],\"test\"", dehydrate(toScriptArgs(Collections.emptyList(), "test"))); assertEquals("\"test\"", toScriptArgs("test", Collections.emptyMap())); assertEquals("{},\"test\"", dehydrate(toScriptArgs(Collections.emptyMap(), "test"))); assertEquals("\"test\"", toScriptArgs("test", "")); assertEquals("\"\",\"test\"", dehydrate(toScriptArgs("", "test"))); assertEquals("1,2,3", toScriptArgs(1, 2, 3, null)); assertEquals("1,2,null,3", toScriptArgs(1, 2, null, 3)); } @Test public void testScriptHashVariableWrapper() throws Exception { assertEquals("abc", ScriptHashVariableWrapper.noop.wrap("abc")); Object eventHandler = ScriptHashVariableWrapper.eventHandler.wrap("abc"); assertTrue(eventHandler instanceof JSFunctionDefinition); JSFunctionDefinition handlerFunction = (JSFunctionDefinition) eventHandler; assertEquals("function(event){abc}", dehydrate(handlerFunction.toScript())); Object arrayObject = ScriptHashVariableWrapper.asArray.wrap("header, footer"); assertEquals("[\"header\",\"footer\"]", dehydrate(ScriptUtils.toScript(arrayObject))); } @Test public void testAddToScriptHash() throws Exception { Map<String, Object> hash = new HashMap<String, Object>(); addToScriptHash(hash, "x", "y", null, null); assertEquals("y", hash.get("x")); addToScriptHash(hash, "y", "", null, null); assertNull(hash.get("y")); assertFalse(hash.containsKey("y")); addToScriptHash(hash, "y1", null, null, null); assertNull(hash.get("y1")); assertFalse(hash.containsKey("y1")); addToScriptHash(hash, "st", "server", "", null); assertEquals("server", hash.get("st")); addToScriptHash(hash, "st1", "ajax", "ajax", null); assertNull(hash.get("st1")); assertFalse(hash.containsKey("st1")); addToScriptHash(hash, "st2", "", "ajax", null); assertNull(hash.get("st2")); assertFalse(hash.containsKey("st2")); addToScriptHash(hash, "null", null, "server", null); assertNull(hash.get("null")); assertFalse(hash.containsKey("null")); addToScriptHash(hash, "b", false, null, null); assertNull(hash.get("b")); assertFalse(hash.containsKey("b")); addToScriptHash(hash, "b1", true, null, null); assertEquals(Boolean.TRUE, hash.get("b1")); addToScriptHash(hash, "b2", true, "true", null); assertNull(hash.get("b2")); assertFalse(hash.containsKey("b2")); addToScriptHash(hash, "b3", false, "true", null); assertEquals(Boolean.FALSE, hash.get("b3")); addToScriptHash(hash, "b4", true, "false", null); assertEquals(Boolean.TRUE, hash.get("b4")); addToScriptHash(hash, "b5", false, "false", null); assertNull(hash.get("b5")); assertFalse(hash.containsKey("b5")); addToScriptHash(hash, "i", Integer.valueOf(0), null, null); assertEquals(Integer.valueOf(0), hash.get("i")); addToScriptHash(hash, "i1", Integer.valueOf(0), "0", null); assertNull(hash.get("i1")); assertFalse(hash.containsKey("i1")); addToScriptHash(hash, "i2", Integer.valueOf(0), "1", null); assertEquals(Integer.valueOf(0), hash.get("i2")); addToScriptHash(hash, "i3", Integer.MIN_VALUE, null, null); assertNull(hash.get("i3")); assertFalse(hash.containsKey("i3")); addToScriptHash(hash, "i4", Integer.MIN_VALUE, "0", null); assertNull(hash.get("i4")); assertFalse(hash.containsKey("i4")); addToScriptHash(hash, "plain", "test", null, ScriptHashVariableWrapper.noop); assertEquals("test", hash.get("plain")); addToScriptHash(hash, "plain1", "newtest", "blank", ScriptHashVariableWrapper.noop); assertEquals("newtest", hash.get("plain1")); addToScriptHash(hash, "onclick", "alert(1)", null, ScriptHashVariableWrapper.eventHandler); assertTrue(hash.get("onclick") instanceof JSFunctionDefinition); addToScriptHash(hash, "onclick1", "alert(1)", "no-val", ScriptHashVariableWrapper.eventHandler); assertTrue(hash.get("onclick1") instanceof JSFunctionDefinition); } @Test public void testAsArray() { assertNull(RenderKitUtils.asArray(null)); } @Test public void testAsArray1() { String[] strings = new String[] { "a", "b" }; String[] array = RenderKitUtils.asArray(strings); assertSame(strings, array); } @Test public void testAsArray2() { Object[] objects = new Object[] { Integer.valueOf(12), null, Integer.valueOf(22), Integer.valueOf(42) }; String[] array = RenderKitUtils.asArray(objects); String[] etalon = new String[] { "12", null, "22", "42" }; assertTrue(Arrays.equals(etalon, array)); } @Test public void testAsArray3() { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(new Integer(12)); list.add(null); list.add(new Integer(22)); list.add(new Integer(42)); String[] array = RenderKitUtils.asArray(list); String[] etalon = new String[] { "12", null, "22", "42" }; assertTrue(Arrays.equals(etalon, array)); } @Test public void testAsArray31() { Set<Integer> set = new TreeSet<Integer>(); set.add(new Integer(12)); set.add(new Integer(22)); set.add(new Integer(42)); String[] array = RenderKitUtils.asArray(set); String[] etalon = new String[] { "12", "22", "42" }; assertTrue(Arrays.equals(etalon, array)); } @Test public void testAsArray4() { String string = " a , \t\n b \n , c "; String[] strings = RenderKitUtils.asArray(string); String[] etalon = new String[] { "a", "b", "c" }; assertTrue(Arrays.equals(etalon, strings)); } }