Add various EL test cases, mostly extracted from local test JSPs I have used for...
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 7 Jan 2010 16:06:45 +0000 (16:06 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 7 Jan 2010 16:06:45 +0000 (16:06 +0000)
Thanks to kkolinko and the numerous bug reporters that provided the basis for many of these.
At present, although this is Tomcat 7, the tests only cover JSP 2.1 functionality.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@896913 13f79535-47bb-0310-9956-ffa450edef68

27 files changed:
test/org/apache/el/TestELEvaluation.java
test/org/apache/el/TestELInJsp.java [new file with mode: 0644]
test/org/apache/el/TesterFunctions.java [new file with mode: 0644]
test/org/apache/jasper/compiler/TestGenerator.java [new file with mode: 0644]
test/org/apache/jasper/compiler/TestValidator.java [new file with mode: 0644]
test/webapp/WEB-INF/tags/echo-double.tag [new file with mode: 0644]
test/webapp/WEB-INF/tags/echo-long.tag [new file with mode: 0644]
test/webapp/WEB-INF/tags/echo.tag [new file with mode: 0644]
test/webapp/WEB-INF/test.tld [new file with mode: 0644]
test/webapp/WEB-INF/web.xml [new file with mode: 0644]
test/webapp/bug42565.jsp [new file with mode: 0644]
test/webapp/bug44994.jsp [new file with mode: 0644]
test/webapp/bug45015a.jsp [new file with mode: 0644]
test/webapp/bug45015b.jsp [new file with mode: 0644]
test/webapp/bug45427.jsp [new file with mode: 0644]
test/webapp/bug45451.jspf [new file with mode: 0644]
test/webapp/bug45451a.jsp [new file with mode: 0644]
test/webapp/bug45451b.jsp [new file with mode: 0644]
test/webapp/bug45451c.jsp [new file with mode: 0644]
test/webapp/bug45451d.jspx [new file with mode: 0644]
test/webapp/bug45511.jsp [new file with mode: 0644]
test/webapp/bug46381.jsp [new file with mode: 0644]
test/webapp/bug46596.jsp [new file with mode: 0644]
test/webapp/bug47331.jsp [new file with mode: 0644]
test/webapp/bug47413.jsp [new file with mode: 0644]
test/webapp/bug48112.jsp [new file with mode: 0644]
test/webapp/el-misc.jsp [new file with mode: 0644]

index 0c21ff4..4246036 100644 (file)
@@ -137,7 +137,7 @@ public class TestELEvaluation extends TestCase {
             if ("trim".equals(localName)) {
                 Method m;
                 try {
-                    m = this.getClass().getMethod("trim", String.class);
+                    m = TesterFunctions.class.getMethod("trim", String.class);
                     return m;
                 } catch (SecurityException e) {
                     // Ignore
@@ -147,9 +147,5 @@ public class TestELEvaluation extends TestCase {
             }
             return null;
         }
-        
-        public static String trim(String input) {
-            return input.trim();
-        }
     }
 }
diff --git a/test/org/apache/el/TestELInJsp.java b/test/org/apache/el/TestELInJsp.java
new file mode 100644 (file)
index 0000000..c1a721f
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * 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.el;
+
+import java.io.File;
+
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.buf.ByteChunk;
+
+public class TestELInJsp extends TomcatBaseTest {
+    
+    public void testBug42565() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug42565.jsp");
+        
+        String result = res.toString();
+        assertTrue(result.indexOf("00-false") > 0);
+        assertTrue(result.indexOf("01-false") > 0);
+        assertTrue(result.indexOf("02-false") > 0);
+        assertTrue(result.indexOf("03-false") > 0);
+        assertTrue(result.indexOf("04-false") > 0);
+        assertTrue(result.indexOf("05-false") > 0);
+        assertTrue(result.indexOf("06-false") > 0);
+        assertTrue(result.indexOf("07-false") > 0);
+        assertTrue(result.indexOf("08-false") > 0);
+        assertTrue(result.indexOf("09-false") > 0);
+        assertTrue(result.indexOf("10-false") > 0);
+        assertTrue(result.indexOf("11-false") > 0);
+        assertTrue(result.indexOf("12-false") > 0);
+        assertTrue(result.indexOf("13-false") > 0);
+        assertTrue(result.indexOf("14-false") > 0);
+        assertTrue(result.indexOf("15-false") > 0);
+    }
+
+    public void testBug44994() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug44994.jsp");
+        
+        String result = res.toString();
+        assertTrue(result.indexOf("00-none") > 0);
+        assertTrue(result.indexOf("01-one") > 0);
+        assertTrue(result.indexOf("02-many") > 0);
+    }
+
+    public void testBug45427() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug45427.jsp");
+        
+        String result = res.toString();
+        // Warning: JSP attribute escaping != Java String escaping
+        assertTrue(result.indexOf("00-hello world") > 0);
+        assertTrue(result.indexOf("01-hello 'world") > 0);
+        assertTrue(result.indexOf("02-hello \"world") > 0);
+        assertTrue(result.indexOf("03-hello world") > 0);
+        assertTrue(result.indexOf("04-hello 'world") > 0);
+        assertTrue(result.indexOf("05-hello \"world") > 0);
+        assertTrue(result.indexOf("06-hello world") > 0);
+        assertTrue(result.indexOf("07-hello 'world") > 0);
+        assertTrue(result.indexOf("08-hello \"world") > 0);
+        assertTrue(result.indexOf("09-hello world") > 0);
+        assertTrue(result.indexOf("10-hello 'world") > 0);
+        assertTrue(result.indexOf("11-hello \"world") > 0);
+        assertTrue(result.indexOf("12-hello world") > 0);
+        assertTrue(result.indexOf("13-hello 'world") > 0);
+        assertTrue(result.indexOf("14-hello \"world") > 0);
+        assertTrue(result.indexOf("15-hello world") > 0);
+        assertTrue(result.indexOf("16-hello 'world") > 0);
+        assertTrue(result.indexOf("17-hello \"world") > 0);
+    }
+
+    public void testBug45451() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = /* getUrl("http://localhost:" + getPort() +
+                "/test/bug45451a.jsp");
+        
+        String result = res.toString();
+        // Warning: JSP attribute escaping != Java String escaping
+        assertTrue(result.indexOf("00-\\'hello world\\'") > 0);
+        assertTrue(result.indexOf("01-\\'hello world\\'") > 0);
+        assertTrue(result.indexOf("02-\\'hello world\\'") > 0);
+        assertTrue(result.indexOf("03-\\'hello world\\'") > 0);
+        
+        res = */ getUrl("http://localhost:" + getPort() + "/test/bug45451b.jsp");
+        String result = res.toString();
+        // Warning: JSP attribute escaping != Java String escaping
+        assertTrue(result.indexOf("00-2") > 0);
+        assertTrue(result.indexOf("01-${1+1}") > 0);
+        assertTrue(result.indexOf("02-\\${1+1}") > 0);
+        assertTrue(result.indexOf("03-\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("04-2") > 0);
+        assertTrue(result.indexOf("05-${1+1}") > 0);
+        assertTrue(result.indexOf("06-\\2") > 0);
+        assertTrue(result.indexOf("07-\\${1+1}") > 0);
+        assertTrue(result.indexOf("08-\\\\2") > 0);
+        
+        res = getUrl("http://localhost:" + getPort() + "/test/bug45451c.jsp");
+        result = res.toString();
+        // Warning: JSP attribute escaping != Java String escaping
+        assertTrue(result.indexOf("00-${1+1}") > 0);
+        assertTrue(result.indexOf("01-\\${1+1}") > 0);
+        assertTrue(result.indexOf("02-\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("03-\\\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("04-${1+1}") > 0);
+        assertTrue(result.indexOf("05-\\${1+1}") > 0);
+        assertTrue(result.indexOf("06-\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("07-\\\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("08-\\\\\\\\${1+1}") > 0);
+
+        res = getUrl("http://localhost:" + getPort() + "/test/bug45451d.jspx");
+        result = res.toString();
+        // Warning: JSP attribute escaping != Java String escaping
+        assertTrue(result.indexOf("00-2") > 0);
+        assertTrue(result.indexOf("01-${1+1}") > 0);
+        assertTrue(result.indexOf("02-\\${1+1}") > 0);
+        assertTrue(result.indexOf("03-\\\\${1+1}") > 0);
+        assertTrue(result.indexOf("04-2") > 0);
+        assertTrue(result.indexOf("05-${1+1}") > 0);
+        assertTrue(result.indexOf("06-\\2") > 0);
+        assertTrue(result.indexOf("07-\\${1+1}") > 0);
+        assertTrue(result.indexOf("08-\\\\2") > 0);
+    }
+
+    public void testBug45511() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug45511.jsp");
+        
+        String result = res.toString();
+        assertTrue(result.indexOf("00-true") > 0);
+        assertTrue(result.indexOf("01-false") > 0);
+    }
+
+    public void testBug46596() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug46596.jsp");
+        assertTrue(res.toString().indexOf("{OK}") > 0);
+    }
+    
+    public void testBug47413() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug47413.jsp");
+        
+        String result = res.toString();
+        assertTrue(result.indexOf("00-hello world") > 0);
+        assertTrue(result.indexOf("01-hello world") > 0);
+        assertTrue(result.indexOf("02-3.22") > 0);
+        assertTrue(result.indexOf("03-3.22") > 0);
+        assertTrue(result.indexOf("04-17") > 0);
+        assertTrue(result.indexOf("05-17") > 0);
+        assertTrue(result.indexOf("06-hello world") > 0);
+        assertTrue(result.indexOf("07-hello world") > 0);
+        assertTrue(result.indexOf("08-0.0") > 0);
+        assertTrue(result.indexOf("09-0.0") > 0);
+        assertTrue(result.indexOf("10-0") > 0);
+        assertTrue(result.indexOf("11-0") > 0);
+    }
+
+    public void testBug48112() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug48112.jsp");
+        assertTrue(res.toString().indexOf("{OK}") > 0);
+    }
+    
+    public void testELMisc() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/el-misc.jsp");
+        String result = res.toString();
+        assertTrue(result.indexOf("00-\\\\\\\"${'hello world'}") > 0);
+        assertTrue(result.indexOf("01-\\\\\\\"\\${'hello world'}") > 0);
+        assertTrue(result.indexOf("02-\\\"\\${'hello world'}") > 0);
+        assertTrue(result.indexOf("03-\\\"\\${'hello world'}") > 0);
+        assertTrue(result.indexOf("2az-04") > 0);
+        assertTrue(result.indexOf("05-a2z") > 0);
+        assertTrue(result.indexOf("06-az2") > 0);
+        assertTrue(result.indexOf("2az-07") > 0);
+        assertTrue(result.indexOf("08-a2z") > 0);
+        assertTrue(result.indexOf("09-az2") > 0);
+    }
+
+
+}
diff --git a/test/org/apache/el/TesterFunctions.java b/test/org/apache/el/TesterFunctions.java
new file mode 100644 (file)
index 0000000..bb799c1
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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.el;
+
+public class TesterFunctions {
+    public static String trim(String input) {
+        return input.trim();
+    }
+}
diff --git a/test/org/apache/jasper/compiler/TestGenerator.java b/test/org/apache/jasper/compiler/TestGenerator.java
new file mode 100644 (file)
index 0000000..d02db5c
--- /dev/null
@@ -0,0 +1,60 @@
+package org.apache.jasper.compiler;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.buf.ByteChunk;
+
+public class TestGenerator extends TomcatBaseTest {
+    
+    public void testBug45015a() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        ByteChunk res = getUrl("http://localhost:" + getPort() +
+                "/test/bug45015a.jsp");
+        
+        String result = res.toString();
+        // Beware of the differences between escaping in JSP attributes and
+        // in Java Strings
+        assertTrue(result.indexOf("00-hello 'world'") > 0);
+        assertTrue(result.indexOf("01-hello 'world") > 0);
+        assertTrue(result.indexOf("02-hello world'") > 0);
+        assertTrue(result.indexOf("03-hello world'") > 0);
+        assertTrue(result.indexOf("04-hello world\"") > 0);
+        assertTrue(result.indexOf("05-hello \"world\"") > 0);
+        assertTrue(result.indexOf("06-hello \"world") > 0);
+        assertTrue(result.indexOf("07-hello world\"") > 0);
+        assertTrue(result.indexOf("08-hello world'") > 0);
+        assertTrue(result.indexOf("09-hello world\"") > 0);
+    }
+
+    public void testBug45015b() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        Exception e = null;
+        try {
+            getUrl("http://localhost:" + getPort() + "/test/bug45015b.jsp");
+        } catch (IOException ioe) {
+            e = ioe;
+        }
+
+        // Failure is expected
+        assertNotNull(e);
+    }
+}
diff --git a/test/org/apache/jasper/compiler/TestValidator.java b/test/org/apache/jasper/compiler/TestValidator.java
new file mode 100644 (file)
index 0000000..beb9a77
--- /dev/null
@@ -0,0 +1,31 @@
+package org.apache.jasper.compiler;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+public class TestValidator extends TomcatBaseTest {
+    
+    public void testBug47331() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        File appDir = 
+            new File("test/webapp");
+        // app dir is relative to server home
+        tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+        
+        tomcat.start();
+
+        Exception e = null;
+        try {
+            getUrl("http://localhost:" + getPort() + "/test/bug47331.jsp");
+        } catch (IOException ioe) {
+            e = ioe;
+        }
+
+        // Failure is expected
+        assertNotNull(e);
+    }
+}
diff --git a/test/webapp/WEB-INF/tags/echo-double.tag b/test/webapp/WEB-INF/tags/echo-double.tag
new file mode 100644 (file)
index 0000000..c7105d5
--- /dev/null
@@ -0,0 +1,3 @@
+<%@ tag %><%@\r
+attribute name="echo" type="java.lang.Double"%><%@\r
+attribute name="index" type="java.lang.String" %><p>${index}-${echo}</p>
\ No newline at end of file
diff --git a/test/webapp/WEB-INF/tags/echo-long.tag b/test/webapp/WEB-INF/tags/echo-long.tag
new file mode 100644 (file)
index 0000000..652faf1
--- /dev/null
@@ -0,0 +1,3 @@
+<%@ tag %><%@\r
+attribute name="echo" type="java.lang.Long"%><%@\r
+attribute name="index" type="java.lang.String" %><p>${index}-${echo}</p>
\ No newline at end of file
diff --git a/test/webapp/WEB-INF/tags/echo.tag b/test/webapp/WEB-INF/tags/echo.tag
new file mode 100644 (file)
index 0000000..9c9479f
--- /dev/null
@@ -0,0 +1 @@
+<%@ tag %><%@ attribute name="echo" type="java.lang.String"%><p>${echo}</p>
\ No newline at end of file
diff --git a/test/webapp/WEB-INF/test.tld b/test/webapp/WEB-INF/test.tld
new file mode 100644 (file)
index 0000000..64f9324
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+  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.
+-->
+<taglib xmlns="http://java.sun.com/xml/ns/javaee"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+      http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
+      version="2.1">
+  <tlib-version>1.0</tlib-version>
+  <short-name>TesterFunctions</short-name>
+  <uri>http://tomcat.apache.org/testerFunctions</uri>
+  
+  <function>
+    <name>trim</name>
+    <function-class>org.apache.el.TesterFunctions</function-class>
+    <function-signature>
+      java.lang.String trim(java.lang.String)
+    </function-signature>
+  </function>
+</taglib>
\ No newline at end of file
diff --git a/test/webapp/WEB-INF/web.xml b/test/webapp/WEB-INF/web.xml
new file mode 100644 (file)
index 0000000..947d4ea
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  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.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+  version="3.0"
+  metadata-complete="true">  
+
+  <display-name>Tomcat Test Application</display-name>
+  <description>
+     Used as part of the Tomcat unit tests when a full web application is
+     required.
+  </description>
+</web-app>
\ No newline at end of file
diff --git a/test/webapp/bug42565.jsp b/test/webapp/bug42565.jsp
new file mode 100644 (file)
index 0000000..8aeb539
--- /dev/null
@@ -0,0 +1,38 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 42565 test case</title></head>
+  <body>
+    <tags:echo echo="00-${false?true:false}" />
+    <tags:echo echo="01-${false?true: false}" />
+    <tags:echo echo="02-${false?true :false}" />
+    <tags:echo echo="03-${false?true : false}" />
+    <tags:echo echo="04-${false? true:false}" />
+    <tags:echo echo="05-${false? true: false}" />
+    <tags:echo echo="06-${false? true :false}" />
+    <tags:echo echo="07-${false? true : false}" />
+    <tags:echo echo="08-${ false?true:false}" />
+    <tags:echo echo="09-${ false?true: false}" />
+    <tags:echo echo="10-${ false?true :false}" />
+    <tags:echo echo="11-${ false?true : false}" />
+    <tags:echo echo="12-${ false? true:false}" />
+    <tags:echo echo="13-${ false? true: false}" />
+    <tags:echo echo="14-${ false? true :false}" />
+    <tags:echo echo="15-${ false? true : false}" />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug44994.jsp b/test/webapp/bug44994.jsp
new file mode 100644 (file)
index 0000000..43410d0
--- /dev/null
@@ -0,0 +1,25 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 44994 test case</title></head>
+  <body>
+    <tags:echo echo="00-${0 lt 0 ? 1 lt 0 ? 'many': 'one': 'none'}" />
+    <tags:echo echo="01-${0 lt 1 ? 1 lt 1 ? 'many': 'one': 'none'}" />
+    <tags:echo echo="02-${0 lt 2 ? 1 lt 2 ? 'many': 'one': 'none'}" />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug45015a.jsp b/test/webapp/bug45015a.jsp
new file mode 100644 (file)
index 0000000..3d85ba4
--- /dev/null
@@ -0,0 +1,32 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45015 test case A</title></head>
+  <body>
+    <tags:echo echo="00-hello 'world'" />
+    <tags:echo echo="01-hello 'world" />
+    <tags:echo echo="02-hello world'" />
+    <tags:echo echo="03-hello world\'" />
+    <tags:echo echo="04-hello world\"" />
+    <tags:echo echo='05-hello "world"' />
+    <tags:echo echo='06-hello "world' />
+    <tags:echo echo='07-hello world"' />
+    <tags:echo echo='08-hello world\'' />
+    <tags:echo echo='09-hello world\"' />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug45015b.jsp b/test/webapp/bug45015b.jsp
new file mode 100644 (file)
index 0000000..a032a11
--- /dev/null
@@ -0,0 +1,23 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45015 test case B</title></head>
+  <body>
+    <tags:echo echo="hello "wo"rld" />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug45427.jsp b/test/webapp/bug45427.jsp
new file mode 100644 (file)
index 0000000..41cd19b
--- /dev/null
@@ -0,0 +1,41 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45427 test case</title></head>
+  <body>
+    <p>00-${'hello world'}</p>
+    <p>01-${'hello \'world'}</p>
+    <p>02-${'hello "world'}</p>
+    <p>03-${"hello world"}</p>
+    <p>04-${"hello 'world"}</p>
+    <p>05-${"hello \"world"}</p>
+
+    <tags:echo echo="06-${'hello world'}" />
+    <tags:echo echo="07-${'hello \\\'world'}" />
+    <tags:echo echo="08-${'hello \"world'}" />
+    <tags:echo echo="09-${\"hello world\"}" />
+    <tags:echo echo="10-${\"hello 'world\"}" />
+    <tags:echo echo="11-${\"hello \\\"world\"}" />
+    <tags:echo echo='12-${\'hello world\'}' />
+    <tags:echo echo='13-${\'hello \\\'world\'}' />
+    <tags:echo echo='14-${\'hello "world\'}' />
+    <tags:echo echo='15-${"hello world"}' />
+    <tags:echo echo='16-${"hello \'world"}' />
+    <tags:echo echo='17-${"hello \\\"world"}' />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug45451.jspf b/test/webapp/bug45451.jspf
new file mode 100644 (file)
index 0000000..4c96bd4
--- /dev/null
@@ -0,0 +1,9 @@
+<p>00-${1+1}</p>\r
+<p>01-\${1+1}</p>\r
+<p>02-\\${1+1}</p>\r
+<p>03-\\\${1+1}</p>\r
+<tags:echo echo="04-${1+1}" />\r
+<tags:echo echo="05-\${1+1}" />\r
+<tags:echo echo="06-\\${1+1}" />\r
+<tags:echo echo="07-\\\${1+1}" />\r
+<tags:echo echo="08-\\\\${1+1}" />\r
diff --git a/test/webapp/bug45451a.jsp b/test/webapp/bug45451a.jsp
new file mode 100644 (file)
index 0000000..f3a67f4
--- /dev/null
@@ -0,0 +1,26 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45451 test case</title></head>
+  <body>
+    <tags:echo echo="00-\\\'${'hello world'}\\\'" />
+    <tags:echo echo="01-\\\'${\"hello world\"}\\\'" />
+    <tags:echo echo='02-\\\'${\'hello world\'}\\\'' />
+    <tags:echo echo='03-\\\'${"hello world"}\\\'' />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug45451b.jsp b/test/webapp/bug45451b.jsp
new file mode 100644 (file)
index 0000000..80b2dbe
--- /dev/null
@@ -0,0 +1,2 @@
+<%@page isELIgnored="false" %>
+<%@ include file="bug45451.jspf" %>
diff --git a/test/webapp/bug45451c.jsp b/test/webapp/bug45451c.jsp
new file mode 100644 (file)
index 0000000..649e7ef
--- /dev/null
@@ -0,0 +1,2 @@
+<%@page isELIgnored="true" %>
+<%@ include file="bug45451.jspf" %>
diff --git a/test/webapp/bug45451d.jspx b/test/webapp/bug45451d.jspx
new file mode 100644 (file)
index 0000000..fa1b30a
--- /dev/null
@@ -0,0 +1,19 @@
+<jsp:root\r
+  xmlns:bug45451="urn:jsptagdir:/WEB-INF/tags/bug45451"\r
+  xmlns:jsp="http://java.sun.com/JSP/Page" version="2.2"\r
+  xmlns:tags="urn:jsptagdir:/WEB-INF/tags" >\r
+  <jsp:directive.page isELIgnored="false" />\r
+<html>\r
+  <body>\r
+    <p>00-${1+1}</p>\r
+    <p>01-\${1+1}</p>\r
+    <p>02-\\${1+1}</p>\r
+    <p>03-\\\${1+1}</p>\r
+    <tags:echo echo="04-${1+1}" />\r
+    <tags:echo echo="05-\${1+1}" />\r
+    <tags:echo echo="06-\\${1+1}" />\r
+    <tags:echo echo="07-\\\${1+1}" />\r
+    <tags:echo echo="08-\\\\${1+1}" />\r
+  </body>\r
+</html>\r
+</jsp:root>
\ No newline at end of file
diff --git a/test/webapp/bug45511.jsp b/test/webapp/bug45511.jsp
new file mode 100644 (file)
index 0000000..6279eba
--- /dev/null
@@ -0,0 +1,24 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45511 test case</title></head>
+  <body>
+    <tags:echo echo="00-${empty(null)}" />
+    <tags:echo echo="01-${not(true)}" />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug46381.jsp b/test/webapp/bug46381.jsp
new file mode 100644 (file)
index 0000000..629a15c
--- /dev/null
@@ -0,0 +1,28 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 46381 test case</title></head>
+  <%
+  pageContext.setAttribute("foo","hello");
+  pageContext.setAttribute("bar","world");
+  %>
+  <body>
+    <tags:echo echo="00-${foo}${bar}" />
+    <tags:echo echo="00-${foo}${bar}${undefined}" />
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug46596.jsp b/test/webapp/bug46596.jsp
new file mode 100644 (file)
index 0000000..6da5792
--- /dev/null
@@ -0,0 +1,25 @@
+<%@ taglib uri="http://tomcat.apache.org/testerFunctions" prefix="fn" %>
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 46596 test case</title></head>
+  <body>
+    <tags:echo echo="${fn:trim
+                              ('{OK}')}"/>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug47331.jsp b/test/webapp/bug47331.jsp
new file mode 100644 (file)
index 0000000..a174dc3
--- /dev/null
@@ -0,0 +1,23 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 47331 test case</title></head>
+  <body>
+    <p>This is a #{'test'}</p>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/bug47413.jsp b/test/webapp/bug47413.jsp
new file mode 100644 (file)
index 0000000..adfea07
--- /dev/null
@@ -0,0 +1,51 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<jsp:useBean id="values" class="jsp2.examples.ValuesBean" />
+<html>
+  <head><title>Bug 47413 test case</title></head>
+  <body>
+    <jsp:setProperty name="values" property="string" value="${'hello'} wo${'rld'}"/>
+    <p>00-${values.string}</p>
+    <tags:echo echo="01-${'hello'} wo${'rld'}"/>
+
+    <jsp:setProperty name="values" property="double" value="${1+2}.${220}"/>
+    <p>02-${values.double}</p>
+    <tags:echo-double index="03" echo="${1+2}.${220}"/>
+    
+    <jsp:setProperty name="values" property="long" value="000${1}${7}"/>
+    <p>04-${values.long}</p>
+    <tags:echo-long index="05" echo="000${1}${7}"/>
+    
+    <jsp:setProperty name="values" property="string"
+                     value="${undefinedFoo}hello world${undefinedBar}"/>
+    <p>06-${values.string}</p>
+    <tags:echo echo="${undefinedFoo}07-hello world${undefinedBar}"/>
+
+    <jsp:setProperty name="values" property="double"
+                     value="${undefinedFoo}${undefinedBar}"/>
+    <p>08-${values.double}</p>
+    <tags:echo-double index="09" echo="${undefinedFoo}${undefinedBar}"/>
+
+    <jsp:setProperty name="values" property="long"
+                     value="${undefinedFoo}${undefinedBar}"/>
+    <p>10-${values.long}</p>
+    <tags:echo-long index="11" echo="${undefinedFoo}${undefinedBar}"/>
+
+  </body>
+</html>
+
diff --git a/test/webapp/bug48112.jsp b/test/webapp/bug48112.jsp
new file mode 100644 (file)
index 0000000..356e680
--- /dev/null
@@ -0,0 +1,24 @@
+<%@ taglib uri="http://tomcat.apache.org/testerFunctions" prefix="fn" %>
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 48112 test case</title></head>
+  <body>
+    <tags:echo echo="${fn:trim('{OK}')}"/>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/webapp/el-misc.jsp b/test/webapp/el-misc.jsp
new file mode 100644 (file)
index 0000000..d542e37
--- /dev/null
@@ -0,0 +1,32 @@
+<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
+<%--
+ 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.
+--%>
+<html>
+  <head><title>Bug 45511 test case</title></head>
+  <body>
+    <p>00-\\\"\${'hello world'}</p>
+    <p>01-\\\"\\${'hello world'}</p>
+    <tags:echo echo="02-\\\"\${'hello world'}" />
+    <tags:echo echo="03-\\\"\\${'hello world'}" />
+    <tags:echo echo="${'2'}az-04" />
+    <tags:echo echo="05-a${'2'}z" />
+    <tags:echo echo="06-az${'2'}" />
+    <tags:echo echo="${\"2\"}az-07" />
+    <tags:echo echo="08-a${\"2\"}z" />
+    <tags:echo echo="09-az${\"2\"}" />
+  </body>
+</html>
\ No newline at end of file