Skip to content

Commit b053175

Browse files
committed
* Updated Mockito and Byte-Buddy for Java 21
* Updated mocking of client libs
1 parent 8475911 commit b053175

File tree

4 files changed

+109
-106
lines changed

4 files changed

+109
-106
lines changed

bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/ClientLibrariesImplTest.java

+31-96
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,14 @@
1717

1818
import java.io.IOException;
1919
import java.io.InputStream;
20-
import java.io.PrintWriter;
21-
import java.io.Writer;
22-
import java.util.ArrayList;
2320
import java.util.Arrays;
24-
import java.util.Collection;
2521
import java.util.HashMap;
2622
import java.util.HashSet;
2723
import java.util.Map;
2824
import java.util.Objects;
2925
import java.util.Set;
3026

27+
import org.apache.commons.lang3.tuple.Pair;
3128
import org.apache.sling.api.SlingHttpServletRequest;
3229
import org.apache.sling.api.resource.LoginException;
3330
import org.apache.sling.api.resource.Resource;
@@ -92,8 +89,6 @@ class ClientLibrariesImplTest {
9289

9390
private final AemContext context = CoreComponentTestContext.newAemContext();
9491

95-
private Map<String,ClientLibrary> allLibraries; // a map of (path, library) of all the libraries
96-
private Map<String,ClientLibrary> librariesMap; // a map of (category, library) of all the libraries
9792
private Map<String,String> jsIncludes; // expected js includes
9893
private Map<String,String> cssIncludes; // expected css includes
9994
private Map<String,String> jsIncludesWithAttributes; // expected js includes when injecting attributes
@@ -156,10 +151,11 @@ void setUp() {
156151
when(carouselClientLibrary.getCategories()).thenReturn(carouselCategories);
157152
when(carouselClientLibrary.getPath()).thenReturn(CAROUSEL_CLIENTLIB_PATH);
158153

159-
librariesMap = new HashMap<>();
160-
librariesMap.put(TEASER_CATEGORY, teaserClientLibrary);
161-
librariesMap.put(ACCORDION_CATEGORY, accordionClientLibrary);
162-
librariesMap.put(CAROUSEL_CATEGORY, carouselClientLibrary);
154+
// a map of (category, library) of all the libraries
155+
Map<String, ClientLibrary> librariesByCategory = new HashMap<>();
156+
librariesByCategory.put(TEASER_CATEGORY, teaserClientLibrary);
157+
librariesByCategory.put(ACCORDION_CATEGORY, accordionClientLibrary);
158+
librariesByCategory.put(CAROUSEL_CATEGORY, carouselClientLibrary);
163159

164160
// Mock HtmlLibrary
165161
HtmlLibrary teaserJsHtmlLibrary = mock(HtmlLibrary.class);
@@ -186,99 +182,37 @@ void setUp() {
186182
} catch (IOException e) {
187183
fail(String.format("Unable to get input stream from the library: %s", e.getMessage()));
188184
}
189-
190-
// Mock htmlLibraryManager.getLibraries()
191-
allLibraries = new HashMap<>();
192-
allLibraries.put(TEASER_CLIENTLIB_PATH, teaserClientLibrary);
193-
allLibraries.put(ACCORDION_CLIENTLIB_PATH, accordionClientLibrary);
194-
allLibraries.put(CAROUSEL_CLIENTLIB_PATH, carouselClientLibrary);
195-
HtmlLibraryManager htmlLibraryManager = context.registerInjectActivateService(mock(MockHtmlLibraryManager.class));
196-
when(htmlLibraryManager.getLibraries()).thenReturn(allLibraries);
197-
198-
// Mock htmlLibraryManager.getLibraries(a, b, c, d)
199-
doAnswer(invocation -> {
200-
Object[] args = invocation.getArguments();
201-
String[] categories = (String[]) args[0];
202-
Collection<ClientLibrary> libraries = new ArrayList<>();
203-
for (String category : categories) {
204-
libraries.add(librariesMap.get(category));
205-
}
206-
return libraries;
207-
}).when(htmlLibraryManager).getLibraries(any(String[].class), any(LibraryType.class), anyBoolean(), anyBoolean());
208-
209-
// Mock htmlLibraryManager.getLibrary(libraryType, clientlib.getPath())
210-
when(htmlLibraryManager.getLibrary(eq(LibraryType.JS), eq(TEASER_CLIENTLIB_PATH))).thenReturn(teaserJsHtmlLibrary);
211-
when(htmlLibraryManager.getLibrary(eq(LibraryType.JS), eq(ACCORDION_CLIENTLIB_PATH))).thenReturn(accordionJsHtmlLibrary);
212-
when(htmlLibraryManager.getLibrary(eq(LibraryType.JS), eq(CAROUSEL_CLIENTLIB_PATH))).thenReturn(carouselJsHtmlLibrary);
213-
when(htmlLibraryManager.getLibrary(eq(LibraryType.CSS), eq(TEASER_CLIENTLIB_PATH))).thenReturn(teaserCssHtmlLibrary);
214-
when(htmlLibraryManager.getLibrary(eq(LibraryType.CSS), eq(ACCORDION_CLIENTLIB_PATH))).thenReturn(accordionCssHtmlLibrary);
215-
when(htmlLibraryManager.getLibrary(eq(LibraryType.CSS), eq(CAROUSEL_CLIENTLIB_PATH))).thenReturn(carouselCssHtmlLibrary);
216-
217-
// Mock htmlLibraryManager.writeJsInclude
218-
try {
219-
doAnswer(invocation -> {
220-
Object[] args = invocation.getArguments();
221-
StringBuilder scriptIncludes = new StringBuilder();
222-
for (int i = 2; i < args.length; i++) {
223-
String category = (String) args[i];
224-
String script = jsIncludes.get(category);
225-
scriptIncludes.append(script);
226-
}
227-
((PrintWriter)args[1]).write(scriptIncludes.toString());
228-
return null;
229-
}).when(htmlLibraryManager).writeJsInclude(any(SlingHttpServletRequest.class), any(Writer.class), any(String.class));
230-
} catch (IOException e) {
231-
fail(String.format("Unable to write JS include: %s", e.getMessage()));
232-
}
233-
234-
// Mock htmlLibraryManager.writeCssInclude
235-
try {
236-
doAnswer(invocation -> {
237-
Object[] args = invocation.getArguments();
238-
StringBuilder linkIncludes = new StringBuilder();
239-
for (int i = 2; i < args.length; i++) {
240-
String category = (String) args[i];
241-
String link = cssIncludes.get(category);
242-
linkIncludes.append(link);
243-
}
244-
((PrintWriter)args[1]).write(linkIncludes.toString());
245-
return null;
246-
}).when(htmlLibraryManager).writeCssInclude(any(SlingHttpServletRequest.class), any(Writer.class), any(String.class));
247-
} catch (IOException e) {
248-
fail(String.format("Unable to write CSS include: %s", e.getMessage()));
249-
}
250-
251-
// Mock htmlLibraryManager.writeIncludes
252-
try {
253-
doAnswer(invocation -> {
254-
Object[] args = invocation.getArguments();
255-
StringBuilder includes = new StringBuilder();
256-
for (int i = 2; i < args.length; i++) {
257-
String category = (String) args[i];
258-
String script = jsIncludes.get(category);
259-
includes.append(script);
260-
}
261-
for (int i = 2; i < args.length; i++) {
262-
String category = (String) args[i];
263-
String link = cssIncludes.get(category);
264-
includes.append(link);
265-
}
266-
((PrintWriter)args[1]).write(includes.toString());
267-
return null;
268-
}).when(htmlLibraryManager).writeIncludes(any(SlingHttpServletRequest.class), any(Writer.class), any(String.class));
269-
} catch (IOException e) {
270-
fail(String.format("Unable to write include: %s", e.getMessage()));
271-
}
272-
185+
Map<Pair<String, LibraryType>, HtmlLibrary> htmlLibrariesByPathAndType = new HashMap<>();
186+
htmlLibrariesByPathAndType.put(Pair.of(TEASER_CLIENTLIB_PATH, LibraryType.JS), teaserJsHtmlLibrary);
187+
htmlLibrariesByPathAndType.put(Pair.of(ACCORDION_CLIENTLIB_PATH, LibraryType.JS), accordionJsHtmlLibrary);
188+
htmlLibrariesByPathAndType.put(Pair.of(CAROUSEL_CLIENTLIB_PATH, LibraryType.JS), carouselJsHtmlLibrary);
189+
htmlLibrariesByPathAndType.put(Pair.of(TEASER_CLIENTLIB_PATH, LibraryType.CSS), teaserCssHtmlLibrary);
190+
htmlLibrariesByPathAndType.put(Pair.of(ACCORDION_CLIENTLIB_PATH, LibraryType.CSS), accordionCssHtmlLibrary);
191+
htmlLibrariesByPathAndType.put(Pair.of(CAROUSEL_CLIENTLIB_PATH, LibraryType.CSS), carouselCssHtmlLibrary);
192+
193+
// a map of (path, library) of all the libraries
194+
Map<String, ClientLibrary> librariesByPath = new HashMap<>();
195+
librariesByPath.put(TEASER_CLIENTLIB_PATH, teaserClientLibrary);
196+
librariesByPath.put(ACCORDION_CLIENTLIB_PATH, accordionClientLibrary);
197+
librariesByPath.put(CAROUSEL_CLIENTLIB_PATH, carouselClientLibrary);
198+
199+
HtmlLibraryManager htmlLibraryManager = new MockHtmlLibraryManager(mock(ClientLibrary.class),
200+
htmlLibrariesByPathAndType,
201+
librariesByPath,
202+
librariesByCategory,
203+
jsIncludes,
204+
cssIncludes);
205+
context.registerInjectActivateService(htmlLibraryManager);
273206
}
274207

275208
@Test
276209
void testGetCategories() {
277210
PageManager pageManager = context.pageManager();
278211
Page page = pageManager.getPage(ROOT_PAGE);
279212
Map<String, Object> attributes = new HashMap<>();
280-
attributes.put(ClientLibraries.OPTION_RESOURCE_TYPES, Utils.getPageResourceTypes(page, context.request(), mock(ModelFactory.class)));
281213
ClientLibrariesImpl clientlibs = Objects.requireNonNull((ClientLibrariesImpl) getClientLibrariesUnderTest(ROOT_PAGE, attributes));
214+
attributes.put(ClientLibraries.OPTION_RESOURCE_TYPES, Utils.getPageResourceTypes(page, context.request(), mock(ModelFactory.class)));
215+
clientlibs = Objects.requireNonNull((ClientLibrariesImpl) getClientLibrariesUnderTest(ROOT_PAGE, attributes));
282216

283217
Set<String> categories = new HashSet<>();
284218
categories.add(TEASER_CATEGORY);
@@ -520,7 +454,8 @@ private ClientLibraries getClientLibrariesUnderTest(String path, Map<String,Obje
520454
}
521455
}
522456
context.request().setResource(resource);
523-
return context.request().adaptTo(ClientLibraries.class);
457+
ClientLibraries clientLibraries = context.request().adaptTo(ClientLibraries.class);
458+
return clientLibraries;
524459
}
525460
return null;
526461
}

