1 package com.tirsen.nanning; 2 3 import java.io.*; 4 import java.util.Collection ; 5 import java.util.Iterator ; 6 7 import com.tirsen.nanning.attribute.AbstractAttributesTest; 8 9 public class SerializationTest extends AbstractAttributesTest { 10 public void testChangedAspectFactoryBetweenSerializations() throws IOException, ClassNotFoundException { 11 AspectFactory singleAspectFactory = new AspectFactory() { 12 public Object newInstance(Class 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 newInstance(Class 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 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 assertEquals(1, Aspects.getAspectInstance(serialized).getMixins().size()); 45 assertFalse(serialized instanceof TestMixin); 46 } 47 48 private Object serializeObject(Intf intf) throws IOException, ClassNotFoundException { 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 mixins = aspectInstance.getMixins(); 77 for (Iterator 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 |