1 package org.objectweb.celtix.bus.configuration; 2 3 import java.io.ByteArrayOutputStream ; 4 import java.io.IOException ; 5 import java.io.InputStream ; 6 import java.io.PrintStream ; 7 import java.math.BigInteger ; 8 import java.util.Collection ; 9 import java.util.List ; 10 11 import javax.xml.XMLConstants ; 12 import javax.xml.namespace.QName ; 13 14 import junit.framework.TestCase; 15 16 import org.objectweb.celtix.configuration.ConfigurationException; 17 import org.objectweb.celtix.configuration.ConfigurationItemMetadata; 18 import org.objectweb.celtix.configuration.ConfigurationItemMetadata.LifecyclePolicy; 19 import org.objectweb.celtix.configuration.ConfigurationMetadata; 20 import org.objectweb.celtix.configuration.impl.ConfigurationMetadataBuilder; 21 import org.objectweb.celtix.configuration.types.StringListType; 22 23 24 public class ConfigurationMetadataImplTest extends TestCase { 25 26 private static final String TYPES_NAMESPACE_URI = 27 "http://celtix.objectweb.org/configuration/types"; 28 29 30 public void testStandardTypes() { 31 32 ConfigurationMetadata model = buildMetadata("meta1.xml"); 33 assertEquals("http://celtix.objectweb.org/configuration/test/meta1", 34 model.getNamespaceURI()); 35 Collection <ConfigurationItemMetadata> definitions = model.getDefinitions(); 36 assertEquals(9, definitions.size()); 37 ConfigurationItemMetadata definition = null; 38 39 definition = model.getDefinition("booleanItem"); 40 assertNotNull(definition); 41 assertEquals("booleanItem", definition.getName()); 42 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "boolean"), 43 definition.getType()); 44 assertEquals(LifecyclePolicy.STATIC, definition.getLifecyclePolicy()); 45 46 definition = model.getDefinition("shortItem"); 47 assertNotNull(definition); 48 assertEquals("shortItem", definition.getName()); 49 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "short"), 50 definition.getType()); 51 52 definition = model.getDefinition("intItem"); 53 assertNotNull(definition); 54 assertEquals("intItem", definition.getName()); 55 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "int"), 56 definition.getType()); 57 58 definition = model.getDefinition("integerItem"); 59 assertNotNull(definition); 60 assertEquals("integerItem", definition.getName()); 61 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "integer"), 62 definition.getType()); 63 assertEquals(LifecyclePolicy.PROCESS, definition.getLifecyclePolicy()); 65 66 definition = model.getDefinition("longItem"); 67 assertNotNull(definition); 68 assertEquals("longItem", definition.getName()); 69 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "long"), 70 definition.getType()); 71 assertEquals(LifecyclePolicy.BUS, definition.getLifecyclePolicy()); 73 74 definition = model.getDefinition("floatItem"); 75 assertNotNull(definition); 76 assertEquals("floatItem", definition.getName()); 77 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "float"), 78 definition.getType()); 79 80 definition = model.getDefinition("doubleItem"); 81 assertNotNull(definition); 82 assertEquals("doubleItem", definition.getName()); 83 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "double"), 84 definition.getType()); 85 assertEquals(LifecyclePolicy.DYNAMIC, definition.getLifecyclePolicy()); 87 88 definition = model.getDefinition("stringItem"); 89 assertNotNull(definition); 90 assertEquals("stringItem", definition.getName()); 91 assertEquals(new QName (XMLConstants.W3C_XML_SCHEMA_NS_URI, "string"), 92 definition.getType()); 93 94 definition = model.getDefinition("stringListItem"); 95 assertNotNull(definition); 96 assertEquals("stringListItem", definition.getName()); 97 assertEquals(new QName (TYPES_NAMESPACE_URI, "stringListType"), 98 definition.getType()); 99 assertEquals(LifecyclePolicy.STATIC, definition.getLifecyclePolicy()); 100 assertNull(definition.getDefaultValue()); 101 } 102 103 public void testIllegalQNameInType() { 104 try { 105 buildMetadata("meta2.xml"); 106 fail("Expected ConfigurationException not thrown."); 107 } catch (ConfigurationException ex) { 108 assertEquals("ILLEGAL_QNAME_EXC", ex.getCode()); 109 } 110 } 111 112 public void testIllegalPrefixInType() { 113 try { 114 buildMetadata("meta3.xml"); 115 fail("Expected ConfigurationException not thrown."); 116 } catch (ConfigurationException ex) { 117 assertEquals("ILLEGAL_PREFIX_EXC", ex.getCode()); 118 } 119 } 120 121 public void testUnknownType() { 122 try { 123 buildMetadata("meta4.xml"); 124 fail("Expected ConfigurationException not thrown."); 125 } catch (ConfigurationException ex) { 126 assertEquals("TYPE_NOT_DEFINED_IN_NAMESPACE_EXC", ex.getCode()); 127 } 128 assertNotNull(buildMetadata("meta4.xml", false)); 129 } 130 131 public void testUniqueName() { 132 PrintStream perr = System.err; 133 ByteArrayOutputStream bout = new ByteArrayOutputStream (); 134 PrintStream newPerr = new PrintStream (bout); 135 System.setErr(newPerr); 136 try { 137 buildMetadata("meta5.xml"); 138 fail("Expected ConfigurationException not thrown."); 139 } catch (ConfigurationException ex) { 140 assertEquals("METADATA_VALIDATION_ERROR_EXC", ex.getCode()); 141 } finally { 142 System.setErr(perr); 143 } 144 assertNotNull(buildMetadata("meta5.xml", false)); 145 } 146 147 public void testInvalidTypeInDefaultValue() { 148 try { 149 buildMetadata("meta6.xml"); 150 fail("Expected ConfigurationException not thrown."); 151 } catch (ConfigurationException ex) { 152 assertEquals("INVALID_TYPE_FOR_DEFAULT_VALUE_EXC", ex.getCode()); 153 } 154 } 155 156 public void testIllegalDefaultValue() { 157 158 try { 159 buildMetadata("meta7.xml"); 160 fail("Expected ConfigurationException not thrown."); 161 } catch (ConfigurationException ex) { 162 assertEquals("DEFAULT_VALUE_UNMARSHAL_ERROR_EXC", ex.getCode()); 164 } 165 assertNotNull(buildMetadata("meta7.xml", false)); 166 } 167 168 public void testDefaultValue() { 169 ConfigurationMetadata model = buildMetadata("meta8.xml"); 170 Collection <ConfigurationItemMetadata> definitions = model.getDefinitions(); 171 assertEquals(9, definitions.size()); 172 173 ConfigurationItemMetadata definition = null; 174 Object defaultValue = null; 175 176 definition = model.getDefinition("booleanItem"); 177 defaultValue = definition.getDefaultValue(); 178 assertNotNull(defaultValue); 179 assertEquals("java.lang.Boolean", defaultValue.getClass().getName()); 180 assertEquals(true, ((Boolean )defaultValue).booleanValue()); 181 182 definition = model.getDefinition("integerItem"); 183 defaultValue = definition.getDefaultValue(); 184 assertNotNull(defaultValue); 185 assertEquals("java.math.BigInteger", defaultValue.getClass().getName()); 186 assertEquals(44959, ((BigInteger )defaultValue).intValue()); 187 188 definition = model.getDefinition("longItem"); 189 defaultValue = definition.getDefaultValue(); 190 assertNotNull(defaultValue); 191 assertEquals("java.lang.Long", defaultValue.getClass().getName()); 192 assertEquals(-99, ((Long )defaultValue).longValue()); 193 194 definition = model.getDefinition("doubleItem"); 195 defaultValue = definition.getDefaultValue(); 196 assertNotNull(defaultValue); 197 assertEquals("java.lang.Double", defaultValue.getClass().getName()); 198 assertTrue(Math.abs(1234.5678 - ((Double )defaultValue).doubleValue()) < 0.5E-5); 199 200 definition = model.getDefinition("stringItem"); 201 defaultValue = definition.getDefaultValue(); 202 assertNotNull(defaultValue); 203 assertEquals("java.lang.String", defaultValue.getClass().getName()); 204 assertEquals("\"Hello World!\"", (String )defaultValue); 205 206 definition = model.getDefinition("stringListItem"); 207 defaultValue = definition.getDefaultValue(); 208 assertNotNull(defaultValue); 209 210 assertEquals("org.objectweb.celtix.configuration.types.StringListType", 211 defaultValue.getClass().getName()); 212 List <String > l = ((StringListType)defaultValue).getItem(); 213 assertNotNull(l); 214 assertEquals(3, l.size()); 215 assertEquals("a", l.get(0)); 216 assertEquals("b", l.get(1)); 217 assertEquals("c", l.get(2)); 218 } 219 220 private ConfigurationMetadata buildMetadata(String filename) { 221 return buildMetadata(filename, true); 222 } 223 224 private ConfigurationMetadata buildMetadata(String filename, boolean doValidate) { 225 InputStream is = getClass().getResourceAsStream("resources/" + filename); 226 ConfigurationMetadataBuilder builder = new ConfigurationMetadataBuilder(true); 227 builder.setValidation(doValidate); 228 try { 229 return builder.build(is); 230 } catch (IOException ex) { 231 return null; 232 } 233 } 234 235 236 } 237 | Popular Tags |