/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library 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 library 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. */ package com.liferay.portal.kernel.spring.osgi; import com.liferay.portal.kernel.util.PropsUtil; import com.liferay.portal.util.PropsImpl; import java.io.Serializable; import java.util.Arrays; import java.util.EventListener; import java.util.Map; import java.util.Set; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * @author Raymond Augé */ public class OSGiBeanPropertiesTest { @Before public void setUp() { PropsUtil.setProps(new PropsImpl()); } @Test public void testAnnotatedClass() { @OSGiBeanProperties class C { } Assert.assertNotNull(OSGiBeanProperties.Convert.fromObject(new C())); } @Test public void testNotAnnotatedClass() { class C { } Assert.assertNull(OSGiBeanProperties.Convert.fromObject(new C())); } @Test public void testServicesAnnotated() { @OSGiBeanProperties(service = Serializable.class) class C implements Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedButExtends() { class B implements Serializable { } @OSGiBeanProperties(service = Serializable.class) class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedButExtendsMutliple() { class B implements EventListener, Serializable { } @OSGiBeanProperties(service = Serializable.class) class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedButImplements() { @OSGiBeanProperties(service = Serializable.class) class C implements Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedButImplementsMultiple() { @OSGiBeanProperties(service = Serializable.class) class C implements EventListener, Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test(expected = ClassCastException.class) public void testServicesAnnotatedButNotImplements() { @OSGiBeanProperties(service = Serializable.class) class C { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test(expected = ClassCastException.class) public void testServicesAnnotatedButNotImplementsMultiple() { @OSGiBeanProperties(service = {EventListener.class, Serializable.class}) class C implements Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedNoneSet() { @OSGiBeanProperties class C { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 0, interfaceClasses.size()); } @Test public void testServicesAnnotatedNoneSetButExtends() { class B implements Serializable { } @OSGiBeanProperties class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedNoneSetButExtendsMultiple() { class B implements EventListener, Serializable { } @OSGiBeanProperties class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 2, interfaceClasses.size()); } @Test public void testServicesAnnotatedNoneSetButImplements() { @OSGiBeanProperties class C implements Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesAnnotatedNoneSetButImplementsMultiple() { @OSGiBeanProperties class C implements EventListener, Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 2, interfaceClasses.size()); } @Test public void testServicesNotAnnotated() { class C { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 0, interfaceClasses.size()); } @Test public void testServicesNotAnnotatedButExtends() { class B implements Serializable { } class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesNotAnnotatedButExtendsMultiple() { class B implements EventListener, Serializable { } class C extends B { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 2, interfaceClasses.size()); } @Test public void testServicesNotAnnotatedButImplements() { class C implements Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 1, interfaceClasses.size()); } @Test public void testServicesNotAnnotatedButImplementsMultiple() { class C implements EventListener, Serializable { } Set<Class<?>> interfaceClasses = OSGiBeanProperties.Service.interfaces( new C()); Assert.assertEquals( interfaceClasses.toString(), 2, interfaceClasses.size()); } @Test public void testWithArrayOfBooleanProperties() { @OSGiBeanProperties( property = { "key:Boolean=true", "key:Boolean=false", "key:Boolean=true" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Boolean[].class, clazz); Boolean[] values = (Boolean[])value; Assert.assertEquals(true, values[0]); Assert.assertEquals(false, values[1]); Assert.assertEquals(true, values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfByteProperties() { @OSGiBeanProperties( property = {"key:Byte=127", "key:Byte=95", "key:Byte=13"} ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Byte[].class, clazz); Byte[] values = (Byte[])value; Assert.assertEquals((byte)127, (byte)values[0]); Assert.assertEquals((byte)95, (byte)values[1]); Assert.assertEquals((byte)13, (byte)values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfCharacterProperties() { @OSGiBeanProperties( property = { "key:Character=@", "key:Character=#", "key:Character=\u0069" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Character[].class, clazz); Character[] values = (Character[])value; Assert.assertEquals('@', (char)values[0]); Assert.assertEquals('#', (char)values[1]); Assert.assertEquals('\u0069', (char)values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfDoubleProperties() { @OSGiBeanProperties( property = { "key:Double=1.7976931348623157E308", "key:Double=4.9E-324", "key:Double=2.2250738585072014E-308" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Double[].class, clazz); Double[] values = (Double[])value; Assert.assertEquals(Double.MAX_VALUE, values[0], 0); Assert.assertEquals(Double.MIN_VALUE, values[1], 0); Assert.assertEquals(Double.MIN_NORMAL, values[2], 0); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfFloatProperties() { @OSGiBeanProperties( property = { "key:Float=3.4028234663852886E38", "key:Float=1.401298464324817E-45", "key:Float=1.1754943508222875E-38" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Float[].class, clazz); Float[] values = (Float[])value; Assert.assertEquals(Float.MAX_VALUE, values[0], 0); Assert.assertEquals(Float.MIN_VALUE, values[1], 0); Assert.assertEquals(Float.MIN_NORMAL, values[2], 0); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfIntegerProperties() { @OSGiBeanProperties( property = { "key:Integer=2147483647", "key:Integer=-2147483648", "key:Integer=12" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Integer[].class, clazz); Integer[] values = (Integer[])value; Assert.assertEquals(Integer.MAX_VALUE, (int)values[0]); Assert.assertEquals(Integer.MIN_VALUE, (int)values[1]); Assert.assertEquals(12, (int)values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfLongProperties() { @OSGiBeanProperties( property = { "key:Long=9223372036854775807", "key:Long=-9223372036854775808", "key:Long=12" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Long[].class, clazz); Long[] values = (Long[])value; Assert.assertEquals(Long.MAX_VALUE, (long)values[0]); Assert.assertEquals(Long.MIN_VALUE, (long)values[1]); Assert.assertEquals(12L, (long)values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test(expected = IllegalArgumentException.class) public void testWithArrayOfMixedProperties() { @OSGiBeanProperties( property = { "key:String=32767", "key:Integer=-32768", "key:Short=12" } ) class C { } OSGiBeanProperties.Convert.fromObject(new C()); } @Test public void testWithArrayOfProperties() { @OSGiBeanProperties( property = {"key=valueA", "key=valueB", "key=valueC"} ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(String[].class, clazz); String[] values = (String[])value; Assert.assertEquals("valueA", values[0]); Assert.assertEquals("valueB", values[1]); Assert.assertEquals("valueC", values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithArrayOfShortProperties() { @OSGiBeanProperties( property = {"key:Short=32767", "key:Short=-32768", "key:Short=12"} ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Object value = properties.get("key"); Class<? extends Object> clazz = value.getClass(); Assert.assertTrue(clazz.isArray()); Assert.assertEquals(Short[].class, clazz); Short[] values = (Short[])value; Assert.assertEquals(Short.MAX_VALUE, (short)values[0]); Assert.assertEquals(Short.MIN_VALUE, (short)values[1]); Assert.assertEquals(12, (short)values[2]); Assert.assertEquals(Arrays.toString(values), 3, values.length); } @Test public void testWithMultipleProperties() { @OSGiBeanProperties(property = {"key1=value1", "key2=value2"}) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Assert.assertFalse(properties.isEmpty()); Assert.assertEquals(properties.toString(), 2, properties.size()); Assert.assertEquals("value1", properties.get("key1")); } @Test public void testWithPortalProperties() { @OSGiBeanProperties(portalPropertyPrefix = "portlet.") class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Assert.assertTrue( properties.containsKey("add.default.resource.check.whitelist")); Assert.assertEquals( PropsUtil.get("portlet.add.default.resource.check.whitelist"), properties.get("add.default.resource.check.whitelist")); } @Test public void testWithSingleProperty() { @OSGiBeanProperties(property = "key=value") class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Assert.assertFalse(properties.isEmpty()); Assert.assertEquals(properties.toString(), 1, properties.size()); Assert.assertEquals("value", properties.get("key")); } @Test public void testWithTypedProperties() { @OSGiBeanProperties( property = { "key1=value1", "key2:Boolean=true", "key3:Byte=127", "key4:Character=@", "key5:Double=1.7976931348623157E308", "key6:Float=3.4028234663852886E38f", "key7:Integer=2147483647", "key8:Long=9223372036854775807", "key9:Short=32767", "key10:String=value10" } ) class C { } Map<String, Object> properties = OSGiBeanProperties.Convert.fromObject( new C()); Assert.assertNotNull(properties); Assert.assertEquals("value1", properties.get("key1")); Assert.assertEquals(Boolean.TRUE, properties.get("key2")); Assert.assertEquals(Byte.valueOf("127"), properties.get("key3")); Assert.assertEquals(Character.valueOf('@'), properties.get("key4")); Assert.assertEquals(Double.MAX_VALUE, properties.get("key5")); Assert.assertEquals(Float.MAX_VALUE, properties.get("key6")); Assert.assertEquals(Integer.MAX_VALUE, properties.get("key7")); Assert.assertEquals(Long.MAX_VALUE, properties.get("key8")); Assert.assertEquals(Short.MAX_VALUE, properties.get("key9")); Assert.assertEquals("value10", properties.get("key10")); } }