33 */
44package org .ligoj .bootstrap .resource .system .plugin ;
55
6- import java .io .ByteArrayInputStream ;
7- import java .io .ByteArrayOutputStream ;
8- import java .io .InputStream ;
9- import java .net .URL ;
10- import java .nio .charset .StandardCharsets ;
11- import java .util .ArrayList ;
12- import java .util .Collections ;
13-
146import jakarta .servlet .ServletConfig ;
157import jakarta .servlet .ServletContext ;
168import jakarta .servlet .ServletException ;
179import jakarta .servlet .http .HttpServletRequest ;
1810import jakarta .servlet .http .HttpServletResponse ;
19-
2011import org .junit .jupiter .api .AfterEach ;
2112import org .junit .jupiter .api .Assertions ;
2213import org .junit .jupiter .api .BeforeEach ;
2617import org .mockito .Mockito ;
2718import org .springframework .mock .web .DelegatingServletOutputStream ;
2819
20+ import java .io .ByteArrayInputStream ;
21+ import java .io .ByteArrayOutputStream ;
22+ import java .io .IOException ;
23+ import java .io .InputStream ;
24+ import java .net .URL ;
25+ import java .nio .charset .StandardCharsets ;
26+ import java .util .ArrayList ;
27+ import java .util .Collections ;
28+ import java .util .Enumeration ;
29+ import java .util .List ;
30+
2931/**
3032 * Test class of {@link WebjarsServlet}
3133 */
@@ -68,24 +70,21 @@ void fileNotFound() throws Exception {
6870
6971 @ Test
7072 void downloadFile () throws Exception {
73+ final var webjarResource = "META-INF/resources/webjars/image.png" ;
7174 final var request = defaultRequest ();
7275 final var response = Mockito .mock (HttpServletResponse .class );
7376
74- final var classLoader = Mockito .mock (ClassLoader .class );
7577 final var baos = new ByteArrayOutputStream ();
7678 final var out = new DelegatingServletOutputStream (baos );
7779 Mockito .when (response .getOutputStream ()).thenReturn (out );
78- final var urlsAsList = new ArrayList <URL >();
79- final var url = Thread .currentThread ().getContextClassLoader ()
80- .getResource ("META-INF/resources/webjars/image.png" );
81- urlsAsList .add (url );
82- urlsAsList .add (url );
83- final var urls = Collections .enumeration (urlsAsList );
84- Mockito .when (classLoader .getResources ("META-INF/resources/webjars/image.png" )).thenReturn (urls );
85- Thread .currentThread ().setContextClassLoader (classLoader );
86- getServlet ("false" ).doGet (request , response );
80+ final var urls = new ArrayList <URL >();
81+ final var url = Thread .currentThread ().getContextClassLoader ().getResource (webjarResource );
82+ urls .add (url );
83+ urls .add (url );
84+ getServlet ("false" , true , urls ).doGet (request , response );
8785 Assertions .assertEquals ("image-content" , baos .toString (StandardCharsets .UTF_8 ));
8886 Mockito .verify (response ).setContentType ("image/x-png" );
87+ getServlet ("false" , false , urls ).doGet (request , response );
8988 Mockito .verify (response , Mockito .never ()).setStatus (ArgumentMatchers .anyInt ());
9089 Mockito .verify (response , Mockito .never ()).sendError (ArgumentMatchers .anyInt ());
9190 }
@@ -138,7 +137,12 @@ private HttpServletRequest defaultRequest(final String file) {
138137 }
139138
140139 private WebjarsServlet getServlet (final String disableCache ) throws ServletException {
141- final var servlet = new WebjarsServlet ();
140+ return getServlet (disableCache , true , null );
141+ }
142+
143+
144+ private WebjarsServlet getServlet (final String disableCache , boolean fileHasMorePriority , List <URL > urls ) throws ServletException {
145+ final var servlet = new MyWebjarsServlet (fileHasMorePriority , urls );
142146 final var servletConfig = Mockito .mock (ServletConfig .class );
143147 final var servletContext = Mockito .mock (ServletContext .class );
144148 Mockito .when (servletConfig .getInitParameter ("disableCache" )).thenReturn (disableCache );
@@ -147,4 +151,25 @@ private WebjarsServlet getServlet(final String disableCache) throws ServletExcep
147151 servlet .init (servletConfig );
148152 return servlet ;
149153 }
154+
155+ private static class MyWebjarsServlet extends WebjarsServlet {
156+
157+ private final boolean fileHasMorePriority ;
158+ private final List <URL > urls ;
159+
160+ public MyWebjarsServlet (boolean fileHasMorePriority , List <URL > urls ) {
161+ this .fileHasMorePriority = fileHasMorePriority ;
162+ this .urls = urls ;
163+ }
164+
165+ @ Override
166+ protected boolean hasMorePriority (URL url ) {
167+ return fileHasMorePriority && super .hasMorePriority (url );
168+ }
169+
170+ @ Override
171+ protected Enumeration <URL > getResources (String webjarsResourceURI ) throws IOException {
172+ return urls == null ? super .getResources (webjarsResourceURI ) : Collections .enumeration (urls );
173+ }
174+ }
150175}
0 commit comments