|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.ant.freeform; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import java.util.zip.ZipEntry; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import junit.framework.*; import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectInformation; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.Sources; import org.netbeans.junit.NbTestCase; import org.netbeans.modules.web.api.webmodule.WebModule; import org.netbeans.modules.web.spi.webmodule.WebModuleProvider; import org.netbeans.spi.java.classpath.ClassPathProvider; import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.AuxiliaryConfiguration; import org.netbeans.spi.project.support.ant.AntProjectHelper; import org.netbeans.spi.project.support.ant.ProjectGenerator; import org.netbeans.spi.project.support.ant.PropertyUtils; import org.netbeans.spi.project.ui.LogicalViewProvider; import org.openide.ErrorManager; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.nodes.Node; import org.openide.util.Lookup; import org.w3c.dom.Document; import org.w3c.dom.Element; // XXX: part of the testSourceFoldersAndSourceViews test is commented out // becasue implementation of Source interface does not refresh automatically. /** * Tests for FreeformProjectGenerator. * * @author Pavel Buzek */ public class FreeformProjectGeneratorWebTest extends NbTestCase { private File lib1; private File lib2; private File src; private File web; private File doc; private File buildClasses; public FreeformProjectGeneratorWebTest(java.lang.String testName) { super(testName); } protected void setUp() throws Exception { } protected void tearDown() throws Exception { } private AntProjectHelper createEmptyProject(String projectFolder, String projectName) throws Exception { File base = new File(getWorkDir(), projectFolder); base.mkdir(); File antScript = new File(base, "build.xml"); antScript.createNewFile(); src = new File(base, "src"); src.mkdir(); web = new File(base, "web"); web.mkdir(); doc = new File(base, "doc"); doc.mkdir(); buildClasses = new File(base, "buildClasses"); buildClasses.mkdir(); File libs = new File(base, "libs"); libs.mkdir(); lib1 = new File(libs, "some.jar"); createRealJarFile(lib1); lib2 = new File(libs, "some2.jar"); createRealJarFile(lib2); // XXX: might need to call refresh here?? // FileObject fo = FileUtil.toFileObject(getWorkDir()); // fo.refresh(); ArrayList sources = new ArrayList(); FreeformProjectGenerator.SourceFolder sf = new FreeformProjectGenerator.SourceFolder(); sf.label = "src"; sf.type = "java"; sf.location = src.getAbsolutePath(); sf.style = "packages"; sources.add(sf); FreeformProjectGenerator.SourceFolder sf2 = new FreeformProjectGenerator.SourceFolder(); sf2.label = "web"; sf2.type = "doc_root"; sf2.location = web.getAbsolutePath(); sf2.style = "tree"; sources.add(sf2); ArrayList compUnits = new ArrayList(); FreeformProjectGenerator.JavaCompilationUnit cu = new FreeformProjectGenerator.JavaCompilationUnit(); FreeformProjectGenerator.JavaCompilationUnit.CP cp = new FreeformProjectGenerator.JavaCompilationUnit.CP(); cp.classpath = lib1.getAbsolutePath(); cp.mode = "compile"; cu.classpath = Collections.singletonList(cp); cu.sourceLevel = "1.4"; ArrayList outputs = new ArrayList (); outputs.add ("buildClasses"); cu.output = outputs; cu.packageRoots = Collections.singletonList(src.getAbsolutePath()); compUnits.add(cu); ArrayList webModules = new ArrayList (); FreeformProjectGenerator.WebModule wm = new FreeformProjectGenerator.WebModule (); wm.docRoot = web.getAbsolutePath(); wm.contextPath = "/context"; wm.j2eeSpecLevel = WebModule.J2EE_14_LEVEL; wm.classpath = base.getAbsolutePath() + "/buildClasses:" + lib1.getAbsolutePath(); webModules.add (wm); AntProjectHelper helper = FreeformProjectGenerator.createWebProject(base, base, projectName, null, new ArrayList(), sources, compUnits, webModules); return helper; } public void testWebModules () throws Exception { clearWorkDir(); AntProjectHelper helper = createEmptyProject("proj2", "proj-2"); FileObject base = helper.getProjectDirectory(); Project p = ProjectManager.getDefault().findProject(base); assertNotNull("Project was not created", p); assertEquals("Project folder is incorrect", base, p.getProjectDirectory()); WebModule wm = WebModule.getWebModule(FileUtil.toFileObject(web)); assertNotNull("WebModule not found", wm); assertEquals("correct document base", FileUtil.toFileObject(web), wm.getDocumentBase()); assertEquals("correct j2ee version", WebModule.J2EE_14_LEVEL, wm.getJ2eePlatformVersion()); assertEquals("correct context path", "/context", wm.getContextPath()); WebModule wm2 = WebModule.getWebModule(FileUtil.toFileObject (src)); assertNotNull("WebModule not found", wm2); assertEquals("the same wm for web and src folder", wm, wm2); } public void testSourceFoldersAndSourceViews() throws Exception { clearWorkDir(); AntProjectHelper helper = createEmptyProject("proj3", "proj-3"); FileObject base = helper.getProjectDirectory(); Project p = ProjectManager.getDefault().findProject(base); assertNotNull("Project was not created", p); assertEquals("Project folder is incorrect", base, p.getProjectDirectory()); Sources ss = ProjectUtils.getSources(p); assertEquals("Project must have one java source group", 1, ss.getSourceGroups("java").length); assertEquals("Project must have one doc_root source group", 1, ss.getSourceGroups("doc_root").length); assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length); LogicalViewProvider lvp = (LogicalViewProvider)p.getLookup().lookup(LogicalViewProvider.class); assertNotNull("Project does not have LogicalViewProvider", lvp); Node n = lvp.createLogicalView(); // expected subnodes: #1) src folder, #2 web folder and #3) build.xml assertEquals("There must be three subnodes in logical view", 3, n.getChildren().getNodesCount()); n = lvp.createLogicalView(); // expected subnodes: #1) src folder and #2) build.xml and #3) tests // assertEquals("There must be three subnodes in logical view", 3, n.getChildren().getNodesCount()); List sfs = new ArrayList(); FreeformProjectGenerator.SourceFolder sf = new FreeformProjectGenerator.SourceFolder(); sf.label = "xdoc"; sf.type = "x-doc"; // just some path sf.location = doc.getAbsolutePath(); sf.style = "tree"; sfs.add(sf); FreeformProjectGenerator.putSourceFolders(helper, sfs, "x-doc"); assertEquals("Project must have two java source group", 1, ss.getSourceGroups("java").length); assertEquals("Project must have one doc_root source group", 1, ss.getSourceGroups("doc_root").length); assertEquals("Project cannot have csharp source group", 1, FreeformProjectGenerator.getSourceFolders(helper, "java").size()); assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length); assertEquals("Project cannot have csharp source group", 1, ss.getSourceGroups("x-doc").length); assertEquals("Project cannot have csharp source group", 1, FreeformProjectGenerator.getSourceFolders(helper, "x-doc").size()); sf = new FreeformProjectGenerator.SourceFolder(); sf.label = "xdoc2"; sf.type = "x-doc"; // just some path sf.location = src.getAbsolutePath(); sf.style = "packages"; sfs.add(sf); FreeformProjectGenerator.putSourceFolders(helper, sfs, "x-doc"); assertEquals("Project must have two java source group", 1, ss.getSourceGroups("java").length); assertEquals("Project must have one doc_root source group", 1, ss.getSourceGroups("doc_root").length); assertEquals("Project cannot have csharp source group", 1, FreeformProjectGenerator.getSourceFolders(helper, "java").size()); assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length); assertEquals("Project cannot have csharp source group", 2, ss.getSourceGroups("x-doc").length); assertEquals("Project cannot have csharp source group", 2, FreeformProjectGenerator.getSourceFolders(helper, "x-doc").size()); assertEquals("Project cannot have csharp source group", 4, FreeformProjectGenerator.getSourceFolders(helper, null).size()); sfs = FreeformProjectGenerator.getSourceFolders(helper, null); FreeformProjectGenerator.putSourceFolders(helper, sfs, null); Iterator it = sfs.iterator(); while (it.hasNext()) { ((FreeformProjectGenerator.SourceFolder) it.next()).style = "tree"; // for example } FreeformProjectGenerator.putSourceViews(helper, sfs, null); assertEquals("Project must have two java source group", 1, ss.getSourceGroups("java").length); assertEquals("Project must have one doc_root source group", 1, ss.getSourceGroups("doc_root").length); assertEquals("Project cannot have csharp source group", 1, FreeformProjectGenerator.getSourceFolders(helper, "java").size()); assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length); assertEquals("Project cannot have csharp source group", 2, ss.getSourceGroups("x-doc").length); assertEquals("Project cannot have csharp source group", 2, FreeformProjectGenerator.getSourceFolders(helper, "x-doc").size()); assertEquals("Project cannot have csharp source group", 4, FreeformProjectGenerator.getSourceFolders(helper, null).size()); ProjectManager.getDefault().saveAllProjects(); } public void testAuxiliaryConfiguration() throws Exception { clearWorkDir(); AntProjectHelper helper = createEmptyProject("proj4", "proj-4"); FileObject base = helper.getProjectDirectory(); Project p = ProjectManager.getDefault().findProject(base); assertNotNull("Project was not created", p); assertEquals("Project folder is incorrect", base, p.getProjectDirectory()); AuxiliaryConfiguration au = FreeformProjectGenerator.getAuxiliaryConfiguration(helper); assertNotNull("Project does not have AuxiliaryConfiguration", au); Element el = au.getConfigurationFragment("java-data", FreeformProjectType.NS_JAVA, true); assertNotNull("Project does not have correct aux data", el); Element wel = au.getConfigurationFragment("web-data", FreeformProjectType.NS_WEB, true); assertNotNull("Project does not have correct aux data", wel); } public void testJavaCompilationUnits() throws Exception { clearWorkDir(); AntProjectHelper helper = createEmptyProject("proj5", "proj-5"); FileObject base = helper.getProjectDirectory(); Project p = ProjectManager.getDefault().findProject(base); assertNotNull("Project was not created", p); assertEquals("Project folder is incorrect", base, p.getProjectDirectory()); ClassPathProvider cpp = (ClassPathProvider)p.getLookup().lookup(ClassPathProvider.class); assertNotNull("Project does not have ClassPathProvider", cpp); ClassPath cp = cpp.findClassPath(FileUtil.toFileObject(src), ClassPath.COMPILE); assertEquals("Project must have one classpath root", 1, cp.getRoots().length); assertEquals("Classpath root does not match", "jar:"+lib1.toURI().toURL()+"!/", (cp.getRoots()[0]).getURL().toExternalForm()); cp = cpp.findClassPath(FileUtil.toFileObject(src).getParent(), ClassPath.COMPILE); assertEquals("There is no classpath for this file", null, cp); cp = cpp.findClassPath(FileUtil.toFileObject(web), ClassPath.COMPILE); assertNotNull("No classpath for doc root", cp); List roots = Arrays.asList(cp.getRoots()); assertTrue("Classpath does not contain web module classes", roots.contains(base.getFileObject("buildClasses"))); assertTrue("Classpath does not contain lib1.jar", roots.contains(FileUtil.getArchiveRoot(FileUtil.toFileObject(lib1)))); } public void test2WebModules () throws Exception { clearWorkDir(); AntProjectHelper helper = createEmptyProject("proj6", "proj-6"); FileObject base = helper.getProjectDirectory(); Project p = ProjectManager.getDefault().findProject(base); assertNotNull("Project was not created", p); assertEquals("Project folder is incorrect", base, p.getProjectDirectory()); File src2 = FileUtil.toFile (base.createFolder("src2")); File web2 = FileUtil.toFile (base.createFolder("web2")); List sources = FreeformProjectGenerator.getSourceFolders(helper, null); FreeformProjectGenerator.SourceFolder sf = new FreeformProjectGenerator.SourceFolder(); sf.label = "src2"; sf.type = "java"; sf.location = src2.getAbsolutePath(); sources.add(sf); FreeformProjectGenerator.SourceFolder sf2 = new FreeformProjectGenerator.SourceFolder(); sf2.label = "web2"; sf2.type = "doc_root"; sf2.location = web2.getAbsolutePath(); sources.add(sf2); FreeformProjectGenerator.putSourceFolders(helper, sources, null); AuxiliaryConfiguration aux = FreeformProjectGenerator.getAuxiliaryConfiguration(helper); List compUnits = FreeformProjectGenerator.getJavaCompilationUnits(helper, aux); FreeformProjectGenerator.JavaCompilationUnit cu = new FreeformProjectGenerator.JavaCompilationUnit(); FreeformProjectGenerator.JavaCompilationUnit.CP cucp = new FreeformProjectGenerator.JavaCompilationUnit.CP(); cucp.classpath = lib2.getAbsolutePath(); cucp.mode = "execute"; cu.classpath = Collections.singletonList(cucp); cu.sourceLevel = "1.4"; ArrayList outputs = new ArrayList (); outputs.add (FileUtil.toFile (base).getAbsolutePath() + "/buildClasses2"); cu.output = outputs; cu.packageRoots = Collections.singletonList(src2.getAbsolutePath()); compUnits.add(cu); FreeformProjectGenerator.putJavaCompilationUnits(helper, aux, compUnits); List webModules = FreeformProjectGenerator.getWebmodules(helper, aux); FreeformProjectGenerator.WebModule wm = new FreeformProjectGenerator.WebModule (); wm.docRoot = web2.getAbsolutePath(); wm.contextPath = "/context2"; wm.j2eeSpecLevel = WebModule.J2EE_13_LEVEL; wm.classpath = FileUtil.toFile (base).getAbsolutePath() + "/buildClasses2:" + lib2.getAbsolutePath(); webModules.add (wm); FreeformProjectGenerator.putWebModules(helper, aux, webModules); ProjectManager.getDefault().saveProject(p); WebModule webModule = WebModule.getWebModule(base.getFileObject("web2")); assertNotNull("WebModule not found", webModule); assertEquals("correct document base", base.getFileObject("web2"), webModule.getDocumentBase()); WebModule webModule2 = WebModule.getWebModule(base.getFileObject("src2")); assertNotNull("WebModule not found", webModule2); assertEquals("correct document base", webModule, webModule2); } // create real Jar otherwise FileUtil.isArchiveFile returns false for it public void createRealJarFile(File f) throws Exception { OutputStream os = new FileOutputStream(f); try { JarOutputStream jos = new JarOutputStream(os); // jos.setMethod(ZipEntry.STORED); JarEntry entry = new JarEntry("foo.txt"); // entry.setSize(0L); // entry.setTime(System.currentTimeMillis()); // entry.setCrc(new CRC32().getValue()); jos.putNextEntry(entry); jos.flush(); jos.close(); } finally { os.close(); } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.