diff options
Diffstat (limited to 'jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java')
-rw-r--r-- | jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java | 124 |
1 files changed, 118 insertions, 6 deletions
diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java index 729e88e30d..3bc61e67f0 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java @@ -18,15 +18,12 @@ package org.eclipse.jetty.servlet; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; import java.io.IOException; import java.io.PrintWriter; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -52,6 +49,8 @@ import org.eclipse.jetty.server.handler.HandlerWrapper; import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.handler.gzip.GzipHandler; import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.util.DecoratedObjectFactory; +import org.eclipse.jetty.util.Decorator; import org.hamcrest.Matchers; import org.junit.After; import org.junit.Assert; @@ -361,6 +360,59 @@ public class ServletContextHandlerTest Assert.assertThat(response, Matchers.containsString("404 Fell Through")); } + + /** + * Test behavior of legacy {@link ServletContextHandler.Decorator}, with + * new DecoratedObjectFactory class + */ + @SuppressWarnings("deprecation") + @Test + public void testLegacyDecorator() throws Exception + { + ServletContextHandler context = new ServletContextHandler(); + context.addDecorator(new DummyLegacyDecorator()); + _server.setHandler(context); + + context.addServlet(DecoratedObjectFactoryServlet.class, "/objfactory/*"); + _server.start(); + + String response= _connector.getResponses("GET /objfactory/ HTTP/1.0\r\n\r\n"); + assertThat("Response status code", response, containsString("200 OK")); + + String expected = String.format("Attribute[%s] = %s", DecoratedObjectFactory.ATTR, DecoratedObjectFactory.class.getName()); + assertThat("Has context attribute", response, containsString(expected)); + + assertThat("Decorators size", response, containsString("Decorators.size = [1]")); + + expected = String.format("decorator[] = %s", DummyLegacyDecorator.class.getName()); + assertThat("Specific Legacy Decorator", response, containsString(expected)); + } + + /** + * Test behavior of new {@link org.eclipse.jetty.util.Decorator}, with + * new DecoratedObjectFactory class + */ + @Test + public void testUtilDecorator() throws Exception + { + ServletContextHandler context = new ServletContextHandler(); + context.getObjectFactory().addDecorator(new DummyUtilDecorator()); + _server.setHandler(context); + + context.addServlet(DecoratedObjectFactoryServlet.class, "/objfactory/*"); + _server.start(); + + String response= _connector.getResponses("GET /objfactory/ HTTP/1.0\r\n\r\n"); + assertThat("Response status code", response, containsString("200 OK")); + + String expected = String.format("Attribute[%s] = %s", DecoratedObjectFactory.ATTR, DecoratedObjectFactory.class.getName()); + assertThat("Has context attribute", response, containsString(expected)); + + assertThat("Decorators size", response, containsString("Decorators.size = [1]")); + + expected = String.format("decorator[] = %s", DummyUtilDecorator.class.getName()); + assertThat("Specific Legacy Decorator", response, containsString(expected)); + } private int assertResponseContains(String expected, String response) { @@ -391,6 +443,66 @@ public class ServletContextHandlerTest writer.write("Hello World"); } } + + public static class DummyUtilDecorator implements org.eclipse.jetty.util.Decorator + { + @Override + public <T> T decorate(T o) + { + return o; + } + + @Override + public void destroy(Object o) + { + } + } + + public static class DummyLegacyDecorator implements org.eclipse.jetty.servlet.ServletContextHandler.Decorator + { + @Override + public <T> T decorate(T o) + { + return o; + } + + @Override + public void destroy(Object o) + { + } + } + + public static class DecoratedObjectFactoryServlet extends HttpServlet + { + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + resp.setContentType("text/plain"); + resp.setStatus(HttpServletResponse.SC_OK); + PrintWriter out = resp.getWriter(); + + Object obj = req.getServletContext().getAttribute(DecoratedObjectFactory.ATTR); + out.printf("Attribute[%s] = %s%n",DecoratedObjectFactory.ATTR,obj.getClass().getName()); + + if (obj instanceof DecoratedObjectFactory) + { + out.printf("Object is a DecoratedObjectFactory%n"); + DecoratedObjectFactory objFactory = (DecoratedObjectFactory)obj; + List<Decorator> decorators = objFactory.getDecorators(); + out.printf("Decorators.size = [%d]%n",decorators.size()); + for (Decorator decorator : decorators) + { + out.printf(" decorator[] = %s%n",decorator.getClass().getName()); + } + } + else + { + out.printf("Object is NOT a DecoratedObjectFactory%n"); + } + } + } public static class TestServlet extends HttpServlet { |