1 /*
2 * Copyright (C) The Spice Group. All rights reserved.
3 *
4 * This software is published under the terms of the Spice
5 * Software License version 1.1, a copy of which has been included
6 * with this distribution in the LICENSE.txt file.
7 */
8 package org.codehaus.spice.extension;
9
10 import java.io.ByteArrayInputStream;
11 import java.io.IOException;
12 import java.util.jar.Manifest;
13 import junit.framework.TestCase;
14
15 /***
16 * TestCases for Extension.
17 *
18 * @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
19 * @version $Revision: 1.1 $ $Date: 2003/12/02 07:56:59 $
20 */
21 public class ExtensionTestCase
22 extends TestCase
23 {
24 public ExtensionTestCase( final String name )
25 {
26 super( name );
27 }
28
29 public void testAvailable()
30 throws Exception
31 {
32 final String manifestString =
33 "Manifest-Version: 1.0\n" +
34 "Extension-Name: spice-configkit\n" +
35 "Specification-Version: 1.0\n" +
36 "Specification-Vendor: Spice Group\n" +
37 "Implementation-Vendor-Id: org.realityforge.spice\n" +
38 "Implementation-Vendor: Spice Group\n" +
39 "Implementation-Version: 2.8Alpha\n";
40 final Manifest manifest = getManifest( manifestString );
41
42 final Extension[] required = Extension.getRequired( manifest );
43 assertEquals( "required Count", 0, required.length );
44
45 final Extension[] available = Extension.getAvailable( manifest );
46
47 assertEquals( "Available Count", 1, available.length );
48 assertEquals( "Available Name", "spice-configkit",
49 available[ 0 ].getExtensionName() );
50 assertEquals( "Available SpecVendor", "Spice Group",
51 available[ 0 ].getSpecificationVendor() );
52 assertEquals( "Available SpecVersion", "1.0",
53 available[ 0 ].getSpecificationVersion().toString() );
54 assertEquals( "Available URL", null, 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.realityforge.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.realityforge.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.realityforge.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.realityforge.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.realityforge.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.realityforge.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.realityforge.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", null, available[ 0 ].getImplementationURL() );
180 assertEquals( "Available ImpVendor", "Spice Group",
181 available[ 0 ].getImplementationVendor() );
182 assertEquals( "Available ImpVendorId", "org.realityforge.spice",
183 available[ 0 ].getImplementationVendorID() );
184 assertEquals( "Available ImpVersion", "2.8Alpha",
185 available[ 0 ].getImplementationVersion().toString() );
186
187 final Extension[] required = Extension.getRequired( manifest );
188 assertEquals( "required Count", 1, required.length );
189 assertEquals( "required Name", "spice.required1",
190 required[ 0 ].getExtensionName() );
191 assertEquals( "required SpecVendor", null,
192 required[ 0 ].getSpecificationVendor() );
193 assertEquals( "required SpecVersion", "1.0",
194 required[ 0 ].getSpecificationVersion().toString() );
195 assertEquals( "required URL", "http://spice.realityforge.org/required1.jar",
196 required[ 0 ].getImplementationURL() );
197 assertEquals( "required ImpVendor", null,
198 required[ 0 ].getImplementationVendor() );
199 assertEquals( "required ImpVendorId", "org.realityforge.spice",
200 required[ 0 ].getImplementationVendorID() );
201 assertEquals( "required ImpVersion", "1.0.2",
202 required[ 0 ].getImplementationVersion().toString() );
203 }
204
205 public void testRequiredWithSpacesAfterAttributes()
206 throws Exception
207 {
208 final String manifestString =
209 "Manifest-Version: 1.0 \n" +
210 "Extension-List: required1 \n" +
211 "required1-Extension-Name: spice.required1 \n" +
212 "required1-Specification-Version: 1.0 \n" +
213 "required1-Implementation-Version: 1.0.2 \n" +
214 "required1-Implementation-Vendor-Id: org.realityforge.spice \n" +
215 "required1-Implementation-URL: http://spice.realityforge.org/required1.jar \n";
216 final Manifest manifest = getManifest( manifestString );
217
218 final Extension[] available = Extension.getAvailable( manifest );
219 assertEquals( "available Count", 0, available.length );
220
221 final Extension[] required = Extension.getRequired( manifest );
222
223 assertEquals( "required Count", 1, required.length );
224 assertEquals( "required Name", "spice.required1",
225 required[ 0 ].getExtensionName() );
226 assertEquals( "required SpecVendor", null,
227 required[ 0 ].getSpecificationVendor() );
228 assertEquals( "required SpecVersion", "1.0",
229 required[ 0 ].getSpecificationVersion().toString() );
230 assertEquals( "required URL", "http://spice.realityforge.org/required1.jar",
231 required[ 0 ].getImplementationURL() );
232 assertEquals( "required ImpVendor", null,
233 required[ 0 ].getImplementationVendor() );
234 assertEquals( "required ImpVendorId", "org.realityforge.spice",
235 required[ 0 ].getImplementationVendorID() );
236 assertEquals( "required ImpVersion", "1.0.2",
237 required[ 0 ].getImplementationVersion().toString() );
238 }
239
240 public void testAvailableWithSpacesAfterAttributes()
241 throws Exception
242 {
243 final String manifestString =
244 "Manifest-Version: 1.0\n" +
245 "Extension-Name: spice-configkit \n" +
246 "Specification-Version: 1.0 \n" +
247 "Specification-Vendor: Spice Group \n" +
248 "Implementation-Vendor-Id: org.realityforge.spice \n" +
249 "Implementation-Vendor: Spice Group \n" +
250 "Implementation-Version: 2.8Alpha \n";
251 final Manifest manifest = getManifest( manifestString );
252
253 final Extension[] required = Extension.getRequired( manifest );
254 assertEquals( "required Count", 0, required.length );
255
256 final Extension[] available = Extension.getAvailable( manifest );
257
258 assertEquals( "Available Count", 1, available.length );
259 assertEquals( "Available Name", "spice-configkit",
260 available[ 0 ].getExtensionName() );
261 assertEquals( "Available SpecVendor", "Spice Group",
262 available[ 0 ].getSpecificationVendor() );
263 assertEquals( "Available SpecVersion", "1.0",
264 available[ 0 ].getSpecificationVersion().toString() );
265 assertEquals( "Available URL", null, available[ 0 ].getImplementationURL() );
266 assertEquals( "Available ImpVendor", "Spice Group",
267 available[ 0 ].getImplementationVendor() );
268 assertEquals( "Available ImpVendorId", "org.realityforge.spice",
269 available[ 0 ].getImplementationVendorID() );
270 assertEquals( "Available ImpVersion", "2.8Alpha",
271 available[ 0 ].getImplementationVersion().toString() );
272 }
273
274 public void testCompatabilityRezultsIncompatability()
275 throws Exception
276 {
277 final Extension extension1 =
278 new Extension( "baz", null, null, null, null, null, null );
279 final Extension extension2 =
280 new Extension( "foo", null, null, null, null, null, null );
281 assertEquals( Extension.INCOMPATIBLE,
282 extension1.getCompatibilityWith( extension2 ) );
283 }
284
285 public void testCompatabilityRezultsNeedSpecUpgrade()
286 throws Exception
287 {
288 final Extension extension1 =
289 new Extension( "baz", "1.0", null, null, null, null, null );
290 final Extension extension2 =
291 new Extension( "baz", "1.1", null, null, null, null, null );
292 assertEquals( Extension.REQUIRE_SPECIFICATION_UPGRADE,
293 extension1.getCompatibilityWith( extension2 ) );
294 }
295
296 public void testCompatabilityRezultsCompatLowerVersion()
297 throws Exception
298 {
299 final Extension extension1 =
300 new Extension( "baz", "1.0", null, null, null, null, null );
301 final Extension extension2 =
302 new Extension( "baz", "0.9", null, null, null, null, null );
303 assertEquals( Extension.COMPATIBLE,
304 extension1.getCompatibilityWith( extension2 ) );
305 }
306
307 public void testCompatabilityRezultsCompatEqVersion()
308 throws Exception
309 {
310 final Extension extension1 =
311 new Extension( "baz", "1.0", null, null, null, null, null );
312 final Extension extension2 =
313 new Extension( "baz", "1.0", null, null, null, null, null );
314 assertEquals( Extension.COMPATIBLE,
315 extension1.getCompatibilityWith( extension2 ) );
316 }
317
318 public void testCompatabilityRezultsInCompatWIthNonNullSpecVersion()
319 throws Exception
320 {
321 final Extension extension1 =
322 new Extension( "baz", null, null, null, null, null, null );
323 final Extension extension2 =
324 new Extension( "baz", "1.0", null, null, null, null, null );
325 assertEquals( Extension.REQUIRE_SPECIFICATION_UPGRADE,
326 extension1.getCompatibilityWith( extension2 ) );
327 }
328
329 public void testCompatabilityRezultsInCompatWIthNullSpecVersion()
330 throws Exception
331 {
332 final Extension extension1 =
333 new Extension( "baz", "1.0", null, null, null, null, null );
334 final Extension extension2 =
335 new Extension( "baz", null, null, null, null, null, null );
336 assertEquals( Extension.COMPATIBLE,
337 extension1.getCompatibilityWith( extension2 ) );
338 }
339
340 public void testCompatabilityRezultsInCompatForVendorID()
341 throws Exception
342 {
343 final Extension extension1 =
344 new Extension( "baz", null, null, null, null, "Bob", null );
345 final Extension extension2 =
346 new Extension( "baz", null, null, null, null, "Bob", null );
347 assertEquals( Extension.COMPATIBLE,
348 extension1.getCompatibilityWith( extension2 ) );
349 }
350
351 public void testCompatabilityRezultsInCompatForNullVendorID()
352 throws Exception
353 {
354 final Extension extension1 =
355 new Extension( "baz", null, null, null, null, null, null );
356 final Extension extension2 =
357 new Extension( "baz", null, null, null, null, "Bob", null );
358 assertEquals( Extension.REQUIRE_VENDOR_SWITCH,
359 extension1.getCompatibilityWith( extension2 ) );
360 }
361
362 public void testCompatabilityRezultsInIncompatForNullVendorID()
363 throws Exception
364 {
365 final Extension extension1 =
366 new Extension( "baz", null, null, null, null, null, null );
367 final Extension extension2 =
368 new Extension( "baz", null, null, null, null, "Bob", null );
369 assertEquals( Extension.REQUIRE_VENDOR_SWITCH,
370 extension1.getCompatibilityWith( extension2 ) );
371 }
372
373 private Manifest getManifest( final String manifestString )
374 throws IOException
375 {
376 final ByteArrayInputStream stream =
377 new ByteArrayInputStream( manifestString.getBytes() );
378 return new Manifest( stream );
379 }
380 }
This page was automatically generated by Maven