|
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();
}
}
}
|
Copyright 1998-2008 Alvin Alexander
All Rights Reserved.
devdaily.com is based in louisville, kentucky, and this web site is hosted by godaddy.com