parent/pom.xml

+17-4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
<frontend-maven-plugin.version>1.11.3</frontend-maven-plugin.version>
6262
<node.version>v16.13.1</node.version>
6363
<npm.version>8.3.0</npm.version>
64-
<mockitio.version>4.8.1</mockitio.version>
64+
<mockito.version>5.2.0</mockito.version>
65+
<byte-buddy.version>1.14.11</byte-buddy.version>
6566
<maven.compiler.source>${aem.java.version}</maven.compiler.source>
6667
<maven.compiler.target>${aem.java.version}</maven.compiler.target>
6768
<aem.selenium.base.it.version>0.2.48</aem.selenium.base.it.version>
@@ -448,7 +449,7 @@
448449
<plugin>
449450
<groupId>com.github.spotbugs</groupId>
450451
<artifactId>spotbugs-maven-plugin</artifactId>
451-
<version>4.7.2.1</version>
452+
<version>4.7.3.6</version>
452453
<configuration>
453454
<effort>Max</effort>
454455
<xmlOutput>true</xmlOutput>
@@ -778,13 +779,25 @@
778779
<dependency>
779780
<groupId>org.mockito</groupId>
780781
<artifactId>mockito-core</artifactId>
781-
<version>${mockitio.version}</version>
782+
<version>${mockito.version}</version>
782783
<scope>test</scope>
783784
</dependency>
784785
<dependency>
785786
<groupId>org.mockito</groupId>
786787
<artifactId>mockito-junit-jupiter</artifactId>
787-
<version>${mockitio.version}</version>
788+
<version>${mockito.version}</version>
789+
<scope>test</scope>
790+
</dependency>
791+
<dependency>
792+
<groupId>net.bytebuddy</groupId>
793+
<artifactId>byte-buddy</artifactId>
794+
<version>${byte-buddy.version}</version>
795+
<scope>test</scope>
796+
</dependency>
797+
<dependency>
798+
<groupId>net.bytebuddy</groupId>
799+
<artifactId>byte-buddy-agent</artifactId>
800+
<version>${byte-buddy.version}</version>
788801
<scope>test</scope>
789802
</dependency>
790803
<dependency>

