Skip to content

Commit c8dc3d3

Browse files
committed
[Misc] Better support for jakarta.inject in the test framework
1 parent 020854f commit c8dc3d3

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

xwiki-commons-tools/xwiki-commons-tool-test/xwiki-commons-tool-test-component/src/main/java/org/xwiki/test/junit5/mockito/MockitoComponentManagerExtension.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,21 @@ public void beforeEach(ExtensionContext context) throws Exception
120120
}
121121
}
122122

123+
private String getFieldNamed(Field field)
124+
{
125+
jakarta.inject.Named jakartaAnnotation = field.getAnnotation(jakarta.inject.Named.class);
126+
if (jakartaAnnotation != null) {
127+
return jakartaAnnotation.value();
128+
}
129+
130+
Named javaxAnnotation = field.getAnnotation(Named.class);
131+
if (javaxAnnotation != null) {
132+
return javaxAnnotation.value();
133+
}
134+
135+
return null;
136+
}
137+
123138
private void initializeTestInstance(Object testInstance, ExtensionContext context) throws Exception
124139
{
125140
// Make sure tests don't leak one on another
@@ -164,13 +179,13 @@ private void initializeTestInstance(Object testInstance, ExtensionContext contex
164179
MockComponent mockComponentAnnotation = field.getAnnotation(MockComponent.class);
165180
if (mockComponentAnnotation != null) {
166181
// Get the hint from the @Named annotation (if any)
167-
Named namedAnnotation = field.getAnnotation(Named.class);
182+
String named = getFieldNamed(field);
168183
Class<?> classToMock = mockComponentAnnotation.classToMock() != MockComponent.class
169184
? mockComponentAnnotation.classToMock() : null;
170185
Object mockComponent;
171-
if (namedAnnotation != null) {
186+
if (named != null) {
172187
mockComponent =
173-
mcm.registerMockComponent(field.getGenericType(), namedAnnotation.value(), classToMock, true);
188+
mcm.registerMockComponent(field.getGenericType(), named, classToMock, true);
174189
} else {
175190
mockComponent = mcm.registerMockComponent(field.getGenericType(), null, classToMock, true);
176191
}
@@ -226,16 +241,14 @@ protected void processSingleInjectMockComponents(Object testInstance, Field fiel
226241
private void processInjectAnnotations(Object testInstance, MockitoComponentManager mcm) throws Exception
227242
{
228243
for (Field field : ReflectionUtils.getAllFields(testInstance.getClass())) {
229-
Inject injectAnnotation = field.getAnnotation(Inject.class);
230-
if (injectAnnotation != null) {
231-
Named namedAnnotation = field.getAnnotation(Named.class);
232-
processSingleInjectAnnotations(testInstance, field, namedAnnotation, mcm);
244+
if (field.getAnnotation(Inject.class) != null || field.getAnnotation(jakarta.inject.Inject.class) != null) {
245+
processSingleInjectAnnotations(testInstance, field, getFieldNamed(field), mcm);
233246
}
234247
}
235248
}
236249

237250
private void processSingleInjectAnnotations(Object testInstance, Field field,
238-
Named namedAnnotation, MockitoComponentManager mcm) throws Exception
251+
String namedAnnotation, MockitoComponentManager mcm) throws Exception
239252
{
240253
// Must be an instance
241254
if (!field.getType().isInterface()) {
@@ -244,7 +257,7 @@ private void processSingleInjectAnnotations(Object testInstance, Field field,
244257
}
245258

246259
Object component = (namedAnnotation == null) ? mcm.getInstance(field.getGenericType())
247-
: mcm.getInstance(field.getGenericType(), namedAnnotation.value());
260+
: mcm.getInstance(field.getGenericType(), namedAnnotation);
248261
ReflectionUtils.setFieldValue(testInstance, field.getName(), component);
249262
}
250263

0 commit comments

Comments
 (0)