1 8 package org.codehaus.loom.extension; 9 10 import java.io.ByteArrayInputStream ; 11 import java.io.IOException ; 12 import java.util.jar.Manifest ; 13 14 import org.codehaus.loom.extension.Extension; 15 16 import junit.framework.TestCase; 17 18 24 public class ExtensionTestCase 25 extends TestCase 26 { 27 public void testAvailable() 28 throws Exception 29 { 30 final String manifestString = 31 "Manifest-Version: 1.0\n" + 32 "Extension-Name: spice-configkit\n" + 33 "Specification-Version: 1.0\n" + 34 "Specification-Vendor: Spice Group\n" + 35 "Implementation-Vendor-Id: org.realityforge.spice\n" + 36 "Implementation-Vendor: Spice Group\n" + 37 "Implementation-Version: 2.8Alpha\n"; 38 final Manifest manifest = getManifest( manifestString ); 39 40 final Extension[] required = Extension.getRequired( manifest ); 41 assertEquals( "required Count", 0, required.length ); 42 43 final Extension[] available = Extension.getAvailable( manifest ); 44 45 assertEquals( "Available Count", 1, available.length ); 46 assertEquals( "Available Name", "spice-configkit", 47 available[ 0 ].getExtensionName() ); 48 assertEquals( "Available SpecVendor", "Spice Group", 49 available[ 0 ].getSpecificationVendor() ); 50 assertEquals( "Available SpecVersion", "1.0", 51 available[ 0 ].getSpecificationVersion().toString() ); 52 assertEquals( "Available URL", 53 null, 54 available[ 0 ].getImplementationURL() ); 55 assertEquals( "Available ImpVendor", "Spice Group", 56 available[ 0 ].getImplementationVendor() ); 57 assertEquals( "Available ImpVendorId", "org.realityforge.spice", 58 available[ 0 ].getImplementationVendorID() ); 59 assertEquals( "Available ImpVersion", "2.8Alpha", 60 available[ 0 ].getImplementationVersion().toString() ); 61 } 62 63 public void testRequired() 64 throws Exception 65 { 66 final String manifestString = 67 "Manifest-Version: 1.0\n" + 68 "Extension-List: required1\n" + 69 "required1-Extension-Name: spice.required1\n" + 70 "required1-Specification-Version: 1.0\n" + 71 "required1-Implementation-Version: 1.0.2\n" + 72 "required1-Implementation-Vendor-Id: org.realityforge.spice\n" + 73 "required1-Implementation-URL: http://spice.codehaus.org/required1.jar\n"; 74 final Manifest manifest = getManifest( manifestString ); 75 76 final Extension[] available = Extension.getAvailable( manifest ); 77 assertEquals( "available Count", 0, available.length ); 78 79 final Extension[] required = Extension.getRequired( manifest ); 80 81 assertEquals( "required Count", 1, required.length ); 82 assertEquals( "required Name", "spice.required1", 83 required[ 0 ].getExtensionName() ); 84 assertEquals( "required SpecVendor", null, 85 required[ 0 ].getSpecificationVendor() ); 86 assertEquals( "required SpecVersion", "1.0", 87 required[ 0 ].getSpecificationVersion().toString() ); 88 assertEquals( "required URL", "http://spice.codehaus.org/required1.jar", 89 required[ 0 ].getImplementationURL() ); 90 assertEquals( "required ImpVendor", null, 91 required[ 0 ].getImplementationVendor() ); 92 assertEquals( "required ImpVendorId", "org.realityforge.spice", 93 required[ 0 ].getImplementationVendorID() ); 94 assertEquals( "required ImpVersion", "1.0.2", 95 required[ 0 ].getImplementationVersion().toString() ); 96 } 97 98 public void testMultiRequired() 99 throws Exception 100 { 101 final String manifestString = 102 "Manifest-Version: 1.0\n" + 103 "Extension-List: required1 required2\n" + 104 "required1-Extension-Name: spice.required1\n" + 105 "required1-Specification-Version: 1.0\n" + 106 "required1-Implementation-Version: 1.0.2\n" + 107 "required1-Implementation-Vendor-Id: org.realityforge.spice\n" + 108 "required1-Implementation-URL: http://spice.codehaus.org/required1.jar\n" + 109 "required2-Extension-Name: spice.required2\n" + 110 "required2-Specification-Version: 1.0\n" + 111 "required2-Implementation-Version: 1.0.2\n" + 112 "required2-Implementation-Vendor-Id: org.realityforge.spice\n" + 113 "required2-Implementation-URL: http://spice.codehaus.org/required2.jar\n"; 114 final Manifest manifest = getManifest( manifestString ); 115 116 final Extension[] available = Extension.getAvailable( manifest ); 117 assertEquals( "available Count", 0, available.length ); 118 119 final Extension[] required = Extension.getRequired( manifest ); 120 assertEquals( "required Count", 2, required.length ); 121 assertEquals( "required Name", "spice.required1", 122 required[ 0 ].getExtensionName() ); 123 assertEquals( "required SpecVendor", null, 124 required[ 0 ].getSpecificationVendor() ); 125 assertEquals( "required SpecVersion", "1.0", 126 required[ 0 ].getSpecificationVersion().toString() ); 127 assertEquals( "required URL", "http://spice.codehaus.org/required1.jar", 128 required[ 0 ].getImplementationURL() ); 129 assertEquals( "required ImpVendor", null, 130 required[ 0 ].getImplementationVendor() ); 131 assertEquals( "required ImpVendorId", "org.realityforge.spice", 132 required[ 0 ].getImplementationVendorID() ); 133 assertEquals( "required ImpVersion", "1.0.2", 134 required[ 0 ].getImplementationVersion().toString() ); 135 136 assertEquals( "required Name", "spice.required2", 137 required[ 1 ].getExtensionName() ); 138 assertEquals( "required SpecVendor", null, 139 required[ 1 ].getSpecificationVendor() ); 140 assertEquals( "required SpecVersion", "1.0", 141 required[ 1 ].getSpecificationVersion().toString() ); 142 assertEquals( "required URL", "http://spice.codehaus.org/required2.jar", 143 required[ 1 ].getImplementationURL() ); 144 assertEquals( "required ImpVendor", null, 145 required[ 1 ].getImplementationVendor() ); 146 assertEquals( "required ImpVendorId", "org.realityforge.spice", 147 required[ 1 ].getImplementationVendorID() ); 148 assertEquals( "required ImpVersion", "1.0.2", 149 required[ 1 ].getImplementationVersion().toString() ); 150 } 151 152 public void testAvailableAndRequired() 153 throws Exception 154 { 155 final String manifestString = 156 "Manifest-Version: 1.0\n" + 157 "Extension-Name: spice-configkit\n" + 158 "Specification-Version: 1.0\n" + 159 "Specification-Vendor: Spice Group\n" + 160 "Implementation-Vendor-Id: org.realityforge.spice\n" + 161 "Implementation-Vendor: Spice Group\n" + 162 "Implementation-Version: 2.8Alpha\n" + 163 "Extension-List: required1\n" + 164 "required1-Extension-Name: spice.required1\n" + 165 "required1-Specification-Version: 1.0\n" + 166 "required1-Implementation-Version: 1.0.2\n" + 167 "required1-Implementation-Vendor-Id: org.realityforge.spice\n" + 168 "required1-Implementation-URL: http://spice.codehaus.org/required1.jar\n"; 169 final Manifest manifest = getManifest( manifestString ); 170 171 final Extension[] available = Extension.getAvailable( manifest ); 172 assertEquals( "Available Count", 1, available.length ); 173 assertEquals( "Available Name", "spice-configkit", 174 available[ 0 ].getExtensionName() ); 175 assertEquals( "Available SpecVendor", "Spice Group", 176 available[ 0 ].getSpecificationVendor() ); 177 assertEquals( "Available SpecVersion", "1.0", 178 available[ 0 ].getSpecificationVersion().toString() ); 179 assertEquals( "Available URL", 180 null, 181 available[ 0 ].getImplementationURL() ); 182 assertEquals( "Available ImpVendor", "Spice Group", 183 available[ 0 ].getImplementationVendor() ); 184 assertEquals( "Available ImpVendorId", "org.realityforge.spice", 185 available[ 0 ].getImplementationVendorID() ); 186 assertEquals( "Available ImpVersion", "2.8Alpha", 187 available[ 0 ].getImplementationVersion().toString() ); 188 189 final Extension[] required = Extension.getRequired( manifest ); 190 assertEquals( "required Count", 1, required.length ); 191 assertEquals( "required Name", "spice.required1", 192 required[ 0 ].getExtensionName() ); 193 assertEquals( "required SpecVendor", null, 194 required[ 0 ].getSpecificationVendor() ); 195 assertEquals( "required SpecVersion", "1.0", 196 required[ 0 ].getSpecificationVersion().toString() ); 197 assertEquals( "required URL", "http://spice.codehaus.org/required1.jar", 198 required[ 0 ].getImplementationURL() ); 199 assertEquals( "required ImpVendor", null, 200 required[ 0 ].getImplementationVendor() ); 201 assertEquals( "required ImpVendorId", "org.realityforge.spice", 202 required[ 0 ].getImplementationVendorID() ); 203 assertEquals( "required ImpVersion", "1.0.2", 204 required[ 0 ].getImplementationVersion().toString() ); 205 } 206 207 public void testRequiredWithSpacesAfterAttributes() 208 throws Exception 209 { 210 final String manifestString = 211 "Manifest-Version: 1.0 \n" + 212 "Extension-List: required1 \n" + 213 "required1-Extension-Name: spice.required1 \n" + 214 "required1-Specification-Version: 1.0 \n" + 215 "required1-Implementation-Version: 1.0.2 \n" + 216 "required1-Implementation-Vendor-Id: org.realityforge.spice \n" + 217 "required1-Implementation-URL: http://spice.codehaus.org/required1.jar \n"; 218 final Manifest manifest = getManifest( manifestString ); 219 220 final Extension[] available = Extension.getAvailable( manifest ); 221 assertEquals( "available Count", 0, available.length ); 222 223 final Extension[] required = Extension.getRequired( manifest ); 224 225 assertEquals( "required Count", 1, required.length ); 226 assertEquals( "required Name", "spice.required1", 227 required[ 0 ].getExtensionName() ); 228 assertEquals( "required SpecVendor", null, 229 required[ 0 ].getSpecificationVendor() ); 230 assertEquals( "required SpecVersion", "1.0", 231 required[ 0 ].getSpecificationVersion().toString() ); 232 assertEquals( "required URL", "http://spice.codehaus.org/required1.jar", 233 required[ 0 ].getImplementationURL() ); 234 assertEquals( "required ImpVendor", null, 235 required[ 0 ].getImplementationVendor() ); 236 assertEquals( "required ImpVendorId", "org.realityforge.spice", 237 required[ 0 ].getImplementationVendorID() ); 238 assertEquals( "required ImpVersion", "1.0.2", 239 required[ 0 ].getImplementationVersion().toString() ); 240 } 241 242 public void testAvailableWithSpacesAfterAttributes() 243 throws Exception 244 { 245 final String manifestString = 246 "Manifest-Version: 1.0\n" + 247 "Extension-Name: spice-configkit \n" + 248 "Specification-Version: 1.0 \n" + 249 "Specification-Vendor: Spice Group \n" + 250 "Implementation-Vendor-Id: org.realityforge.spice \n" + 251 "Implementation-Vendor: Spice Group \n" + 252 "Implementation-Version: 2.8Alpha \n"; 253 final Manifest manifest = getManifest( manifestString ); 254 255 final Extension[] required = Extension.getRequired( manifest ); 256 assertEquals( "required Count", 0, required.length ); 257 258 final Extension[] available = Extension.getAvailable( manifest ); 259 260 assertEquals( "Available Count", 1, available.length ); 261 assertEquals( "Available Name", "spice-configkit", 262 available[ 0 ].getExtensionName() ); 263 assertEquals( "Available SpecVendor", "Spice Group", 264 available[ 0 ].getSpecificationVendor() ); 265 assertEquals( "Available SpecVersion", "1.0", 266 available[ 0 ].getSpecificationVersion().toString() ); 267 assertEquals( "Available URL", 268 null, 269 available[ 0 ].getImplementationURL() ); 270 assertEquals( "Available ImpVendor", "Spice Group", 271 available[ 0 ].getImplementationVendor() ); 272 assertEquals( "Available ImpVendorId", "org.realityforge.spice", 273 available[ 0 ].getImplementationVendorID() ); 274 assertEquals( "Available ImpVersion", "2.8Alpha", 275 available[ 0 ].getImplementationVersion().toString() ); 276 } 277 278 public void testCompatabilityRezultsIncompatability() 279 throws Exception 280 { 281 final Extension extension1 = 282 new Extension( "baz", null, null, null, null, null, null ); 283 final Extension extension2 = 284 new Extension( "foo", null, null, null, null, null, null ); 285 assertEquals( Extension.INCOMPATIBLE, 286 extension1.getCompatibilityWith( extension2 ) ); 287 } 288 289 public void testCompatabilityRezultsNeedSpecUpgrade() 290 throws Exception 291 { 292 final Extension extension1 = 293 new Extension( "baz", "1.0", null, null, null, null, null ); 294 final Extension extension2 = 295 new Extension( "baz", "1.1", null, null, null, null, null ); 296 assertEquals( Extension.REQUIRE_SPECIFICATION_UPGRADE, 297 extension1.getCompatibilityWith( extension2 ) ); 298 } 299 300 public void testCompatabilityRezultsCompatLowerVersion() 301 throws Exception 302 { 303 final Extension extension1 = 304 new Extension( "baz", "1.0", null, null, null, null, null ); 305 final Extension extension2 = 306 new Extension( "baz", "0.9", null, null, null, null, null ); 307 assertEquals( Extension.COMPATIBLE, 308 extension1.getCompatibilityWith( extension2 ) ); 309 } 310 311 public void testCompatabilityRezultsCompatEqVersion() 312 throws Exception 313 { 314 final Extension extension1 = 315 new Extension( "baz", "1.0", null, null, null, null, null ); 316 final Extension extension2 = 317 new Extension( "baz", "1.0", null, null, null, null, null ); 318 assertEquals( Extension.COMPATIBLE, 319 extension1.getCompatibilityWith( extension2 ) ); 320 } 321 322 public void testCompatabilityRezultsInCompatWIthNonNullSpecVersion() 323 throws Exception 324 { 325 final Extension extension1 = 326 new Extension( "baz", null, null, null, null, null, null ); 327 final Extension extension2 = 328 new Extension( "baz", "1.0", null, null, null, null, null ); 329 assertEquals( Extension.REQUIRE_SPECIFICATION_UPGRADE, 330 extension1.getCompatibilityWith( extension2 ) ); 331 } 332 333 public void testCompatabilityRezultsInCompatWIthNullSpecVersion() 334 throws Exception 335 { 336 final Extension extension1 = 337 new Extension( "baz", "1.0", null, null, null, null, null ); 338 final Extension extension2 = 339 new Extension( "baz", null, null, null, null, null, null ); 340 assertEquals( Extension.COMPATIBLE, 341 extension1.getCompatibilityWith( extension2 ) ); 342 } 343 344 public void testCompatabilityRezultsInCompatForVendorID() 345 throws Exception 346 { 347 final Extension extension1 = 348 new Extension( "baz", null, null, null, null, "Bob", null ); 349 final Extension extension2 = 350 new Extension( "baz", null, null, null, null, "Bob", null ); 351 assertEquals( Extension.COMPATIBLE, 352 extension1.getCompatibilityWith( extension2 ) ); 353 } 354 355 public void testCompatabilityRezultsInCompatForNullVendorID() 356 throws Exception 357 { 358 final Extension extension1 = 359 new Extension( "baz", null, null, null, null, null, null ); 360 final Extension extension2 = 361 new Extension( "baz", null, null, null, null, "Bob", null ); 362 assertEquals( Extension.REQUIRE_VENDOR_SWITCH, 363 extension1.getCompatibilityWith( extension2 ) ); 364 } 365 366 public void testCompatabilityRezultsInIncompatForNullVendorID() 367 throws Exception 368 { 369 final Extension extension1 = 370 new Extension( "baz", null, null, null, null, null, null ); 371 final Extension extension2 = 372 new Extension( "baz", null, null, null, null, "Bob", null ); 373 assertEquals( Extension.REQUIRE_VENDOR_SWITCH, 374 extension1.getCompatibilityWith( extension2 ) ); 375 } 376 377 private Manifest getManifest( final String manifestString ) 378 throws IOException 379 { 380 final ByteArrayInputStream stream = 381 new ByteArrayInputStream ( manifestString.getBytes() ); 382 return new Manifest ( stream ); 383 } 384 } | Popular Tags |