test to do some more interesting introspection tests
git-svn-id: https://svn.apache.org/repos/asf/jakarta/velocity/trunk@75749 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/velocity/test/IntrospectorTestCase3.java b/src/java/org/apache/velocity/test/IntrospectorTestCase3.java
new file mode 100644
index 0000000..f7e458c
--- /dev/null
+++ b/src/java/org/apache/velocity/test/IntrospectorTestCase3.java
@@ -0,0 +1,190 @@
+package org.apache.velocity.test;
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Velocity", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import java.lang.reflect.Method;
+
+import org.apache.velocity.runtime.RuntimeSingleton;
+
+import junit.framework.TestCase;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Simple introspector test case for primitive problem found in 1.3
+ *
+ * @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
+ * @version $Id: IntrospectorTestCase3.java,v 1.2 2002/07/25 02:57:36 geirm Exp $
+ */
+public class IntrospectorTestCase3 extends BaseTestCase
+{
+ /**
+ * Creates a new instance.
+ */
+ public IntrospectorTestCase3(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(IntrospectorTestCase3.class);
+ }
+
+ public void testSimple()
+ throws Exception
+ {
+ Method method;
+ String result;
+ String type;
+
+ MethodProvider mp = new MethodProvider();
+
+ /*
+ * string integer
+ */
+
+ Object[] listIntInt = { new ArrayList(), new Integer(1), new Integer(2) };
+ Object[] listLongList = { new ArrayList(), new Long(1), new ArrayList() };
+ Object[] listLongInt = { new ArrayList(), new Long(1), new Integer(2) };
+ Object[] intInt = { new Integer(1), new Integer(2) };
+ Object[] longInt = { new Long(1), new Integer(2) };
+ Object[] longLong = { new Long(1), new Long(2) };
+
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "lii", listIntInt);
+ result = (String) method.invoke(mp, listIntInt);
+
+ assertTrue(result.equals("lii"));
+
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "ii", intInt);
+ result = (String) method.invoke(mp, intInt);
+
+ assertTrue(result.equals("ii"));
+
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "ll", longInt);
+ result = (String) method.invoke(mp, longInt);
+
+ assertTrue(result.equals("ll"));
+
+ /*
+ * test overloading with primitives
+ */
+
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "ll", longLong);
+ result = (String) method.invoke(mp, longLong);
+
+ assertTrue(result.equals("ll"));
+
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "lll", listLongList);
+ result = (String) method.invoke(mp, listLongList);
+
+ assertTrue(result.equals("lll"));
+
+ /*
+ * test invocation with nulls
+ */
+
+ Object [] oa = {null, new Integer(0)};
+ method = RuntimeSingleton.getIntrospector().getMethod(
+ MethodProvider.class, "lll", oa );
+ result = (String) method.invoke(mp, oa);
+
+ assertTrue(result.equals("Listl"));
+
+ }
+
+ public static class MethodProvider
+ {
+ public String ii(int p, int d)
+ {
+ return "ii";
+ }
+
+ public String lii(List s, int p, int d)
+ {
+ return "lii";
+ }
+
+ public String lll(List s, long p, List d)
+ {
+ return "lll";
+ }
+
+
+ public String lll(List s, long p, int d)
+ {
+ return "lli";
+ }
+
+ public String lll(List s, long p)
+ {
+ return "Listl";
+ }
+
+ public String ll(long p, long d)
+ {
+ return "ll";
+ }
+
+ }
+}