testing/junit/core/src/main/java/com/adobe/cq/wcm/core/components/testing/MockHtmlLibraryManager.java

+60-5
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717

1818
import java.io.IOException;
1919
import java.io.Writer;
20+
import java.util.ArrayList;
2021
import java.util.Arrays;
2122
import java.util.Collection;
2223
import java.util.Collections;
2324
import java.util.Map;
2425

2526
import javax.jcr.RepositoryException;
2627

28+
import org.apache.commons.lang3.tuple.Pair;
2729
import org.apache.sling.api.SlingHttpServletRequest;
2830
import org.osgi.service.component.annotations.Component;
2931

@@ -37,20 +39,46 @@
3739
)
3840
public class MockHtmlLibraryManager implements HtmlLibraryManager {
3941

42+
private Map<Pair<String, LibraryType>, HtmlLibrary> htmlLibrariesByPathAndType;
4043
private Collection<ClientLibrary> clientLibraries;
44+
private Map<String,ClientLibrary> librariesByPath; // a map of (path, library) of all the libraries
45+
private Map<String,ClientLibrary> librariesByCategory; // a map of (category, library) of all the libraries
46+
private Map<String,String> jsIncludes; // expected js includes
47+
private Map<String,String> cssIncludes; // expected css includes
48+
49+
public MockHtmlLibraryManager(ClientLibrary mockClientLibrary,
50+
Map<Pair<String, LibraryType>, HtmlLibrary> htmlLibrariesByPathAndType,
51+
Map<String,ClientLibrary> librariesByPath,
52+
Map<String,ClientLibrary> librariesByCategory,
53+
Map<String,String> jsIncludes,
54+
Map<String,String> cssIncludes) {
55+
clientLibraries = Arrays.asList(mockClientLibrary);
56+
this.htmlLibrariesByPathAndType = htmlLibrariesByPathAndType;
57+
this.librariesByPath = librariesByPath;
58+
this.librariesByCategory = librariesByCategory;
59+
this.jsIncludes = jsIncludes;
60+
this.cssIncludes = cssIncludes;
61+
}
4162

4263
public MockHtmlLibraryManager(ClientLibrary mockClientLibrary) {
4364
clientLibraries = Arrays.asList(mockClientLibrary);
4465
}
4566

4667
@Override
4768
public Map<String, ClientLibrary> getLibraries() {
48-
return null;
69+
return librariesByPath;
4970
}
5071

5172
@Override
5273
public void writeJsInclude(SlingHttpServletRequest slingHttpServletRequest, Writer writer, String... strings) throws IOException {
53-
74+
if (jsIncludes != null) {
75+
StringBuilder scriptIncludes = new StringBuilder();
76+
for (String category : strings) {
77+
String script = jsIncludes.get(category);
78+
scriptIncludes.append(script);
79+
}
80+
writer.write(scriptIncludes.toString());
81+
}
5482
}
5583

5684
@Override
@@ -61,13 +89,19 @@ public void writeJsInclude(SlingHttpServletRequest slingHttpServletRequest, Writ
6189

6290
@Override
6391
public void writeCssInclude(SlingHttpServletRequest slingHttpServletRequest, Writer writer, String... strings) throws IOException {
64-
92+
if (cssIncludes != null) {
93+
StringBuilder linkIncludes = new StringBuilder();
94+
for (String category : strings) {
95+
String link = cssIncludes.get(category);
96+
linkIncludes.append(link);
97+
}
98+
writer.write(linkIncludes.toString());
99+
}
65100
}
66101

67102
@Override
68103
public void writeCssInclude(SlingHttpServletRequest slingHttpServletRequest, Writer writer, boolean b, String... strings)
69104
throws IOException {
70-
71105
}
72106

73107
@Override
@@ -77,11 +111,25 @@ public void writeThemeInclude(SlingHttpServletRequest slingHttpServletRequest, W
77111

78112
@Override
79113
public void writeIncludes(SlingHttpServletRequest slingHttpServletRequest, Writer writer, String... strings) throws IOException {
80-
114+
if (jsIncludes != null && cssIncludes != null) {
115+
StringBuilder includes = new StringBuilder();
116+
for (String category : strings) {
117+
String script = jsIncludes.get(category);
118+
includes.append(script);
119+
}
120+
for (String category : strings) {
121+
String link = cssIncludes.get(category);
122+
includes.append(link);
123+
}
124+
writer.write(includes.toString());
125+
}
81126
}
82127

83128
@Override
84129
public HtmlLibrary getLibrary(LibraryType libraryType, String s) {
130+
if (htmlLibrariesByPathAndType != null) {
131+
return htmlLibrariesByPathAndType.get(Pair.of(s, libraryType));
132+
}
85133
return null;
86134
}
87135

@@ -107,6 +155,13 @@ public boolean isGzipEnabled() {
107155

108156
@Override
109157
public Collection<ClientLibrary> getLibraries(String[] strings, LibraryType libraryType, boolean b, boolean b1) {
158+
if (librariesByCategory != null) {
159+
Collection<ClientLibrary> libraries = new ArrayList<>();
160+
for (String category : strings) {
161+
libraries.add(librariesByCategory.get(category));
162+
}
163+
return libraries;
164+
}
110165
return Collections.unmodifiableCollection(clientLibraries);
111166
}
112167

testing/junit/core/src/main/java/com/adobe/cq/wcm/core/components/testing/package-info.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
~ limitations under the License.
1515
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1616

17-
@Version("2.3.1")
17+
@Version("2.4.0")
1818
package com.adobe.cq.wcm.core.components.testing;
1919

2020
import org.osgi.annotation.versioning.Version;

0 commit comments

Comments
 (0)