View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package mockit.internal.expectations;
7   
8   import static java.lang.reflect.Modifier.isNative;
9   import static java.lang.reflect.Modifier.isStatic;
10  
11  import edu.umd.cs.findbugs.annotations.NonNull;
12  import edu.umd.cs.findbugs.annotations.Nullable;
13  
14  import mockit.internal.state.TestRun;
15  
16  public enum ExecutionMode {
17      Regular {
18          @Override
19          boolean isNativeMethodToBeIgnored(int access) {
20              return false;
21          }
22  
23          @Override
24          boolean isToExecuteRealImplementation(@Nullable Object instance) {
25              return instance != null && !TestRun.mockFixture().isInstanceOfMockedClass(instance);
26          }
27      },
28  
29      Partial {
30          @Override
31          boolean isToExecuteRealImplementation(@Nullable Object instance) {
32              return instance != null && !TestRun.mockFixture().isInstanceOfMockedClass(instance);
33          }
34  
35          @Override
36          boolean isWithRealImplementation(@Nullable Object instance) {
37              return instance == null || !TestRun.getExecutingTest().isInjectableMock(instance);
38          }
39  
40          @Override
41          boolean isToExecuteRealObjectOverride(@NonNull Object instance) {
42              return true;
43          }
44      },
45  
46      PerInstance {
47          @Override
48          boolean isStaticMethodToBeIgnored(int access) {
49              return isStatic(access);
50          }
51  
52          @Override
53          boolean isToExecuteRealImplementation(@Nullable Object instance) {
54              return instance == null || TestRun.getExecutingTest().isUnmockedInstance(instance);
55          }
56  
57          @Override
58          boolean isToExecuteRealObjectOverride(@NonNull Object instance) {
59              return TestRun.getExecutingTest().isUnmockedInstance(instance);
60          }
61      };
62  
63      public final boolean isMethodToBeIgnored(int access) {
64          return isStaticMethodToBeIgnored(access) || isNativeMethodToBeIgnored(access);
65      }
66  
67      boolean isStaticMethodToBeIgnored(int access) {
68          return false;
69      }
70  
71      boolean isNativeMethodToBeIgnored(int access) {
72          return isNative(access);
73      }
74  
75      boolean isToExecuteRealImplementation(@Nullable Object instance) {
76          return false;
77      }
78  
79      boolean isWithRealImplementation(@Nullable Object instance) {
80          return false;
81      }
82  
83      boolean isToExecuteRealObjectOverride(@NonNull Object instance) {
84          return false;
85      }
86  }