/* * The Apache Software License, Version 1.1 * * Copyright (c) 2000 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", "Ant", 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 * . */ package org.apache.tools.ant; import junit.framework.TestCase; import junit.framework.AssertionFailedError; import java.io.File; import java.util.*; /** * JUnit 3 testcases for org.apache.tools.ant.IntrospectionHelper. * * @author Stefan Bodewig */ public class IntrospectionHelperTest extends TestCase { private Project p; public static boolean isUnixStyle = File.pathSeparatorChar == ':'; public IntrospectionHelperTest(String name) { super(name); } public void setUp() { p = new Project(); p.setBasedir("/tmp"); } public void testAddText() throws BuildException { IntrospectionHelper ih = IntrospectionHelper.getHelper(java.lang.String.class); try { ih.addText(p, "", "test"); fail("String doesn\'t support addText"); } catch (BuildException be) { } ih = IntrospectionHelper.getHelper(getClass()); ih.addText(p, this, "test"); try { ih.addText(p, this, "test2"); fail("test2 shouldn\'t be equal to test"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } } public void testSupportsCharacters() { IntrospectionHelper ih = IntrospectionHelper.getHelper(java.lang.String.class); assert("String doesn\'t support addText", !ih.supportsCharacters()); ih = IntrospectionHelper.getHelper(getClass()); assert("IntrospectionHelperTest supports addText", ih.supportsCharacters()); } public void addText(String text) { assertEquals("test", text); } public void testElementCreators() throws BuildException { IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass()); try { ih.getElementType("one"); fail("don't have element type one"); } catch (BuildException be) { } try { ih.getElementType("two"); fail("createTwo takes arguments"); } catch (BuildException be) { } try { ih.getElementType("three"); fail("createThree returns void"); } catch (BuildException be) { } try { ih.getElementType("four"); fail("createFour returns array"); } catch (BuildException be) { } try { ih.getElementType("five"); fail("createFive returns primitive type"); } catch (BuildException be) { } assertEquals(java.lang.String.class, ih.getElementType("six")); assertEquals("test", ih.createElement(p, this, "six")); try { ih.getElementType("seven"); fail("addSeven takes two arguments"); } catch (BuildException be) { } try { ih.getElementType("eight"); fail("addEight takes no arguments"); } catch (BuildException be) { } try { ih.getElementType("nine"); fail("nine return non void"); } catch (BuildException be) { } try { ih.getElementType("ten"); fail("addTen takes array argument"); } catch (BuildException be) { } try { ih.getElementType("eleven"); fail("addEleven takes primitive argument"); } catch (BuildException be) { } try { ih.getElementType("twelve"); fail("no primitive constructor for java.lang.Class"); } catch (BuildException be) { } assertEquals(java.lang.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) { assert(be.getException() instanceof NullPointerException); } try { ih.createElement(p, this, "fourteen"); fail("fifteen throws NullPointerException"); } catch (BuildException be) { assert(be.getException() instanceof NullPointerException); } } public void testGetNestedElements() { Hashtable h = new Hashtable(); h.put("six", java.lang.String.class); h.put("thirteen", java.lang.StringBuffer.class); h.put("fourteen", java.lang.StringBuffer.class); h.put("fifteen", java.lang.StringBuffer.class); IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass()); Enumeration enum = ih.getNestedElements(); while (enum.hasMoreElements()) { String name = (String) enum.nextElement(); Class expect = (Class) h.get(name); assertNotNull("Support for "+name+" in IntrospectioNHelperTest?", expect); assertEquals("Return type of "+name, expect, ih.getElementType(name)); h.remove(name); } assert("Found all", h.isEmpty()); } 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(); } public void testAttributeSetters() throws BuildException { IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass()); try { ih.setAttribute(p, this, "one", "test"); fail("setOne doesn't exist"); } catch (BuildException be) { } try { ih.setAttribute(p, this, "two", "test"); fail("setTwo returns non void"); } catch (BuildException be) { } try { ih.setAttribute(p, this, "three", "test"); fail("setThree takes no args"); } catch (BuildException be) { } try { ih.setAttribute(p, this, "four", "test"); fail("setFour takes two args"); } catch (BuildException be) { } try { ih.setAttribute(p, this, "five", "test"); fail("setFive takes array arg"); } catch (BuildException be) { } try { ih.setAttribute(p, this, "six", "test"); fail("Project doesn't have a String constructor"); } catch (BuildException be) { } ih.setAttribute(p, this, "seven", "2"); try { ih.setAttribute(p, this, "seven", "3"); fail("2 shouldn't be equals to three"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } 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) { assert(be.getException() instanceof AssertionFailedError); } 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) { assert(be.getException() instanceof AssertionFailedError); } ih.setAttribute(p, this, "ten", "2"); try { ih.setAttribute(p, this, "ten", "3"); fail("/tmp/2 shouldn't be equals to /tmp/3"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } ih.setAttribute(p, this, "eleven", "2"); try { ih.setAttribute(p, this, "eleven", "on"); fail("on shouldn't be false"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } ih.setAttribute(p, this, "twelve", "2"); try { ih.setAttribute(p, this, "twelve", "on"); fail("on shouldn't be false"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } 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) { assert(be.getException() instanceof AssertionFailedError); } try { ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.Project2"); fail("org.apache.tools.ant.Project2 doesn't exist"); } catch (BuildException be) { assert(be.getException() 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) { assert(be.getException() instanceof AssertionFailedError); } ih.setAttribute(p, this, "fifteen", "abcd"); try { ih.setAttribute(p, this, "fifteen", "on"); fail("o shouldn't be equal to a"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } ih.setAttribute(p, this, "sixteen", "abcd"); try { ih.setAttribute(p, this, "sixteen", "on"); fail("o shouldn't be equal to a"); } catch (BuildException be) { assert(be.getException() instanceof AssertionFailedError); } } public void testGetAttributes() { Hashtable h = new Hashtable(); h.put("seven", java.lang.String.class); h.put("eight", java.lang.Integer.TYPE); h.put("nine", java.lang.Integer.class); h.put("ten", java.io.File.class); h.put("eleven", java.lang.Boolean.TYPE); h.put("twelve", java.lang.Boolean.class); h.put("thirteen", java.lang.Class.class); h.put("fourteen", java.lang.StringBuffer.class); h.put("fifteen", java.lang.Character.TYPE); h.put("sixteen", java.lang.Character.class); /* * 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. */ h.put("name", java.lang.String.class); IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass()); Enumeration enum = ih.getAttributes(); while (enum.hasMoreElements()) { String name = (String) enum.nextElement(); Class expect = (Class) h.get(name); assertNotNull("Support for "+name+" in IntrospectionHelperTest?", expect); assertEquals("Type of "+name, expect, ih.getAttributeType(name)); h.remove(name); } h.remove("name"); assert("Found all", h.isEmpty()); } 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) { if (isUnixStyle) { assertEquals("/tmp/2", f.getAbsolutePath()); } else if (System.getProperty("os.name").toLowerCase().equals("netware")) { assertEquals("\\tmp\\2", f.getAbsolutePath().toLowerCase()); } else { assertEquals(":\\tmp\\2", f.getAbsolutePath().toLowerCase().substring(1)); } } public void setEleven(boolean b) { assert(!b); } public void setTwelve(Boolean b) { assert(!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'); } }// IntrospectionHelperTest