KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tools > ant > module > api > support > TargetListerTest


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.apache.tools.ant.module.api.support;
21
22 import java.io.IOException JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Comparator JavaDoc;
25 import java.util.List JavaDoc;
26 import java.util.SortedSet JavaDoc;
27 import java.util.TreeSet JavaDoc;
28 import org.apache.tools.ant.module.api.AntProjectCookie;
29 import org.netbeans.junit.NbTestCase;
30 import org.openide.filesystems.FileObject;
31 import org.openide.filesystems.FileUtil;
32 import org.w3c.dom.Element JavaDoc;
33
34 // XXX testMissingImport
35
// XXX testDiamondImport
36

37 /**
38  * Tests functionality of {@link TargetLister}.
39  * @author Jesse Glick
40  */

41 public class TargetListerTest extends NbTestCase {
42     
43     public TargetListerTest(String JavaDoc name) {
44         super(name);
45     }
46     
47     private FileObject testdir;
48
49     @Override JavaDoc
50     protected void setUp() throws Exception JavaDoc {
51         super.setUp();
52         FileObject masterTestdir = FileUtil.toFileObject(getDataDir());
53         assertNotNull("testdir unit/data exists", masterTestdir);
54         testdir = masterTestdir.getFileObject("targetlister");
55         assertNotNull("testdir unit/data/targetlister exists", testdir);
56     }
57     
58     public void testSimpleUsage() throws Exception JavaDoc {
59         FileObject simple = testdir.getFileObject("simple.xml");
60         assertNotNull("simple.xml found", simple);
61         List JavaDoc<TargetLister.Target> targets = getTargets(simple);
62         assertEquals("five targets", 5, targets.size());
63         // -internal, -internal-described, described, main, undescribed
64
TargetLister.Target t = targets.get(0);
65         assertEquals("correct name #1", "-internal", t.getName());
66         assertEquals("correct qname #1", "simple.-internal", t.getQualifiedName());
67         Element JavaDoc e = t.getElement();
68         assertEquals("correct element name #1", "target", e.getLocalName());
69         assertEquals("correct name attribute #1", "-internal", e.getAttribute("name"));
70         AntProjectCookie apc = TargetLister.getAntProjectCookie(simple);
71         assertEquals("element in script #1", apc.getDocument(), e.getOwnerDocument());
72         assertEquals("correct script #1", apc, t.getScript());
73         assertFalse("not described #1", t.isDescribed());
74         assertTrue("internal #1", t.isInternal());
75         assertFalse("not overridden #1", t.isOverridden());
76         assertFalse("not default #1", t.isDefault());
77         t = targets.get(1);
78         assertEquals("correct name #2", "-internal-described", t.getName());
79         assertTrue("described #2", t.isDescribed());
80         assertTrue("internal #2", t.isInternal());
81         assertFalse("not overridden #2", t.isOverridden());
82         assertFalse("not default #2", t.isDefault());
83         t = targets.get(2);
84         assertEquals("correct name #3", "described", t.getName());
85         assertTrue("described #3", t.isDescribed());
86         assertFalse("not internal #3", t.isInternal());
87         assertFalse("not overridden #3", t.isOverridden());
88         assertFalse("not default #3", t.isDefault());
89         t = targets.get(3);
90         assertEquals("correct name #4", "main", t.getName());
91         assertFalse("not described #4", t.isDescribed());
92         assertFalse("not internal #4", t.isInternal());
93         assertFalse("not overridden #4", t.isOverridden());
94         assertTrue("default #4", t.isDefault());
95         t = targets.get(4);
96         assertEquals("correct name #5", "undescribed", t.getName());
97         assertFalse("not described #5", t.isDescribed());
98         assertFalse("not internal #5", t.isInternal());
99         assertFalse("not overridden #5", t.isOverridden());
100         assertFalse("not default #5", t.isDefault());
101     }
102     
103     public void testBasicImportAndOverrides() throws IOException JavaDoc {
104         FileObject importing = testdir.getFileObject("importing.xml");
105         assertNotNull("importing.xml found", importing);
106         List JavaDoc<TargetLister.Target> targets = getTargets(importing);
107         assertEquals("seven targets", 7, targets.size());
108         // dir1/dir3/subimported.subtarget3, dir1/dir3/subimported.whatever, dir1/imported.subtarget1,
109
// dir1/imported.subtarget2, dir1/imported.whatever, importing.main, importing.subtarget1
110
TargetLister.Target t = targets.get(0);
111         assertEquals("correct qname #1", "dir1/dir3/subimported.subtarget3", t.getQualifiedName());
112         assertFalse("not described #1", t.isDescribed());
113         assertFalse("not internal #1", t.isInternal());
114         assertFalse("not overridden #1", t.isOverridden());
115         assertFalse("not default #1", t.isDefault());
116         t = targets.get(1);
117         assertEquals("correct qname #2", "dir1/dir3/subimported.whatever", t.getQualifiedName());
118         assertFalse("not described #2", t.isDescribed());
119         assertFalse("not internal #2", t.isInternal());
120         assertTrue("overridden #2", t.isOverridden());
121         assertFalse("not default #2", t.isDefault());
122         t = targets.get(2);
123         assertEquals("correct qname #3", "dir1/imported.subtarget1", t.getQualifiedName());
124         assertFalse("not described #3", t.isDescribed());
125         assertFalse("not internal #3", t.isInternal());
126         assertTrue("overridden #3", t.isOverridden());
127         assertFalse("not default #3", t.isDefault());
128         t = targets.get(3);
129         assertEquals("correct qname #4", "dir1/imported.subtarget2", t.getQualifiedName());
130         assertFalse("not described #4", t.isDescribed());
131         assertFalse("not internal #4", t.isInternal());
132         assertFalse("not overridden #4", t.isOverridden());
133         assertFalse("not default #4", t.isDefault());
134         t = targets.get(4);
135         assertEquals("correct qname #5", "dir1/imported.whatever", t.getQualifiedName());
136         assertFalse("not described #5", t.isDescribed());
137         assertFalse("not internal #5", t.isInternal());
138         assertFalse("not overridden #5", t.isOverridden());
139         assertFalse("not default #5", t.isDefault());
140         t = targets.get(5);
141         assertEquals("correct qname #6", "importing.main", t.getQualifiedName());
142         assertFalse("not described #6", t.isDescribed());
143         assertFalse("not internal #6", t.isInternal());
144         assertFalse("not overridden #6", t.isOverridden());
145         assertTrue("default #6", t.isDefault());
146         t = targets.get(6);
147         assertEquals("correct qname #7", "importing.subtarget1", t.getQualifiedName());
148         assertTrue("described #7", t.isDescribed());
149         assertFalse("not internal #7", t.isInternal());
150         assertFalse("not overridden #7", t.isOverridden());
151         assertFalse("not default #7", t.isDefault());
152     }
153     
154     public void testImportedDefaultAndDifferentBasedir() throws Exception JavaDoc {
155         // #50087: Ant does *not* use the basedir when resolving an <import>!
156
FileObject importing4 = testdir.getFileObject("importing4.xml");
157         assertNotNull("importing4.xml found", importing4);
158         List JavaDoc<TargetLister.Target> targets = getTargets(importing4);
159         assertEquals("three targets", 3, targets.size());
160         // dir2/imported2.subtarget4, dir2/imported2.whatever, importing4.subtarget4
161
TargetLister.Target t = targets.get(0);
162         assertEquals("correct qname #1", "dir2/imported2.subtarget4", t.getQualifiedName());
163         assertTrue("overridden #1", t.isOverridden());
164         assertFalse("not default #1", t.isDefault());
165         t = targets.get(1);
166         assertEquals("correct qname #2", "dir2/imported2.whatever", t.getQualifiedName());
167         assertFalse("not overridden #2", t.isOverridden());
168         assertTrue("default #2", t.isDefault());
169         t = targets.get(2);
170         assertEquals("correct qname #3", "importing4.subtarget4", t.getQualifiedName());
171         assertFalse("not overridden #3", t.isOverridden());
172         assertFalse("not default #3", t.isDefault());
173     }
174
175     /** Cf. #55263: stack overflow error */
176     public void testRecursiveImport() throws Exception JavaDoc {
177         FileObject rec1 = testdir.getFileObject("recursive1.xml");
178         assertNotNull("recursive1.xml found", rec1);
179         List JavaDoc<TargetLister.Target> targets = getTargets(rec1);
180         assertEquals("two targets", 2, targets.size());
181         TargetLister.Target t = targets.get(0);
182         assertEquals("correct qname #1", "recursive1.x", t.getQualifiedName());
183         assertTrue("default #1", t.isDefault());
184         t = targets.get(1);
185         assertEquals("correct qname #2", "recursive2.y", t.getQualifiedName());
186         assertFalse("not default #2", t.isDefault());
187     }
188     
189     public void testComputedImports() throws Exception JavaDoc {
190         FileObject importing = testdir.getFileObject("computedimports/importing.xml");
191         assertNotNull("importing.xml found", importing);
192         List JavaDoc<TargetLister.Target> targets = getTargets(importing);
193         assertEquals("three targets", 3, targets.size());
194         TargetLister.Target t = targets.get(0);
195         assertEquals("correct qname #1", "importing.master", t.getQualifiedName());
196         t = targets.get(1);
197         assertEquals("correct qname #2", "subdir/imported1.foundme", t.getQualifiedName());
198         t = targets.get(2);
199         assertEquals("correct qname #3", "subdir/imported3.intermediate", t.getQualifiedName());
200         FileObject importing2 = testdir.getFileObject("computedimports/subdir/importing2.xml");
201         assertNotNull("importing2.xml found", importing2);
202         targets = getTargets(importing2);
203         assertEquals("three targets", 3, targets.size());
204         t = targets.get(0);
205         assertEquals("correct qname #1", "subdir/imported1.foundme", t.getQualifiedName());
206         t = targets.get(1);
207         assertEquals("correct qname #2", "subdir/imported3.intermediate", t.getQualifiedName());
208         t = targets.get(2);
209         assertEquals("correct qname #3", "subdir/importing2.master", t.getQualifiedName());
210     }
211     
212     public void testIndirectOverride() throws Exception JavaDoc {
213         FileObject a = testdir.getFileObject("indirectoverride/a.xml");
214         assertNotNull("a.xml found", a);
215         List JavaDoc<TargetLister.Target> targets = getTargets(a);
216         assertEquals("two targets", 2, targets.size());
217         TargetLister.Target t = targets.get(0);
218         assertEquals("correct qname", "a.x", t.getQualifiedName());
219         assertFalse("not overridden", t.isOverridden());
220         t = targets.get(1);
221         assertEquals("correct qname", "c.x", t.getQualifiedName());
222         assertTrue("#67694: imported version is overridden", t.isOverridden());
223     }
224     
225     private static List JavaDoc<TargetLister.Target> getTargets(FileObject fo) throws IOException JavaDoc {
226         AntProjectCookie apc = TargetLister.getAntProjectCookie(fo);
227         SortedSet JavaDoc<TargetLister.Target> targets = new TreeSet JavaDoc<TargetLister.Target>(new TargetComparator());
228         targets.addAll(TargetLister.getTargets(apc));
229         return new ArrayList JavaDoc<TargetLister.Target>(targets);
230     }
231     
232     /** Sorts targets by FQN. */
233     private static final class TargetComparator implements Comparator JavaDoc<TargetLister.Target> {
234         
235         public TargetComparator() {}
236
237         public int compare(TargetLister.Target t1, TargetLister.Target t2) {
238             int x = t1.getQualifiedName().compareTo(t2.getQualifiedName());
239             if (x != 0) {
240                 return x;
241             } else {
242                 return System.identityHashCode(t2) - System.identityHashCode(t1);
243             }
244         }
245
246     }
247     
248 }
249
Popular Tags