Add tests on instance configuration with complex types and new array syntax. 

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@675571 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java
new file mode 100644
index 0000000..f460048
--- /dev/null
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java
@@ -0,0 +1,38 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.configuration.service.CheckService;
+
+public class ComplexConfiguration implements CheckService {
+    
+    private List m_list;
+    private Map m_map;
+    private Dictionary m_dict;
+    private String[] m_array;
+    
+    private List m_complexList;
+    private Map m_complexMap;
+    private Object[] m_complexArray;
+
+    public boolean check() {
+        return true;
+    }
+    
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.put("list", m_list);
+        props.put("map", m_map);
+        props.put("dict", m_dict);
+        props.put("array", m_array);
+        props.put("complex-list", m_complexList);
+        props.put("complex-map", m_complexMap);
+        props.put("complex-array", m_complexArray);
+        return props;
+    }
+
+}
diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
index 60796bc..80c919d 100644
--- a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
@@ -34,7 +34,7 @@
 		ots.addTestSuite(TestBothProperties.class);

 		ots.addTestSuite(TestSuperMethodProperties.class);

 		ots.addTestSuite(ManagedServiceConfigurableProperties.class);

-		

+		ots.addTestSuite(TestComplexProperties.class);

 		return ots;

 	}

 

diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java
new file mode 100644
index 0000000..f24cc59
--- /dev/null
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java
@@ -0,0 +1,189 @@
+package org.apache.felix.ipojo.test.scenarios.configuration;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.scenarios.configuration.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComplexProperties extends OSGiTestCase {
+    
+    private ServiceReference m_ref;
+    private CheckService m_check;
+    
+    public void setUp() {
+       m_ref = Utils.getServiceReferenceByName(context, CheckService.class.getName(), "complex");
+       assertNotNull("Complex service availability", m_ref);
+       m_check = (CheckService) context.getService(m_ref);
+    }
+    
+    public void tearDown() {
+        m_check = null;
+        context.ungetService(m_ref);
+    }
+    
+    public void testArray() {
+        String[] array = (String[]) m_check.getProps().get("array");
+        assertEquals("Array size", 2, array.length);
+        assertEquals("Array[0]", "a", array[0]);
+        assertEquals("Array[1]", "b", array[1]);
+    }
+    
+    public void testList() {
+        List list = (List) m_check.getProps().get("list");
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+    }
+    
+    public void testMap() {
+        Map map = (Map) m_check.getProps().get("map");
+        assertEquals("Map size", 2, map.size());
+        assertEquals("Map[a]", "a", map.get("a"));
+        assertEquals("Map[b]", "b", map.get("b"));
+    }
+    
+    public void testDictionary() {
+        Dictionary dict = (Dictionary) m_check.getProps().get("dict");
+        assertEquals("Map size", 2, dict.size());
+        assertEquals("Map[a]", "a", dict.get("a"));
+        assertEquals("Map[b]", "b", dict.get("b"));
+    }
+    
+    public void testComplexArray() {
+        Object[] array = (Object[]) m_check.getProps().get("complex-array");
+        assertEquals("Array size", 2, array.length);
+        assertTrue("Array[0] type", array[0] instanceof List);
+        assertTrue("Array[1] type", array[1] instanceof List);
+        List list = (List) array[0];
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+        list = (List) array[1];
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testComplexList() {
+        List list = (List) m_check.getProps().get("complex-list");
+        assertEquals("List size", 2, list.size());
+        assertTrue("List[0] type", list.get(0) instanceof List);
+        assertTrue("List[1] type", list.get(1) instanceof List);
+        List list1 = (List) list.get(0);
+        assertEquals("List size - 1", 2, list1.size());
+        assertEquals("List[0] - 1", "a", list1.get(0));
+        assertEquals("List[1] - 1", "b", list1.get(1));
+        list1 = (List) list.get(1);
+        assertEquals("List size - 2", 2, list1.size());
+        assertEquals("List[0] - 2", "c", list1.get(0));
+        assertEquals("List[1] - 2", "d", list1.get(1));
+    }
+    
+    public void testComplexMap() {
+        Map map = (Map) m_check.getProps().get("complex-map");
+        assertEquals("List size", 2, map.size());
+        assertTrue("List[0] type", map.get("a") instanceof List);
+        assertTrue("List[1] type", map.get("b") instanceof List);
+        List list = (List) map.get("a");
+        assertEquals("List size - 1", 2, list.size());
+        assertEquals("List[0] - 1", "a", list.get(0));
+        assertEquals("List[1] - 1", "b", list.get(1));
+        list = (List) map.get("b");
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceArray() {
+        String[] array = (String[]) m_ref.getProperty("array");
+        assertEquals("Array size", 2, array.length);
+        assertEquals("Array[0]", "a", array[0]);
+        assertEquals("Array[1]", "b", array[1]);
+    }
+    
+    public void testServiceList() {
+        List list = (List) m_ref.getProperty("list");
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+    }
+    
+    public void testServiceMap() {
+        Map map = (Map) m_ref.getProperty("map");
+        assertEquals("Map size", 2, map.size());
+        assertEquals("Map[a]", "a", map.get("a"));
+        assertEquals("Map[b]", "b", map.get("b"));
+    }
+    
+    public void testServiceDictionary() {
+        Dictionary dict = (Dictionary) m_ref.getProperty("dict");
+        assertEquals("Map size", 2, dict.size());
+        assertEquals("Map[a]", "a", dict.get("a"));
+        assertEquals("Map[b]", "b", dict.get("b"));
+    }
+    
+    public void testServiceComplexArray() {
+        Object[] array = (Object[]) m_ref.getProperty("complex-array");
+        assertEquals("Array size", 2, array.length);
+        assertTrue("Array[0] type", array[0] instanceof List);
+        assertTrue("Array[1] type", array[1] instanceof List);
+        List list = (List) array[0];
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+        list = (List) array[1];
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceComplexList() {
+        List list = (List) m_ref.getProperty("complex-list");
+        assertEquals("List size", 2, list.size());
+        assertTrue("List[0] type", list.get(0) instanceof List);
+        assertTrue("List[1] type", list.get(1) instanceof List);
+        List list1 = (List) list.get(0);
+        assertEquals("List size - 1", 2, list1.size());
+        assertEquals("List[0] - 1", "a", list1.get(0));
+        assertEquals("List[1] - 1", "b", list1.get(1));
+        list1 = (List) list.get(1);
+        assertEquals("List size - 2", 2, list1.size());
+        assertEquals("List[0] - 2", "c", list1.get(0));
+        assertEquals("List[1] - 2", "d", list1.get(1));
+    }
+    
+    public void testServiceComplexMap() {
+        Map map = (Map) m_ref.getProperty("complex-map");
+        assertEquals("List size", 2, map.size());
+        assertTrue("List[0] type", map.get("a") instanceof List);
+        assertTrue("List[1] type", map.get("b") instanceof List);
+        List list = (List) map.get("a");
+        assertEquals("List size - 1", 2, list.size());
+        assertEquals("List[0] - 1", "a", list.get(0));
+        assertEquals("List[1] - 1", "b", list.get(1));
+        list = (List) map.get("b");
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceEmptyArray() {
+        String[] array = (String[]) m_ref.getProperty("empty-array");
+        assertEquals("Array size", 0, array.length);
+    }
+    
+    public void testServiceEmptyList() {
+        List list = (List) m_ref.getProperty("empty-list");
+        assertEquals("List size", 0, list.size());
+    }
+    
+    public void testServiceEmptyMap() {
+        Map map = (Map) m_ref.getProperty("empty-map");
+        assertEquals("Map size", 0, map.size());
+    }
+
+}
diff --git a/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml b/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
index b389cd5..f7f012c 100644
--- a/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
+++ b/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
@@ -145,4 +145,83 @@
 		</properties>

 	</component>

 	

+	<component

+		classname="org.apache.felix.ipojo.test.scenarios.component.ComplexConfiguration">

+		<provides>

+			<property name="array" field="m_array"/>

+			<property name="complex-array" field="m_complexArray"/>

+			<property name="list" field="m_list"/>

+			<property name="complex-list" field="m_complexList"/>

+			<property name="map" field="m_map"/>

+			<property name="complex-map" field="m_complexMap"/>

+			<property name="dict" field="m_dict"/>

+			<property name="empty-array" type="String[]"/>

+			<property name="empty-map" type="java.util.HashMap"/>

+			<property name="empty-list" type="java.util.List"/>

+		</provides>

+		<properties>

+			<property name="array" field="m_array"/>

+			<property name="complex-array" field="m_complexArray"/>

+			<property name="list" field="m_list"/>

+			<property name="complex-list" field="m_complexList"/>

+			<property name="map" field="m_map"/>

+			<property name="complex-map" field="m_complexMap"/>

+			<property name="dict" field="m_dict"/>

+		</properties>

+	</component>

+	

+	<instance component="org.apache.felix.ipojo.test.scenarios.component.ComplexConfiguration" name="complex">

+		<property name="array" type="array">

+			<property value="a"/>

+			<property value="b"/>

+		</property>

+		<property name="list" type="list">

+			<property value="a"/>

+			<property value="b"/>

+		</property>

+		<property name="dict" type="dictionary">

+			<property name="a" value="a"/>

+			<property name="b" value="b"/>

+		</property>

+		<property name="map" type="map">

+			<property name="a" value="a"/>

+			<property name="b" value="b"/>

+		</property>

+		<property name="complex-array" type="array">

+			<property type="list">

+				<property value="a"/>

+				<property value="b"/>

+			</property>

+			<property type="list">

+				<property value="c"/>

+				<property value="d"/>

+			</property>

+		</property>

+		<property name="complex-list" type="list">

+			<property type="list">

+				<property value="a"/>

+				<property value="b"/>

+			</property>

+			<property type="list">

+				<property value="c"/>

+				<property value="d"/>

+			</property>

+		</property>

+		<property name="complex-map" type="map">

+			<property name="a" type="list">

+				<property value="a"/>

+				<property value="b"/>

+			</property>

+			<property name="b" type="list">

+				<property value="c"/>

+				<property value="d"/>

+			</property>

+		</property>

+		<property name="empty-array" type="array"/>

+		<property name="empty-list" type="list"/>

+		<property name="empty-map" type="map"/>

+	</instance>

+		

+		

+	

 </ipojo>

diff --git a/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml b/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
index 9f386f3..6d73ce8 100644
--- a/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
+++ b/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
@@ -30,8 +30,8 @@
 			<property name="boolean" field="boolProp" value="false" />

 			<property name="string" field="strProp" value="foo" />

 			<property name="strAProp" field="strAProp"

-				value="{foo, bar}" />

-			<property name="intAProp" field="intAProp" value="{ 1,2,3}" />

+				value="[foo, bar]" />

+			<property name="intAProp" field="intAProp" value="[ 1,2,3]" />

 		</provides>

 	</component>