• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2007 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 package org.mockito.internal.creation;
6 
7 import org.mockito.cglib.proxy.Callback;
8 import org.mockito.cglib.proxy.Factory;
9 import org.mockito.exceptions.base.MockitoException;
10 import org.mockito.internal.InternalMockHandler;
11 import org.mockito.invocation.MockHandler;
12 import org.mockito.mock.MockCreationSettings;
13 import org.mockito.plugins.MockMaker;
14 import org.mockito.internal.creation.jmock.ClassImposterizer;
15 
16 /**
17  * A MockMaker that uses cglib to generate mocks on a JVM.
18  */
19 public final class CglibMockMaker implements MockMaker {
20 
createMock(MockCreationSettings<T> settings, MockHandler handler)21     public <T> T createMock(MockCreationSettings<T> settings, MockHandler handler) {
22         InternalMockHandler mockitoHandler = cast(handler);
23         new AcrossJVMSerializationFeature().enableSerializationAcrossJVM(settings);
24         return ClassImposterizer.INSTANCE.imposterise(
25                 new MethodInterceptorFilter(mockitoHandler, settings), settings.getTypeToMock(), settings.getExtraInterfaces());
26     }
27 
cast(MockHandler handler)28     private InternalMockHandler cast(MockHandler handler) {
29         if (!(handler instanceof InternalMockHandler)) {
30             throw new MockitoException("At the moment you cannot provide own implementations of MockHandler." +
31                     "\nPlease see the javadocs for the MockMaker interface.");
32         }
33         return (InternalMockHandler) handler;
34     }
35 
resetMock(Object mock, MockHandler newHandler, MockCreationSettings settings)36     public void resetMock(Object mock, MockHandler newHandler, MockCreationSettings settings) {
37         ((Factory) mock).setCallback(0, new MethodInterceptorFilter(cast(newHandler), settings));
38     }
39 
getHandler(Object mock)40     public MockHandler getHandler(Object mock) {
41         if (!(mock instanceof Factory)) {
42             return null;
43         }
44         Factory factory = (Factory) mock;
45         Callback callback = factory.getCallback(0);
46         if (!(callback instanceof MethodInterceptorFilter)) {
47             return null;
48         }
49         return ((MethodInterceptorFilter) callback).getHandler();
50     }
51 }
52