/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.dev; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.dev.util.UnitTestTreeLogger; import junit.framework.TestCase; import org.xml.sax.SAXParseException; import java.io.File; import java.io.IOException; import java.net.URL; /** * Test for {@link ServletValidator}. */ public class ServletValidatorTest extends TestCase { public void testBadUrl() throws Exception { UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); URL url = new File("nonexistent.web.xml").toURI().toURL(); builder.expectWarn("Unable to process '" + url.toExternalForm() + "' for servlet validation", IOException.class); UnitTestTreeLogger logger = builder.createLogger(); ServletValidator validator = ServletValidator.create(logger, url); assertNull(validator); logger.assertCorrectLogEntries(); } public void testBadWebXml() throws Exception { UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); URL url = this.getClass().getResource("invalid.web.xml"); assertNotNull(url); builder.expectWarn("Unable to process '" + url.toExternalForm() + "' for servlet validation", SAXParseException.class); UnitTestTreeLogger logger = builder.createLogger(); ServletValidator validator = ServletValidator.create(logger, url); assertNull(validator); logger.assertCorrectLogEntries(); } public void testGoodWebXml() throws Exception { createValidator(); } public void testNoMappings() throws Exception { ServletValidator validator = createValidator(); assertTrue(validator.containsServletClass("org.test.NoMappings")); assertFalse(validator.containsServletMapping("org.test.NoMappings", "/no/mapping")); UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); builder.expectWarn(ServletValidator.generateMissingMappingMessage( "org.test.NoMappings", "/no/mapping", "noMappings"), null); UnitTestTreeLogger logger = builder.createLogger(); validator.validate(logger, "org.test.NoMappings", "/no/mapping"); logger.assertCorrectLogEntries(); } public void testNoServlet() throws Exception { ServletValidator validator = createValidator(); assertFalse(validator.containsServletClass("not.defined.Class")); UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); builder.expectWarn(ServletValidator.generateMissingServletMessage( "not.defined.Class", "/no/mapping"), null); UnitTestTreeLogger logger = builder.createLogger(); validator.validate(logger, "not.defined.Class", "/no/mapping"); logger.assertCorrectLogEntries(); } public void testOneMapping() throws Exception { ServletValidator validator = createValidator(); assertTrue(validator.containsServletClass("org.test.OneMapping")); assertTrue(validator.containsServletMapping("org.test.OneMapping", "/one/mapping")); assertFalse(validator.containsServletMapping("org.test.OneMapping", "/no/mapping")); UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); UnitTestTreeLogger logger = builder.createLogger(); validator.validate(logger, "org.test.OneMapping", "/one/mapping"); logger.assertCorrectLogEntries(); } public void testSuggestServletName() throws Exception { assertEquals("a", ServletValidator.suggestServletName("A")); assertEquals("className", ServletValidator.suggestServletName("ClassName")); assertEquals("className", ServletValidator.suggestServletName("a.b.ClassName")); } public void testTwoMappings() throws Exception { ServletValidator validator = createValidator(); assertTrue(validator.containsServletClass("org.test.TwoMappings")); assertTrue(validator.containsServletMapping("org.test.TwoMappings", "/two/mappings1")); assertTrue(validator.containsServletMapping("org.test.TwoMappings", "/two/mappings2")); assertFalse(validator.containsServletMapping("org.test.TwoMappings", "/no/mapping")); UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); UnitTestTreeLogger logger = builder.createLogger(); validator.validate(logger, "org.test.TwoMappings", "/two/mappings1"); validator.validate(logger, "org.test.TwoMappings", "/two/mappings2"); logger.assertCorrectLogEntries(); } private ServletValidator createValidator() { UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder(); builder.setLowestLogLevel(TreeLogger.WARN); UnitTestTreeLogger logger = builder.createLogger(); URL url = this.getClass().getResource("valid.web.xml"); assertNotNull(url); ServletValidator validator = ServletValidator.create(logger, url); assertNotNull(validator); logger.assertCorrectLogEntries(); return validator; } }