package com.xoom.oss.feathercon; import org.eclipse.jetty.servlet.DefaultServlet; import org.junit.After; import org.junit.Before; import org.junit.Test; import javax.servlet.Servlet; import javax.servlet.http.HttpServlet; import java.util.HashMap; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; public class ServletConfigurationTest extends BaseTest { private ServletConfiguration.Builder builder; @Before public void setUp() throws Exception { builder = new ServletConfiguration.Builder(); } @After public void tearDown() throws Exception { } @Test public void testWithServletClass() throws Exception { builder.withServletClass(DefaultServlet.class); assertThat(builder.servletClass.equals(DefaultServlet.class), equalTo(true)); } @Test public void testWithServlet() throws Exception { Servlet servlet = new HttpServlet() { }; builder.withServlet(servlet); assertThat(builder.servlet.equals(servlet), equalTo(true)); } @Test public void testWithServletClassName() throws Exception { builder.withServletClassName(DefaultServlet.class.getCanonicalName()); assertThat(builder.servletClass.equals(DefaultServlet.class), equalTo(true)); } @Test public void testWithInitOrder() throws Exception { builder.withInitOrder(1); assertThat(builder.initOrder, equalTo(1)); } @Test public void testWithServletName() throws Exception { String superServlet = "superServlet"; builder.withServletName(superServlet); assertThat(builder.servletName, equalTo(superServlet)); } @Test public void testWithPathSpec() throws Exception { assertThat(builder.pathSpecs, is(notNullValue())); assertThat(builder.pathSpecs.size(), equalTo(0)); builder.withPathSpec("/css/*"); builder.withPathSpec("/js/*"); assertThat(builder.pathSpecs.size(), equalTo(2)); assertThat(builder.pathSpecs.contains("/css/*"), equalTo(true)); assertThat(builder.pathSpecs.contains("/js/*"), equalTo(true)); } @Test public void testWithInitParameter() throws Exception { assertThat(builder.initParameters, is(notNullValue())); assertThat(builder.initParameters.size(), equalTo(0)); builder.withInitParameter("k1", "v1"); builder.withInitParameter("k2", "v2"); assertThat(builder.initParameters.size(), equalTo(2)); assertThat(builder.initParameters.containsKey("k1"), equalTo(true)); assertThat(builder.initParameters.containsKey("k2"), equalTo(true)); assertThat(builder.initParameters.get("k1"), equalTo("v1")); assertThat(builder.initParameters.get("k2"), equalTo("v2")); } @Test public void testWithInitParameters() throws Exception { assertThat(builder.initParameters, is(notNullValue())); assertThat(builder.initParameters.size(), equalTo(0)); HashMap<String, String> map = new HashMap<String, String>(); map.put("k1", "v1"); map.put("k2", "v2"); builder.withInitParameters(map); assertThat(builder.initParameters.size(), equalTo(2)); assertThat(builder.initParameters.containsKey("k1"), equalTo(true)); assertThat(builder.initParameters.containsKey("k2"), equalTo(true)); assertThat(builder.initParameters.get("k1"), equalTo("v1")); assertThat(builder.initParameters.get("k2"), equalTo("v2")); } @Test public void testBuild() throws Exception { builder.withServletClass(DefaultServlet.class) .withServletName("superServlet") .withInitOrder(1) .withInitParameter("k1", "v1") .withPathSpec("/css/*") .withPathSpec("/js/*"); ServletConfiguration build = builder.build(); assertThat(build.initOrder, equalTo(1)); assertThat(build.servletName, equalTo("superServlet")); assertThat(build.servletClass.equals(DefaultServlet.class), equalTo(true)); assertThat(build.pathSpecs.size(), equalTo(2)); assertThat(build.pathSpecs.contains("/css/*"), equalTo(true)); assertThat(build.pathSpecs.contains("/js/*"), equalTo(true)); assertThat(build.initParameters.containsKey("k1"), equalTo(true)); assertThat(build.initParameters.get("k1"), equalTo("v1")); } @Test public void testToString() throws Exception { builder.toString(); builder.build().toString(); } @Test(expected = IllegalArgumentException.class) public void testWithServletClassNameNotFound() throws Exception { builder.withServletClassName("acme.NoSuchServletClass"); } @Test(expected = IllegalStateException.class) public void testBuildTwice() throws Exception { builder.build(); builder.build(); } @Test(expected = IllegalStateException.class) public void testBuildWithServletClassAndServletInstance_a() throws Exception { builder.withServlet(new HttpServlet() { }).withServletClass(DefaultServlet.class); } @Test(expected = IllegalStateException.class) public void testBuildWithServletClassAndServletInstance_b() throws Exception { builder .withServletClass(DefaultServlet.class) .withServlet(new HttpServlet() { }) ; } @Test(expected = IllegalStateException.class) public void testBuildWithServletClassAndServletInstance_c() throws Exception { builder .withServletClassName(DefaultServlet.class.getCanonicalName()) .withServlet(new HttpServlet() { }) ; } @Test(expected = IllegalArgumentException.class) public void testNotAServletClass_a() throws Exception { builder.withServletClassName("com.xoom.oss.feathercon.ServletConfigurationTest.Foo"); } @Test(expected = IllegalArgumentException.class) public void testNotAServletClass_b() throws Exception { builder.withServletClassName(Foo.class.getCanonicalName()); } private static class Foo { } }