1 package org.apache.onami.test.mock.guice;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.lang.reflect.Field;
23 import java.util.Map;
24
25 import org.apache.onami.test.annotation.Mock;
26 import org.apache.onami.test.reflection.AnnotationHandler;
27 import org.apache.onami.test.reflection.ClassVisitor;
28 import org.apache.onami.test.reflection.HandleException;
29
30 import com.google.inject.TypeLiteral;
31 import com.google.inject.spi.TypeEncounter;
32 import com.google.inject.spi.TypeListener;
33
34
35
36
37
38
39
40
41
42
43
44
45 public class MockTypeListener
46 implements TypeListener
47 {
48
49 private final Map<Field, Object> mockedObjects;
50
51
52
53
54
55
56 public MockTypeListener( Map<Field, Object> mockedObjects )
57 {
58 this.mockedObjects = mockedObjects;
59 }
60
61
62
63
64 public <I> void hear( final TypeLiteral<I> typeLiteral, final TypeEncounter<I> typeEncounter )
65 {
66 try
67 {
68 new ClassVisitor()
69 .registerHandler( Mock.class, new AnnotationHandler<Mock, Field>()
70 {
71
72 public void handle( Mock annotation, Field field )
73 throws HandleException
74 {
75 typeEncounter.register( new MockMembersInjector<I>( field, mockedObjects ) );
76 }
77
78 } )
79 .visit( typeLiteral.getRawType() );
80 }
81 catch ( HandleException e )
82 {
83 typeEncounter.addError( e );
84 }
85 }
86
87 }