KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > SerializationTest


1 package com.tirsen.nanning;
2
3 import java.io.*;
4 import java.util.Collection JavaDoc;
5 import java.util.Iterator JavaDoc;
6
7 import com.tirsen.nanning.attribute.AbstractAttributesTest;
8
9 public class SerializationTest extends AbstractAttributesTest {
10     public void testChangedAspectFactoryBetweenSerializations() throws IOException, ClassNotFoundException JavaDoc {
11         AspectFactory singleAspectFactory = new AspectFactory() {
12             public Object JavaDoc newInstance(Class JavaDoc classIdentifier) {
13                 return createSingleMixin().getProxy();
14             }
15
16             public void reinitialize(AspectInstance aspectInstance) {
17                 addInterceptors(aspectInstance, 1);
18             }
19         };
20
21         AspectFactory multipleAspectFactory = new AspectFactory() {
22             public Object JavaDoc newInstance(Class JavaDoc classIdentifier) {
23                 return createMultiMixin().getProxy();
24             }
25
26             public void reinitialize(AspectInstance aspectInstance) {
27                 addInterceptors(aspectInstance, 3);
28             }
29         };
30
31         Aspects.setContextAspectFactory(singleAspectFactory);
32         Intf intf = (Intf) singleAspectFactory.newInstance(Intf.class);
33         Object JavaDoc serialized = serializeObject(intf);
34         assertTrue(serialized instanceof Intf);
35         assertEquals(1, Aspects.getAspectInstance(serialized).getAllInterceptors().size());
36         assertEquals(1, Aspects.getAspectInstance(serialized).getMixins().size());
37
38         Aspects.setContextAspectFactory(multipleAspectFactory);
39         serialized = serializeObject(intf);
40         assertTrue(serialized instanceof Intf);
41         assertEquals(3, Aspects.getAspectInstance(serialized).getAllInterceptors().size());
42
43         // unfortunately added mixins does not (yet?) work :-(
44
assertEquals(1, Aspects.getAspectInstance(serialized).getMixins().size());
45         assertFalse(serialized instanceof TestMixin);
46     }
47
48     private Object JavaDoc serializeObject(Intf intf) throws IOException, ClassNotFoundException JavaDoc {
49         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
50         ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
51         objectOutputStream.writeObject(intf);
52         return new ObjectInputStream(new ByteArrayInputStream(outputStream.toByteArray())).readObject();
53     }
54
55     private AspectInstance createMultiMixin() {
56         AspectInstance aspectInstance = createSingleMixin();
57         MixinInstance mixinInstance = new MixinInstance();
58         mixinInstance.setInterfaceClass(TestMixin.class);
59         mixinInstance.setTarget(new TestMixinImpl());
60         aspectInstance.addMixin(mixinInstance);
61         addInterceptors(aspectInstance, 1);
62         return aspectInstance;
63     }
64
65     private AspectInstance createSingleMixin() {
66         AspectInstance aspectInstance = new AspectInstance(Intf.class);
67         MixinInstance mixinInstance = new MixinInstance();
68         mixinInstance.setInterfaceClass(Intf.class);
69         mixinInstance.setTarget(new IntfImpl());
70         aspectInstance.addMixin(mixinInstance);
71         addInterceptors(aspectInstance, 3);
72         return aspectInstance;
73     }
74
75     private void addInterceptors(AspectInstance aspectInstance, int numberOfInterceptors) {
76         Collection JavaDoc mixins = aspectInstance.getMixins();
77         for (Iterator JavaDoc iterator = mixins.iterator(); iterator.hasNext();) {
78             MixinInstance mixinInstance = (MixinInstance) iterator.next();
79             for (int i = 0; i < numberOfInterceptors; i++) {
80                 mixinInstance.addInterceptor(new NullInterceptor());
81             }
82         }
83     }
84 }
85
Popular Tags