KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > java > j2seproject > classpath > SourcePathImplementationTest


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.netbeans.modules.java.j2seproject.classpath;
21
22 import java.beans.PropertyChangeListener JavaDoc;
23 import java.beans.PropertyChangeEvent JavaDoc;
24 import java.io.File JavaDoc;
25 import java.net.URL JavaDoc;
26 import java.util.Arrays JavaDoc;
27 import java.util.Collections JavaDoc;
28 import java.util.HashSet JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.Set JavaDoc;
31 import org.netbeans.modules.java.j2seproject.J2SEProject;
32 import org.netbeans.modules.java.j2seproject.J2SEProjectUtil;
33 import org.netbeans.spi.project.support.ant.EditableProperties;
34 import org.openide.filesystems.FileObject;
35 import org.openide.filesystems.FileUtil;
36 import org.openide.modules.SpecificationVersion;
37 import org.netbeans.junit.NbTestCase;
38 import org.netbeans.api.project.ProjectManager;
39 import org.netbeans.api.project.TestUtil;
40 import org.netbeans.api.java.classpath.ClassPath;
41 import org.netbeans.api.project.FileOwnerQuery;
42 import org.netbeans.api.project.Project;
43 import org.netbeans.spi.project.support.ant.AntProjectHelper;
44 import org.netbeans.modules.java.j2seproject.J2SEProjectGenerator;
45 import org.netbeans.modules.java.j2seproject.SourceRootsTest;
46 import org.netbeans.modules.java.j2seproject.ui.customizer.J2SEProjectProperties;
47 import org.openide.util.Mutex;
48
49 public class SourcePathImplementationTest extends NbTestCase {
50
51     public SourcePathImplementationTest(String JavaDoc testName) {
52         super(testName);
53     }
54
55     private FileObject scratch;
56     private FileObject projdir;
57     private FileObject sources;
58     private ProjectManager pm;
59     private AntProjectHelper helper;
60     private J2SEProject pp;
61
62     protected void setUp() throws Exception JavaDoc {
63         super.setUp();
64         scratch = TestUtil.makeScratchDir(this);
65         projdir = scratch.createFolder("proj");
66         J2SEProjectGenerator.setDefaultSourceLevel(new SpecificationVersion ("1.4")); //NOI18N
67
helper = J2SEProjectGenerator.createProject(FileUtil.toFile(projdir),"proj",null,null); //NOI18N
68
J2SEProjectGenerator.setDefaultSourceLevel(null);
69         pm = ProjectManager.getDefault();
70         pp = pm.findProject(projdir).getLookup().lookup(J2SEProject.class);
71         sources = projdir.getFileObject("src");
72     }
73
74     protected void tearDown() throws Exception JavaDoc {
75         scratch = null;
76         projdir = null;
77         pm = null;
78         super.tearDown();
79     }
80
81     public void testSourcePathImplementation () throws Exception JavaDoc {
82         ClassPathProviderImpl cpProvider = pp.getLookup().lookup(ClassPathProviderImpl.class);
83         ClassPath[] cps = cpProvider.getProjectClassPaths(ClassPath.SOURCE);
84         ClassPath cp = cps[0];
85         FileObject[] roots = cp.getRoots();
86         assertNotNull ("Roots can not be null",roots);
87         assertEquals("There must be one source root", 1, roots.length);
88         assertEquals("There must be src root",roots[0],sources);
89         TestListener tl = new TestListener();
90         cp.addPropertyChangeListener (tl);
91         FileObject newRoot = SourceRootsTest.addSourceRoot(helper, projdir,"src.other.dir","other");
92         assertTrue("Classpath must fire PROP_ENTRIES and PROP_ROOTS", tl.getEvents().containsAll(Arrays.asList(ClassPath.PROP_ENTRIES, ClassPath.PROP_ROOTS)));
93         roots = cp.getRoots();
94         assertNotNull ("Roots can not be null",roots);
95         assertEquals("There must be two source roots", 2, roots.length);
96         assertEquals("There must be src root",roots[0],sources);
97         assertEquals("There must be other root",roots[1],newRoot);
98         cp.removePropertyChangeListener(tl);
99     }
100     
101     public void testWSClientSupport () throws Exception JavaDoc {
102         ClassPathProviderImpl cpProvider = pp.getLookup().lookup(ClassPathProviderImpl.class);
103         ClassPath[] cps = cpProvider.getProjectClassPaths(ClassPath.SOURCE);
104         ClassPath cp = cps[0];
105         List JavaDoc<ClassPath.Entry> entries = cp.entries();
106         assertNotNull ("Entries can not be null", entries);
107         assertEquals ("There must be 3 src entries",3, entries.size());
108         assertEquals("There must be src root", entries.get(0).getRoot(), sources);
109         String JavaDoc buildDir = (String JavaDoc) J2SEProjectUtil.getEvaluatedProperty(pp,"${build.dir}");
110         assertNotNull ("There is no build.dir property", buildDir);
111         File JavaDoc f = new File JavaDoc (new File JavaDoc (pp.getAntProjectHelper().resolveFile(buildDir),"generated"),"wsclient");
112         URL JavaDoc url = f.toURI().toURL();
113         if (!f.exists()) {
114             url = new URL JavaDoc (url.toExternalForm() + "/");
115         }
116         assertEquals("There must be WSClient entry", entries.get(1).getURL(), url);
117         
118         f = new File JavaDoc (pp.getAntProjectHelper().resolveFile(buildDir),"generated/wsimport/client");
119         url = f.toURI().toURL();
120         if (!f.exists()) {
121             url = new URL JavaDoc (url.toExternalForm() + "/");
122         }
123         assertEquals("There must be WSImportClient entry", entries.get(2).getURL(), url);
124         
125         ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction<Void JavaDoc>() {
126             public Void JavaDoc run() throws Exception JavaDoc {
127                 EditableProperties ep = pp.getAntProjectHelper().getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
128                 ep.put("build.dir","build2"); //NOI18N
129
pp.getAntProjectHelper().putProperties (AntProjectHelper.PROJECT_PROPERTIES_PATH,ep);
130                 ProjectManager.getDefault().saveProject(pp);
131                 return null;
132             }
133         });
134         entries = cp.entries();
135         assertNotNull ("Entries can not be null", entries);
136         assertEquals ("There must be 3 src entries",3, entries.size());
137         assertEquals("There must be src root", entries.get(0).getRoot(), sources);
138         buildDir = (String JavaDoc) J2SEProjectUtil.getEvaluatedProperty(pp,"${build.dir}");
139         assertNotNull ("There is no build.dir property", buildDir);
140         f = new File JavaDoc (new File JavaDoc (pp.getAntProjectHelper().resolveFile(buildDir),"generated"),"wsclient");
141         url = f.toURI().toURL();
142         if (!f.exists()) {
143             url = new URL JavaDoc (url.toExternalForm() + "/");
144         }
145         assertEquals("There must be WSClient entry", entries.get(1).getURL(), url);
146         
147         f = new File JavaDoc (pp.getAntProjectHelper().resolveFile(buildDir),"generated/wsimport/client");
148         url = f.toURI().toURL();
149         if (!f.exists()) {
150             url = new URL JavaDoc (url.toExternalForm() + "/");
151         }
152         assertEquals("There must be WSImportClient entry", entries.get(2).getURL(), url);
153     }
154
155     public void testIncludesExcludes() throws Exception JavaDoc {
156         ClassPath cp = pp.getLookup().lookup(ClassPathProviderImpl.class).getProjectSourcesClassPath(ClassPath.SOURCE);
157         assertEquals(Collections.singletonList(sources), Arrays.asList(cp.getRoots()));
158         FileObject objectJava = FileUtil.createData(sources, "java/lang/Object.java");
159         FileObject jcJava = FileUtil.createData(sources, "javax/swing/JComponent.java");
160         FileObject doc = FileUtil.createData(sources, "javax/swing/doc-files/index.html");
161         assertTrue(cp.contains(objectJava));
162         assertTrue(cp.contains(objectJava.getParent()));
163         assertTrue(cp.contains(jcJava));
164         assertTrue(cp.contains(jcJava.getParent()));
165         assertTrue(cp.contains(doc));
166         assertTrue(cp.contains(doc.getParent()));
167         TestListener tl = new TestListener();
168         cp.addPropertyChangeListener(tl);
169         EditableProperties ep = helper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
170         ep.setProperty(J2SEProjectProperties.INCLUDES, "javax/swing/");
171         ep.setProperty(J2SEProjectProperties.EXCLUDES, "**/doc-files/");
172         helper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
173         pm.saveProject(pp);
174         assertEquals(Collections.singleton(ClassPath.PROP_INCLUDES), tl.getEvents());
175         assertFalse(cp.contains(objectJava));
176         assertFalse(cp.contains(objectJava.getParent()));
177         assertTrue(cp.contains(jcJava));
178         assertTrue(cp.contains(jcJava.getParent()));
179         assertTrue(cp.contains(jcJava.getParent().getParent()));
180         assertFalse(cp.contains(doc));
181         assertFalse(cp.contains(doc.getParent()));
182     }
183
184     public void testIncludesFiredJustOnce() throws Exception JavaDoc {
185         File JavaDoc src1 = new File JavaDoc(getWorkDir(), "src1");
186         src1.mkdir();
187         File JavaDoc src2 = new File JavaDoc(getWorkDir(), "src2");
188         src2.mkdir();
189         AntProjectHelper h = J2SEProjectGenerator.createProject(new File JavaDoc(getWorkDir(), "prj"), "test", new File JavaDoc[] {src1, src2}, new File JavaDoc[0], null);
190         Project p = ProjectManager.getDefault().findProject(h.getProjectDirectory());
191         FileOwnerQuery.markExternalOwner(src1.toURI(), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT);
192         ClassPath cp = ClassPath.getClassPath(FileUtil.toFileObject(src1), ClassPath.SOURCE);
193         assertNotNull(cp);
194         assertEquals(2, cp.getRoots().length);
195         ClassPath.Entry cpe2 = cp.entries().get(1);
196         assertEquals(src2.toURI().toURL(), cpe2.getURL());
197         assertTrue(cpe2.includes("stuff/"));
198         assertTrue(cpe2.includes("whatever/"));
199         class L implements PropertyChangeListener JavaDoc {
200             int cnt;
201             public void propertyChange(PropertyChangeEvent JavaDoc e) {
202                 if (ClassPath.PROP_INCLUDES.equals(e.getPropertyName())) {
203                     cnt++;
204                 }
205             }
206         }
207         L JavaDoc l = new L JavaDoc();
208         cp.addPropertyChangeListener(l);
209         EditableProperties ep = helper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
210         ep.setProperty(J2SEProjectProperties.INCLUDES, "whatever/");
211         h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
212         ProjectManager.getDefault().saveProject(p);
213         assertEquals(1, l.cnt);
214         assertFalse(cpe2.includes("stuff/"));
215         assertTrue(cpe2.includes("whatever/"));
216         ep.setProperty(J2SEProjectProperties.INCLUDES, "whateverelse/");
217         h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
218         ProjectManager.getDefault().saveProject(p);
219         assertEquals(2, l.cnt);
220         assertFalse(cpe2.includes("stuff/"));
221         assertFalse(cpe2.includes("whatever/"));
222         ep.remove(J2SEProjectProperties.INCLUDES);
223         h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
224         ProjectManager.getDefault().saveProject(p);
225         assertEquals(3, l.cnt);
226         assertTrue(cpe2.includes("stuff/"));
227         assertTrue(cpe2.includes("whatever/"));
228     }
229
230     private static class TestListener implements PropertyChangeListener JavaDoc {
231         private Set JavaDoc<String JavaDoc> events = new HashSet JavaDoc<String JavaDoc>();
232
233         public void propertyChange(PropertyChangeEvent JavaDoc evt) {
234             String JavaDoc propName = evt.getPropertyName();
235             if (propName != null) {
236                 this.events.add (propName);
237             }
238         }
239
240         public Set JavaDoc<String JavaDoc> getEvents () {
241             return Collections.unmodifiableSet(this.events);
242         }
243     }
244 }
245
Popular Tags