001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.apache.tools.ant.module.api;
043:
044: import java.io.File;
045: import java.util.Arrays;
046: import java.util.Collections;
047: import java.util.Map;
048: import org.netbeans.junit.MockServices;
049: import org.netbeans.junit.NbTestCase;
050: import org.openide.modules.InstalledFileLocator;
051:
052: // XXX testSubElements
053: // XXX testSpecials
054:
055: /**
056: * Test functionality of IntrospectedInfo.
057: * @author Jesse Glick
058: */
059: public class IntrospectedInfoTest extends NbTestCase {
060:
061: public IntrospectedInfoTest(String name) {
062: super (name);
063: }
064:
065: private IntrospectedInfo ii;
066:
067: @Override
068: protected void setUp() throws Exception {
069: MockServices.setServices(IFL.class);
070: ii = IntrospectedInfo.getDefaults();
071: }
072:
073: public void testBasicDefinitions() throws Exception {
074: Map<String, String> tasks = ii.getDefs("task");
075: assertEquals("binding for javac",
076: "org.apache.tools.ant.taskdefs.Javac", tasks
077: .get("javac"));
078: assertEquals("binding for sql",
079: "org.apache.tools.ant.taskdefs.SQLExec", tasks
080: .get("sql"));
081: Map<String, String> types = ii.getDefs("type");
082: assertEquals("binding for path",
083: "org.apache.tools.ant.types.FileSet", types
084: .get("fileset"));
085: assertEquals("binding for path",
086: "org.apache.tools.ant.types.Path", types.get("path"));
087: }
088:
089: public void testBasicAttributes() throws Exception {
090: Map<String, String> attrs = ii
091: .getAttributes("org.apache.tools.ant.taskdefs.Javac");
092: assertEquals("right type for destdir", "java.io.File", attrs
093: .get("destdir"));
094: // XXX sometimes this line fails - when run from inside the IDE, but not on the command line!
095: // (related to #50160?)
096: // Debugger shows that IntrospectionHelper.createAttributeSetter is calling
097: // Path.class.getConstructor(new Class[] {Project.class, String.class})
098: // and this is (for some reason) throwing a NoSuchMethodException.
099: // Seems to be that Path.class has a matching constructor but with a different
100: // version of Project.class - some sort of class loader snafu perhaps.
101: // The code sources appear correct.
102: /*
103: assertEquals("right type for srcdir", "org.apache.tools.ant.types.Path", attrs.get("srcdir"));
104: */
105: /* This however works:
106: ClassLoader l = org.apache.tools.ant.module.bridge.AntBridge.getMainClassLoader();
107: Class prj = l.loadClass("org.apache.tools.ant.Project");
108: Class path = l.loadClass("org.apache.tools.ant.types.Path");
109: System.out.println("constructor: " + path.getConstructor(new Class[] {prj, String.class}));
110: */
111: }
112:
113: public void testEnumeratedAttributes() throws Exception {
114: ii.register("enumtask", EnumTask.class, "task");
115: String k1 = EnumTask.class.getName();
116: assertEquals(k1, ii.getDefs("task").get("enumtask"));
117: String k2 = EnumTask.E.class.getName();
118: assertEquals(Collections.singletonMap("attr", k2), ii
119: .getAttributes(k1));
120: assertEquals("[chocolate, vanilla, strawberry]", Arrays
121: .toString(ii.getTags(k2)));
122: }
123:
124: public static class EnumTask {
125: public enum E {
126: chocolate, vanilla, strawberry
127: }
128:
129: public void setAttr(E e) {
130: }
131: }
132:
133: public static final class IFL extends InstalledFileLocator {
134: public IFL() {
135: //System.err.println("ant.home=" + System.getProperty("test.ant.home"));
136: }
137:
138: @Override
139: public File locate(String relativePath, String codeNameBase,
140: boolean localized) {
141: if (relativePath.equals("ant/nblib/bridge.jar")) {
142: String path = System.getProperty("test.bridge.jar");
143: assertNotNull("must set test.bridge.jar", path);
144: return new File(path);
145: } else if (relativePath.equals("ant")) {
146: String path = System.getProperty("test.ant.home");
147: assertNotNull("must set test.ant.home", path);
148: return new File(path);
149: } else if (relativePath.startsWith("ant/")) {
150: String path = System.getProperty("test.ant.home");
151: assertNotNull("must set test.ant.home", path);
152: return new File(path, relativePath.substring(4)
153: .replace('/', File.separatorChar));
154: } else {
155: return null;
156: }
157: }
158: }
159:
160: }
|