/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.tomcat.util.descriptor.tld; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.jsp.tagext.FunctionInfo; import javax.servlet.jsp.tagext.TagAttributeInfo; import javax.servlet.jsp.tagext.TagVariableInfo; import javax.servlet.jsp.tagext.VariableInfo; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXException; public class TestTldParser { private TldParser parser; @Before public void init() { parser = new TldParser(true, true, new TldRuleSet(), true); } @Test public void testTld() throws Exception { TaglibXml xml = parse("test/tld/test.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); Assert.assertEquals("2.1", xml.getJspVersion()); Assert.assertEquals("test", xml.getShortName()); Assert.assertEquals("http://tomcat.apache.org/TldTests", xml.getUri()); Assert.assertEquals(1, xml.getFunctions().size()); ValidatorXml validator = xml.getValidator(); Assert.assertEquals("com.example.Validator", validator.getValidatorClass()); Assert.assertEquals(1, validator.getInitParams().size()); Assert.assertEquals("value", validator.getInitParams().get("name")); Assert.assertEquals(1, xml.getTags().size()); TagXml tag = xml.getTags().get(0); Assert.assertEquals("org.apache.jasper.compiler.TestValidator$Echo", tag.getTagClass()); Assert.assertEquals("empty", tag.getBodyContent()); Assert.assertTrue(tag.hasDynamicAttributes()); Assert.assertEquals(1, tag.getVariables().size()); TagVariableInfo variableInfo = tag.getVariables().get(0); Assert.assertEquals("var", variableInfo.getNameGiven()); Assert.assertEquals("java.lang.Object", variableInfo.getClassName()); Assert.assertTrue(variableInfo.getDeclare()); Assert.assertEquals(VariableInfo.AT_END, variableInfo.getScope()); Assert.assertEquals(4, tag.getAttributes().size()); TagAttributeInfo attributeInfo = tag.getAttributes().get(0); Assert.assertEquals("Echo Tag", tag.getInfo()); Assert.assertEquals("Echo", tag.getDisplayName()); Assert.assertEquals("small", tag.getSmallIcon()); Assert.assertEquals("large", tag.getLargeIcon()); Assert.assertEquals("echo", attributeInfo.getName()); Assert.assertTrue(attributeInfo.isRequired()); Assert.assertTrue(attributeInfo.canBeRequestTime()); attributeInfo = tag.getAttributes().get(1); Assert.assertEquals("fragment", attributeInfo.getName()); Assert.assertTrue(attributeInfo.isFragment()); Assert.assertTrue(attributeInfo.canBeRequestTime()); Assert.assertEquals("javax.servlet.jsp.tagext.JspFragment", attributeInfo.getTypeName()); attributeInfo = tag.getAttributes().get(2); Assert.assertEquals("deferredValue", attributeInfo.getName()); Assert.assertEquals("javax.el.ValueExpression", attributeInfo.getTypeName()); Assert.assertEquals("java.util.Date", attributeInfo.getExpectedTypeName()); attributeInfo = tag.getAttributes().get(3); Assert.assertEquals("deferredMethod", attributeInfo.getName()); Assert.assertEquals("javax.el.MethodExpression", attributeInfo.getTypeName()); Assert.assertEquals("java.util.Date getDate()", attributeInfo.getMethodSignature()); Assert.assertEquals(1, xml.getTagFiles().size()); TagFileXml tagFile = xml.getTagFiles().get(0); Assert.assertEquals("Echo", tag.getDisplayName()); Assert.assertEquals("small", tag.getSmallIcon()); Assert.assertEquals("large", tag.getLargeIcon()); Assert.assertEquals("Echo2", tagFile.getName()); Assert.assertEquals("/echo.tag", tagFile.getPath()); Assert.assertEquals(1, xml.getFunctions().size()); FunctionInfo fn = xml.getFunctions().get(0); Assert.assertEquals("trim", fn.getName()); Assert.assertEquals("org.apache.el.TesterFunctions", fn.getFunctionClass()); Assert.assertEquals("java.lang.String trim(java.lang.String)", fn.getFunctionSignature()); } @Test public void testParseTld21() throws Exception { TaglibXml xml = parse("test/tld/tags21.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); Assert.assertEquals("2.1", xml.getJspVersion()); Assert.assertEquals("Tags21", xml.getShortName()); Assert.assertEquals("http://tomcat.apache.org/tags21", xml.getUri()); verifyTags(xml.getTags()); } @Test public void testParseTld20() throws Exception { TaglibXml xml = parse("test/tld/tags20.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); Assert.assertEquals("2.0", xml.getJspVersion()); Assert.assertEquals("Tags20", xml.getShortName()); Assert.assertEquals("http://tomcat.apache.org/tags20", xml.getUri()); verifyTags(xml.getTags()); } @Test public void testParseTld12() throws Exception { TaglibXml xml = parse("test/tld/tags12.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); Assert.assertEquals("1.2", xml.getJspVersion()); Assert.assertEquals("Tags12", xml.getShortName()); Assert.assertEquals("http://tomcat.apache.org/tags12", xml.getUri()); verifyTags(xml.getTags()); } @Test public void testParseTld11() throws Exception { TaglibXml xml = parse("test/tld/tags11.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); Assert.assertEquals("1.1", xml.getJspVersion()); Assert.assertEquals("Tags11", xml.getShortName()); Assert.assertEquals("http://tomcat.apache.org/tags11", xml.getUri()); verifyTags(xml.getTags()); } private void verifyTags(List<TagXml> tags) { Assert.assertEquals(1, tags.size()); TagXml tag = tags.get(0); Assert.assertEquals("Echo", tag.getName()); Assert.assertEquals("org.apache.jasper.compiler.TestValidator$Echo", tag.getTagClass()); Assert.assertEquals("empty", tag.getBodyContent()); } @Test public void testListener() throws Exception { TaglibXml xml = parse("test/tld/listener.tld"); Assert.assertEquals("1.0", xml.getTlibVersion()); List<String> listeners = xml.getListeners(); Assert.assertEquals(1, listeners.size()); Assert.assertEquals("org.apache.catalina.core.TesterTldListener", listeners.get(0)); } private TaglibXml parse(String pathname) throws IOException, SAXException { File file = new File(pathname); TldResourcePath path = new TldResourcePath(file.toURI().toURL(), null); return parser.parse(path); } }