/* * JBoss, Home of Professional Open Source * Copyright 2010 Red Hat Inc. and/or its affiliates and other * contributors as indicated by the @author tags. All rights reserved. * 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.infinispan.loaders.keymappers; import org.infinispan.util.ByteArrayKey; import org.testng.annotations.Test; @Test(groups = "unit", testName = "loaders.keymappers.DefaultTwoWayKey2StringMapperTest") public class DefaultTwoWayKey2StringMapperTest { DefaultTwoWayKey2StringMapper mapper = new DefaultTwoWayKey2StringMapper(); public void testKeyMapper() { String skey = mapper.getStringMapping("k1"); assert skey.equals("k1"); skey = mapper.getStringMapping(Integer.valueOf(100)); assert !skey.equals("100"); Integer i = (Integer) mapper.getKeyMapping(skey); assert i == 100; skey = mapper.getStringMapping(Boolean.TRUE); assert !skey.equalsIgnoreCase("true"); Boolean b = (Boolean) mapper.getKeyMapping(skey); assert b; skey = mapper.getStringMapping(Double.valueOf(3.141592d)); assert !skey.equals("3.141592"); Double d = (Double) mapper.getKeyMapping(skey); assert d == 3.141592d; byte[] bytes = new byte[] { 0, 1, 2, 40, -128, -127, 127, 126, 0 }; skey = mapper.getStringMapping(new ByteArrayKey(bytes)); assert !skey.equals("\000\001\002\050\0377\0376\0177\0176\000"); } public void testPrimitivesAreSupported() { assert mapper.isSupportedType(Integer.class); assert mapper.isSupportedType(Byte.class); assert mapper.isSupportedType(Short.class); assert mapper.isSupportedType(Long.class); assert mapper.isSupportedType(Double.class); assert mapper.isSupportedType(Float.class); assert mapper.isSupportedType(Boolean.class); assert mapper.isSupportedType(String.class); assert mapper.isSupportedType(ByteArrayKey.class); } public void testTwoWayContract() { Object[] toTest = { 0, new Byte("1"), new Short("2"), (long) 3, new Double("3.4"), new Float("3.5"), Boolean.FALSE, "some string", new ByteArrayKey("\000\001\002\050\0377\0376\0177\0176\000".getBytes()) }; for (Object o : toTest) { Class<?> type = o.getClass(); String rep = mapper.getStringMapping(o); assert o.equals(mapper.getKeyMapping(rep)) : String.format("Failed on type %s and value %s", type, rep); } } public void testAssumption() { // even if they have the same value, they have a different type assert !new Float(3.0f).equals(new Integer(3)); } public void testString() { assert mapper.isSupportedType(String.class); assert assertWorks("") : "Expected empty string, was " + mapper.getStringMapping(""); assert assertWorks("mircea") : "Expected 'mircea', was " + mapper.getStringMapping("mircea"); } public void testShort() { assert mapper.isSupportedType(Short.class); assert assertWorks((short) 2); } public void testByte() { assert mapper.isSupportedType(Byte.class); assert assertWorks((byte) 2); } public void testLong() { assert mapper.isSupportedType(Long.class); assert assertWorks(new Long(2)); } public void testInteger() { assert mapper.isSupportedType(Integer.class); assert assertWorks(2); } public void testDouble() { assert mapper.isSupportedType(Double.class); assert assertWorks(2.4d); } public void testFloat() { assert mapper.isSupportedType(Float.class); assert assertWorks(2.1f); } public void testBoolean() { assert mapper.isSupportedType(Boolean.class); assert assertWorks(true); assert assertWorks(false); } public void testByteArrayKey() { assert mapper.isSupportedType(ByteArrayKey.class); assert assertWorks(new ByteArrayKey("\000\001\002\050\0377\0376\0177\0176\000".getBytes())); } private boolean assertWorks(Object key) { return mapper.getKeyMapping(mapper.getStringMapping(key)).equals(key); } }