aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java726
1 files changed, 726 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java
new file mode 100644
index 00000000..ca4085d2
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java
@@ -0,0 +1,726 @@
+/*
+ * 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.tools.ant;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import org.apache.tools.ant.taskdefs.condition.Os;
+import org.junit.Before;
+import org.junit.ComparisonFailure;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit testcases for org.apache.tools.ant.IntrospectionHelper.
+ *
+ */
+
+public class IntrospectionHelperTest {
+
+ private Project p;
+ private IntrospectionHelper ih;
+ private static final String projectBasedir = File.separator;
+
+ @Before
+ public void setUp() {
+ p = new Project();
+ p.setBasedir(projectBasedir);
+ ih = IntrospectionHelper.getHelper(getClass());
+ }
+
+ @Test
+ public void testIsDynamic() {
+ assertFalse("Not dynamic", ih.isDynamic());
+ }
+
+ @Test
+ public void testIsContainer() {
+ assertFalse("Not a container", ih.isContainer());
+ }
+
+ @Test
+ public void testAddText() throws BuildException {
+ ih.addText(p, this, "test");
+ try {
+ ih.addText(p, this, "test2");
+ fail("test2 shouldn\'t be equal to test");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof ComparisonFailure);
+ }
+
+ ih = IntrospectionHelper.getHelper(String.class);
+ try {
+ ih.addText(p, "", "test");
+ fail("String doesn\'t support addText");
+ } catch (BuildException be) {
+ //TODO the value should be asserted
+ }
+ }
+
+ @Test
+ @Ignore("This silently ignores a build exception")
+ public void testGetAddTextMethod() {
+ Method m = ih.getAddTextMethod();
+ assertMethod(m, "addText", String.class, "test", "bing!");
+
+ ih = IntrospectionHelper.getHelper(String.class);
+ try {
+ m = ih.getAddTextMethod();
+ } catch (BuildException e) {}
+ }
+
+ @Test
+ public void testSupportsCharacters() {
+ assertTrue("IntrospectionHelperTest supports addText",
+ ih.supportsCharacters());
+
+ ih = IntrospectionHelper.getHelper(String.class);
+ assertTrue("String doesn\'t support addText", !ih.supportsCharacters());
+ }
+
+ public void addText(String text) {
+ assertEquals("test", text);
+ }
+
+ @Test
+ public void testElementCreators() throws BuildException {
+ try {
+ ih.getElementType("one");
+ fail("don't have element type one");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("two");
+ fail("createTwo takes arguments");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("three");
+ fail("createThree returns void");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("four");
+ fail("createFour returns array");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("five");
+ fail("createFive returns primitive type");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ assertEquals(String.class, ih.getElementType("six"));
+ assertEquals("test", ih.createElement(p, this, "six"));
+
+ try {
+ ih.getElementType("seven");
+ fail("addSeven takes two arguments");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("eight");
+ fail("addEight takes no arguments");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("nine");
+ fail("nine return non void");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("ten");
+ fail("addTen takes array argument");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("eleven");
+ fail("addEleven takes primitive argument");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.getElementType("twelve");
+ fail("no primitive constructor for java.lang.Class");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ assertEquals(StringBuffer.class, ih.getElementType("thirteen"));
+ assertEquals("test", ih.createElement(p, this, "thirteen").toString());
+
+ try {
+ ih.createElement(p, this, "fourteen");
+ fail("fourteen throws NullPointerException");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof NullPointerException);
+ }
+
+ try {
+ ih.createElement(p, this, "fourteen");
+ fail("fifteen throws NullPointerException");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof NullPointerException);
+ }
+ }
+
+ private Map getExpectedNestedElements() {
+ Map elemMap = new Hashtable();
+ elemMap.put("six", String.class);
+ elemMap.put("thirteen", StringBuffer.class);
+ elemMap.put("fourteen", StringBuffer.class);
+ elemMap.put("fifteen", StringBuffer.class);
+ return elemMap;
+ }
+
+ @Test
+ public void testGetNestedElements() {
+ Map elemMap = getExpectedNestedElements();
+ Enumeration e = ih.getNestedElements();
+ while (e.hasMoreElements()) {
+ String name = (String) e.nextElement();
+ Class expect = (Class) elemMap.get(name);
+ assertNotNull("Support for "+name+" in IntrospectioNHelperTest?",
+ expect);
+ assertEquals("Return type of "+name, expect, ih.getElementType(name));
+ elemMap.remove(name);
+ }
+ assertTrue("Found all", elemMap.isEmpty());
+ }
+
+ @Test
+ public void testGetNestedElementMap() {
+ Map elemMap = getExpectedNestedElements();
+ Map actualMap = ih.getNestedElementMap();
+ for (Iterator i = actualMap.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ String elemName = (String) entry.getKey();
+ Class elemClass = (Class) elemMap.get(elemName);
+ assertNotNull("Support for " + elemName +
+ " in IntrospectionHelperTest?", elemClass);
+ assertEquals("Type of " + elemName, elemClass, entry.getValue());
+ elemMap.remove(elemName);
+ }
+ assertTrue("Found all", elemMap.isEmpty());
+
+ // Check it's a read-only map.
+ try {
+ actualMap.clear();
+ //TODO we should be asserting a value somewhere in here
+ } catch (UnsupportedOperationException e) {}
+ }
+
+ @Test
+ public void testGetElementMethod() {
+ assertElemMethod("six", "createSix", String.class, null);
+ assertElemMethod("thirteen", "addThirteen", null, StringBuffer.class);
+ assertElemMethod("fourteen", "addFourteen", null, StringBuffer.class);
+ assertElemMethod("fifteen", "createFifteen", StringBuffer.class, null);
+ }
+
+ private void assertElemMethod(String elemName, String methodName,
+ Class returnType, Class methodArg) {
+ Method m = ih.getElementMethod(elemName);
+ assertEquals("Method name", methodName, m.getName());
+ Class expectedReturnType = (returnType == null)? Void.TYPE: returnType;
+ assertEquals("Return type", expectedReturnType, m.getReturnType());
+ Class[] args = m.getParameterTypes();
+ if (methodArg != null) {
+ assertEquals("Arg Count", 1, args.length);
+ assertEquals("Arg Type", methodArg, args[0]);
+ } else {
+ assertEquals("Arg Count", 0, args.length);
+ }
+ }
+
+ public Object createTwo(String s) {
+ return null;
+ }
+
+ public void createThree() {}
+
+ public Object[] createFour() {
+ return null;
+ }
+
+ public int createFive() {
+ return 0;
+ }
+
+ public String createSix() {
+ return "test";
+ }
+
+ public StringBuffer createFifteen() {
+ throw new NullPointerException();
+ }
+
+ public void addSeven(String s, String s2) {}
+
+ public void addEight() {}
+
+ public String addNine(String s) {
+ return null;
+ }
+
+ public void addTen(String[] s) {}
+
+ public void addEleven(int i) {}
+
+ public void addTwelve(Class c) {}
+
+ public void addThirteen(StringBuffer sb) {
+ sb.append("test");
+ }
+
+ public void addFourteen(StringBuffer s) {
+ throw new NullPointerException();
+ }
+
+ @Test
+ public void testAttributeSetters() throws BuildException {
+ try {
+ ih.setAttribute(p, this, "one", "test");
+ fail("setOne doesn't exist");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.setAttribute(p, this, "two", "test");
+ fail("setTwo returns non void");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.setAttribute(p, this, "three", "test");
+ fail("setThree takes no args");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.setAttribute(p, this, "four", "test");
+ fail("setFour takes two args");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.setAttribute(p, this, "five", "test");
+ fail("setFive takes array arg");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ try {
+ ih.setAttribute(p, this, "six", "test");
+ fail("Project doesn't have a String constructor");
+ } catch (BuildException be) {
+ //TODO we should be asserting a value in here
+ }
+ ih.setAttribute(p, this, "seven", "2");
+ try {
+ ih.setAttribute(p, this, "seven", "3");
+ fail("2 shouldn't be equals to three");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof ComparisonFailure);
+ }
+ ih.setAttribute(p, this, "eight", "2");
+ try {
+ ih.setAttribute(p, this, "eight", "3");
+ fail("2 shouldn't be equals to three - as int");
+ } catch (BuildException be) {
+ assertTrue("Cause of error: " + be.toString(), be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "nine", "2");
+ try {
+ ih.setAttribute(p, this, "nine", "3");
+ fail("2 shouldn't be equals to three - as Integer");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "ten", "2");
+ try {
+ ih.setAttribute(p, this, "ten", "3");
+ fail(projectBasedir+"2 shouldn't be equals to "+projectBasedir+"3");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "eleven", "2");
+ try {
+ ih.setAttribute(p, this, "eleven", "on");
+ fail("on shouldn't be false");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "twelve", "2");
+ try {
+ ih.setAttribute(p, this, "twelve", "on");
+ fail("on shouldn't be false");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.Project");
+ try {
+ ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.ProjectHelper");
+ fail("org.apache.tools.ant.Project shouldn't be equal to org.apache.tools.ant.ProjectHelper");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ try {
+ ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.Project2");
+ fail("org.apache.tools.ant.Project2 doesn't exist");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof ClassNotFoundException);
+ }
+ ih.setAttribute(p, this, "fourteen", "2");
+ try {
+ ih.setAttribute(p, this, "fourteen", "on");
+ fail("2 shouldn't be equals to three - as StringBuffer");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof ComparisonFailure);
+ }
+ ih.setAttribute(p, this, "fifteen", "abcd");
+ try {
+ ih.setAttribute(p, this, "fifteen", "on");
+ fail("o shouldn't be equal to a");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "sixteen", "abcd");
+ try {
+ ih.setAttribute(p, this, "sixteen", "on");
+ fail("o shouldn't be equal to a");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "seventeen", "17");
+ try {
+ ih.setAttribute(p, this, "seventeen", "3");
+ fail("17 shouldn't be equals to three");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "eightteen", "18");
+ try {
+ ih.setAttribute(p, this, "eightteen", "3");
+ fail("18 shouldn't be equals to three");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ ih.setAttribute(p, this, "nineteen", "19");
+ try {
+ ih.setAttribute(p, this, "nineteen", "3");
+ fail("19 shouldn't be equals to three");
+ } catch (BuildException be) {
+ assertTrue(be.getCause() instanceof AssertionError);
+ }
+ }
+
+ private Map getExpectedAttributes() {
+ Map attrMap = new Hashtable();
+ attrMap.put("seven", String.class);
+ attrMap.put("eight", Integer.TYPE);
+ attrMap.put("nine", Integer.class);
+ attrMap.put("ten", File.class);
+ attrMap.put("eleven", Boolean.TYPE);
+ attrMap.put("twelve", Boolean.class);
+ attrMap.put("thirteen", Class.class);
+ attrMap.put("fourteen", StringBuffer.class);
+ attrMap.put("fifteen", Character.TYPE);
+ attrMap.put("sixteen", Character.class);
+ attrMap.put("seventeen", Byte.TYPE);
+ attrMap.put("eightteen", Short.TYPE);
+ attrMap.put("nineteen", Double.TYPE);
+
+ /*
+ * JUnit 3.7 adds a getName method to TestCase - so we now
+ * have a name attribute in IntrospectionHelperTest if we run
+ * under JUnit 3.7 but not in earlier versions.
+ *
+ * Simply add it here and remove it after the tests.
+ */
+ attrMap.put("name", String.class);
+
+ return attrMap;
+ }
+
+ @Test
+ public void testGetAttributes() {
+ Map attrMap = getExpectedAttributes();
+ Enumeration e = ih.getAttributes();
+ while (e.hasMoreElements()) {
+ String name = (String) e.nextElement();
+ Class expect = (Class) attrMap.get(name);
+ assertNotNull("Support for "+name+" in IntrospectionHelperTest?",
+ expect);
+ assertEquals("Type of "+name, expect, ih.getAttributeType(name));
+ attrMap.remove(name);
+ }
+ attrMap.remove("name");
+ assertTrue("Found all", attrMap.isEmpty());
+ }
+
+ @Test
+ public void testGetAttributeMap() {
+ Map attrMap = getExpectedAttributes();
+ Map actualMap = ih.getAttributeMap();
+ for (Iterator i = actualMap.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ String attrName = (String) entry.getKey();
+ Class attrClass = (Class) attrMap.get(attrName);
+ assertNotNull("Support for " + attrName +
+ " in IntrospectionHelperTest?", attrClass);
+ assertEquals("Type of " + attrName, attrClass, entry.getValue());
+ attrMap.remove(attrName);
+ }
+ attrMap.remove("name");
+ assertTrue("Found all", attrMap.isEmpty());
+
+ // Check it's a read-only map.
+ try {
+ actualMap.clear();
+ //TODO we should be asserting a value somewhere in here
+ } catch (UnsupportedOperationException e) {}
+ }
+
+ @Test
+ public void testGetAttributeMethod() {
+ assertAttrMethod("seven", "setSeven", String.class,
+ "2", "3");
+ assertAttrMethod("eight", "setEight", Integer.TYPE,
+ new Integer(2), new Integer(3));
+ assertAttrMethod("nine", "setNine", Integer.class,
+ new Integer(2), new Integer(3));
+ assertAttrMethod("ten", "setTen", File.class,
+ new File(projectBasedir + 2), new File("toto"));
+ assertAttrMethod("eleven", "setEleven", Boolean.TYPE,
+ Boolean.FALSE, Boolean.TRUE);
+ assertAttrMethod("twelve", "setTwelve", Boolean.class,
+ Boolean.FALSE, Boolean.TRUE);
+ assertAttrMethod("thirteen", "setThirteen", Class.class,
+ Project.class, Map.class);
+ assertAttrMethod("fourteen", "setFourteen", StringBuffer.class,
+ new StringBuffer("2"), new StringBuffer("3"));
+ assertAttrMethod("fifteen", "setFifteen", Character.TYPE,
+ new Character('a'), new Character('b'));
+ assertAttrMethod("sixteen", "setSixteen", Character.class,
+ new Character('a'), new Character('b'));
+ assertAttrMethod("seventeen", "setSeventeen", Byte.TYPE,
+ new Byte((byte)17), new Byte((byte)10));
+ assertAttrMethod("eightteen", "setEightteen", Short.TYPE,
+ new Short((short)18), new Short((short)10));
+ assertAttrMethod("nineteen", "setNineteen", Double.TYPE,
+ new Double(19), new Double((short)10));
+
+ try {
+ assertAttrMethod("onehundred", null, null, null, null);
+ fail("Should have raised a BuildException!");
+ } catch (BuildException e) {
+ //TODO we should be asserting a value in here
+ }
+ }
+
+ private void assertAttrMethod(String attrName, String methodName,
+ Class methodArg, Object arg, Object badArg) {
+ Method m = ih.getAttributeMethod(attrName);
+ assertMethod(m, methodName, methodArg, arg, badArg);
+ }
+
+ public int setTwo(String s) {
+ return 0;
+ }
+
+ public void setThree() {}
+
+ public void setFour(String s1, String s2) {}
+
+ public void setFive(String[] s) {}
+
+ public void setSix(Project p) {}
+
+ public void setSeven(String s) {
+ assertEquals("2", s);
+ }
+
+ public void setEight(int i) {
+ assertEquals(2, i);
+ }
+
+ public void setNine(Integer i) {
+ assertEquals(2, i.intValue());
+ }
+
+ public void setTen(File f) {
+ String path = f.getAbsolutePath();
+ if (Os.isFamily("unix") || Os.isFamily("openvms")) {
+ assertEquals(projectBasedir+"2", path);
+ } else if (Os.isFamily("netware")) {
+ assertEquals(projectBasedir+"2", path.toLowerCase(Locale.US));
+ } else {
+ assertEquals(":"+projectBasedir+"2",
+ path.toLowerCase(Locale.US).substring(1));
+ }
+ }
+
+ public void setEleven(boolean b) {
+ assertTrue(!b);
+ }
+
+ public void setTwelve(Boolean b) {
+ assertTrue(!b.booleanValue());
+ }
+
+ public void setThirteen(Class c) {
+ assertEquals(Project.class, c);
+ }
+
+ public void setFourteen(StringBuffer sb) {
+ assertEquals("2", sb.toString());
+ }
+
+ public void setFifteen(char c) {
+ assertEquals(c, 'a');
+ }
+
+ public void setSixteen(Character c) {
+ assertEquals(c.charValue(), 'a');
+ }
+
+ public void setSeventeen(byte b) {
+ assertEquals(17, b);
+ }
+
+ public void setEightteen(short s) {
+ assertEquals(18, s);
+ }
+
+ public void setNineteen(double d) {
+ double diff = d - 19;
+ assertTrue("Expected 19, received " + d, diff > -1e-6 && diff < 1e-6);
+ }
+
+ @Test
+ public void testGetExtensionPoints() {
+ List extensions = ih.getExtensionPoints();
+ final int adders = 2;
+ assertEquals("extension count", adders, extensions.size());
+
+ // this original test assumed something about the order of
+ // add(Number) and addConfigured(Map) returned by reflection.
+ // Unfortunately the assumption doesn't hold for all VMs
+ // (failed on MacOS X using JDK 1.4.2_05) and the possible
+ // combinatorics are too hard to check. We really only want
+ // to ensure that the more derived Hashtable can be found
+ // before Map.
+// assertExtMethod(extensions.get(0), "add", Number.class,
+// new Integer(2), new Integer(3));
+
+ // addConfigured(Hashtable) should come before addConfigured(Map)
+ assertExtMethod(extensions.get(adders - 2),
+ "addConfigured", Hashtable.class,
+ makeTable("key", "value"), makeTable("1", "2"));
+
+ assertExtMethod(extensions.get(adders - 1), "addConfigured", Map.class,
+ new HashMap(), makeTable("1", "2"));
+ }
+
+ private void assertExtMethod(Object mo, String methodName, Class methodArg,
+ Object arg, Object badArg) {
+ assertMethod((Method) mo, methodName, methodArg, arg, badArg);
+ }
+
+ private void assertMethod(Method m, String methodName, Class methodArg,
+ Object arg, Object badArg) {
+ assertEquals("Method name", methodName, m.getName());
+ assertEquals("Return type", Void.TYPE, m.getReturnType());
+ Class[] args = m.getParameterTypes();
+ assertEquals("Arg Count", 1, args.length);
+ assertEquals("Arg Type", methodArg, args[0]);
+
+ try {
+ m.invoke(this, new Object[] { arg });
+ } catch (IllegalAccessException e) {
+ throw new BuildException(e);
+ } catch (InvocationTargetException e) {
+ throw new BuildException(e);
+ }
+
+ try {
+ m.invoke(this, new Object[] { badArg });
+ fail("Should have raised an assertion exception");
+ } catch (IllegalAccessException e) {
+ throw new BuildException(e);
+ } catch (InvocationTargetException e) {
+ Throwable t = e.getTargetException();
+ assertTrue(t.toString(), t instanceof AssertionError);
+ }
+ }
+
+ public List add(List l) {
+ // INVALID extension point
+ return null;
+ }
+
+ // see comments in testGetExtensionPoints
+// public void add(Number n) {
+// // Valid extension point
+// assertEquals(2, n.intValue());
+// }
+
+ public void add(List l, int i) {
+ // INVALID extension point
+ }
+
+ public void addConfigured(Map m) {
+ // Valid extension point
+ assertTrue(m.size() == 0);
+ }
+
+ public void addConfigured(Hashtable h) {
+ // Valid extension point, more derived than Map above, but *after* it!
+ assertEquals(makeTable("key", "value"), h);
+ }
+
+ private Hashtable makeTable(Object key, Object value) {
+ Hashtable table = new Hashtable();
+ table.put(key, value);
+ return table;
+ }
+
+} // IntrospectionHelperTest
+