blob: 73bfaa3282d3d8f527514702a79419a5b163a454 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.java.freeform;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.project.JavaProjectConstants;
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.junit.RandomlyFails;
import org.netbeans.modules.ant.freeform.spi.support.Util;
import org.netbeans.spi.java.classpath.ClassPathProvider;
import org.netbeans.spi.project.AuxiliaryConfiguration;
import org.netbeans.spi.project.support.ant.AntProjectHelper;
import org.netbeans.spi.project.ui.LogicalViewProvider;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.nodes.Node;
import org.w3c.dom.Element;
import org.netbeans.modules.ant.freeform.FreeformProjectGenerator;
import org.netbeans.modules.java.freeform.JavaProjectGenerator.JavaCompilationUnit;
import org.netbeans.spi.project.support.ant.PropertyEvaluator;
import org.netbeans.spi.project.support.ant.PropertyProvider;
import org.netbeans.spi.project.support.ant.PropertyUtils;
import org.openide.modules.ModuleInfo;
import org.openide.util.Lookup;
import org.openide.util.Utilities;
import org.openide.xml.XMLUtil;
/**
* Tests for JavaProjectGenerator.
*
* @author David Konecny
*/
public class JavaProjectGeneratorTest extends NbTestCase {
private File lib1;
private File lib2;
private File src;
private File test;
public JavaProjectGeneratorTest(java.lang.String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
clearWorkDir();
Lookup.getDefault().lookup(ModuleInfo.class);
}
@Override
protected int timeOut() {
return 300000;
}
private AntProjectHelper createEmptyProject(String projectFolder, String projectName, boolean notSoEmpty) 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();
test = new File(base, "test");
test.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();
ArrayList compUnits = new ArrayList();
AntProjectHelper helper = FreeformProjectGenerator.createProject(base, base, projectName, null);
if (notSoEmpty) {
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "src";
sf.type = "java";
sf.style = "packages";
sf.location = src.getAbsolutePath();
sources.add(sf);
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
JavaProjectGenerator.JavaCompilationUnit.CP cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.classpath = lib1.getAbsolutePath();
cp.mode = "compile";
cu.classpath = Collections.singletonList(cp);
cu.sourceLevel = "1.4";
cu.packageRoots = Collections.singletonList(src.getAbsolutePath());
compUnits.add(cu);
JavaProjectGenerator.putSourceFolders(helper, sources, null);
JavaProjectGenerator.putSourceViews(helper, sources, null);
JavaProjectGenerator.putJavaCompilationUnits(helper, Util.getAuxiliaryConfiguration(helper), compUnits);
}
return helper;
}
public void testCreateProject() throws Exception {
AntProjectHelper helper = createEmptyProject("proj1", "proj-1", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
ProjectInformation pi = ProjectUtils.getInformation(p);
assertEquals("Project name was not set", "proj-1", pi.getName());
}
public void testRawCreateProject() throws Exception {
File base = new File(getWorkDir(), "proj");
base.mkdir();
File diffFolder = new File(getWorkDir(), "separate");
diffFolder.mkdir();
File antScript = new File(diffFolder, "build.xml");
antScript.createNewFile();
// XXX: might need to call refresh here??
// FileObject fo = FileUtil.toFileObject(getWorkDir());
// fo.refresh();
AntProjectHelper helper = FreeformProjectGenerator.createProject(diffFolder, base, "p-r-o-j", antScript);
Project p = ProjectManager.getDefault().findProject(helper.getProjectDirectory());
assertNotNull("Project was not created", p);
List mappings = new ArrayList();
FreeformProjectGenerator.TargetMapping tm = new FreeformProjectGenerator.TargetMapping();
tm.name = "foo";
tm.script = "antScript";
mappings.add(tm);
List customActions = new ArrayList();
FreeformProjectGenerator.CustomTarget ct = new FreeformProjectGenerator.CustomTarget();
ct.label = "customAction1";
customActions.add(ct);
List folders = new ArrayList();
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder3";
sf.location = "location3";
sf.style = "tree";
folders.add(sf);
List exports = new ArrayList();
JavaProjectGenerator.Export e = new JavaProjectGenerator.Export();
e.type = JavaProjectConstants.ARTIFACT_TYPE_JAR;
e.location = "folder/output.jar";
e.buildTarget = "target";
exports.add(e);
List subprojects = new ArrayList();
subprojects.add("/projA");
FreeformProjectGenerator.putTargetMappings(helper, mappings);
FreeformProjectGenerator.putContextMenuAction(helper, mappings);
FreeformProjectGenerator.putCustomContextMenuActions(helper, customActions);
JavaProjectGenerator.putSourceFolders(helper, folders, null);
JavaProjectGenerator.putSourceViews(helper, folders, null);
JavaProjectGenerator.putExports(helper, exports);
JavaProjectGenerator.putSubprojects(helper, subprojects);
// ProjectManager.getDefault().saveAllProjects();
// check that all elements are written in expected order
Element el = Util.getPrimaryConfigurationData(helper);
List subElements = XMLUtil.findSubElements(el);
assertEquals(7, subElements.size());
assertElementArray(subElements,
new String[]{"name", "properties", "folders", "ide-actions", "export", "view", "subprojects"},
new String[]{null, null, null, null, null, null, null});
Element el2 = (Element)subElements.get(5);
subElements = XMLUtil.findSubElements(el2);
assertEquals(2, subElements.size());
assertElementArray(subElements,
new String[]{"items", "context-menu"},
new String[]{null, null});
Element el3 = (Element)subElements.get(0);
List subEls = XMLUtil.findSubElements(el3);
assertEquals(2, subEls.size());
assertElementArray(subEls,
new String[]{"source-folder", "source-file"},
new String[]{null, null});
el3 = (Element)subElements.get(1);
subEls = XMLUtil.findSubElements(el3);
assertEquals(2, subEls.size());
assertElementArray(subEls,
new String[]{"ide-action", "action"},
new String[]{null, null});
// calling getters and setters in random order cannot change order of elements
mappings = FreeformProjectGenerator.getTargetMappings(helper);
customActions = FreeformProjectGenerator.getCustomContextMenuActions(helper);
folders = JavaProjectGenerator.getSourceFolders(helper, null);
// style is not read by getSourceFolders and needs to be fixed here:
((JavaProjectGenerator.SourceFolder)folders.get(0)).style = "tree";
FreeformProjectGenerator.putTargetMappings(helper, mappings);
JavaProjectGenerator.putSubprojects(helper, subprojects);
FreeformProjectGenerator.putContextMenuAction(helper, mappings);
JavaProjectGenerator.putExports(helper, exports);
FreeformProjectGenerator.putCustomContextMenuActions(helper, customActions);
JavaProjectGenerator.putSourceFolders(helper, folders, null);
JavaProjectGenerator.putSourceViews(helper, folders, null);
JavaProjectGenerator.putSourceViews(helper, folders, null);
JavaProjectGenerator.putSourceFolders(helper, folders, null);
JavaProjectGenerator.putExports(helper, exports);
FreeformProjectGenerator.putCustomContextMenuActions(helper, customActions);
FreeformProjectGenerator.putContextMenuAction(helper, mappings);
JavaProjectGenerator.putSubprojects(helper, subprojects);
FreeformProjectGenerator.putTargetMappings(helper, mappings);
// ProjectManager.getDefault().saveAllProjects();
el = Util.getPrimaryConfigurationData(helper);
subElements = XMLUtil.findSubElements(el);
assertEquals(7, subElements.size());
assertElementArray(subElements,
new String[]{"name", "properties", "folders", "ide-actions", "export", "view", "subprojects"},
new String[]{null, null, null, null, null, null, null});
el2 = (Element)subElements.get(5);
subElements = XMLUtil.findSubElements(el2);
assertEquals(2, subElements.size());
assertElementArray(subElements,
new String[]{"items", "context-menu"},
new String[]{null, null});
el3 = (Element)subElements.get(0);
subEls = XMLUtil.findSubElements(el3);
assertEquals(2, subEls.size());
assertElementArray(subEls,
new String[]{"source-folder", "source-file"},
new String[]{null, null});
el3 = (Element)subElements.get(1);
subEls = XMLUtil.findSubElements(el3);
assertEquals(2, subEls.size());
assertElementArray(subEls,
new String[]{"ide-action", "action"},
new String[]{null, null});
ProjectManager.getDefault().saveAllProjects();
}
/**
* Asserts that given Element has expected name and its text match expected value.
* @param element element to test
* @param expectedName expected name of element; cannot be null
* @param expectedValue can be null in which case value is not tested
*/
public static void assertElement(Element element, String expectedName, String expectedValue) {
String message = "Element "+element+" does not match [name="+expectedName+",value="+expectedValue+"]"; // NOI18N
assertEquals(message, expectedName, element.getLocalName());
if (expectedValue != null) {
assertEquals(message, expectedValue, XMLUtil.findText(element));
}
}
/**
* See {@link #assertElement(Element, String, String)} for more details. This
* method does exactly the same just on the list of elements and expected names.
*/
public static void assertElementArray(List<Element> elements, String[] expectedNames, String[] expectedValues) {
for (int i=0; i<elements.size(); i++) {
assertElement((Element)elements.get(i), expectedNames[i], expectedValues[i]);
}
}
/**
* Asserts that given Element has expected name and its text match expected value and
* it also has expect attribute with expected value.
* @param element element to test
* @param expectedName expected name of element; cannot be null
* @param expectedValue can be null in which case value is not tested
* @param expectedAttrName expected name of attribute; cannot be null
* @param expectedAttrValue expected value of attribute; cannot be null
*/
public static void assertElement(Element element, String expectedName, String expectedValue, String expectedAttrName, String expectedAttrValue) {
String message = "Element "+element+" does not match [name="+expectedName+",value="+
expectedValue+", attr="+expectedAttrName+", attrvalue="+expectedAttrValue+"]"; // NOI18N
assertEquals(message, expectedName, element.getLocalName());
if (expectedValue != null) {
assertEquals(message, expectedValue, XMLUtil.findText(element));
}
String val = element.getAttribute(expectedAttrName);
assertEquals(expectedAttrValue, val);
}
/**
* See {@link #assertElement(Element, String, String)} for more details. This
* method does exactly the same just on the list of elements and expected names
* and expected attributes.
*/
public static void assertElementArray(List<Element> elements, String[] expectedNames, String[] expectedValues, String[] expectedAttrName, String[] expectedAttrValue) {
assertEquals(expectedNames.length, elements.size());
for (int i=0; i<elements.size(); i++) {
assertElement((Element)elements.get(i), expectedNames[i], expectedValues[i], expectedAttrName[i], expectedAttrValue[i]);
}
}
@RandomlyFails // NB-Core-Build #1002
public void testSourceFolders() throws Exception {
AntProjectHelper helper = createEmptyProject("proj3", "proj-3", true);
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 cannot have csharp source group", 0, ss.getSourceGroups("csharp").length);
Listener l = new Listener();
ss.addChangeListener(l);
List sfs = JavaProjectGenerator.getSourceFolders(helper, null);
assertEquals("There must be one source folder", 1, sfs.size());
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "test";
sf.type = "java";
sf.location = test.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceFolders(helper, sfs, null);
assertEquals("Project must have two java source groups", 2, ss.getSourceGroups("java").length);
assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length);
assertEquals("Number of fired events does not match", 1, l.count);
l.reset();
sfs = new ArrayList();
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "xdoc";
sf.type = "x-doc";
// just some path
sf.location = test.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceFolders(helper, sfs, "x-doc");
assertEquals("Project must have two java source groups", 2, ss.getSourceGroups("java").length);
assertEquals("Project must have two java source groups", 2, JavaProjectGenerator.getSourceFolders(helper, "java").size());
assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length);
assertEquals("Project must have one x-doc source group", 1, ss.getSourceGroups("x-doc").length);
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "xdoc2";
sf.type = "x-doc";
// just some path
sf.location = src.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceFolders(helper, sfs, "x-doc");
assertEquals("Project must have two java source groups", 2, ss.getSourceGroups("java").length);
assertEquals("Project must have two java source groups", 2, JavaProjectGenerator.getSourceFolders(helper, "java").size());
assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length);
assertEquals("Project must have two x-doc source groups", 2, ss.getSourceGroups("x-doc").length);
assertEquals("Project must have two x-doc source groups", 2, JavaProjectGenerator.getSourceFolders(helper, "x-doc").size());
assertEquals("Project must have four source groups", 4, JavaProjectGenerator.getSourceFolders(helper, null).size());
sfs = JavaProjectGenerator.getSourceFolders(helper, null);
JavaProjectGenerator.putSourceFolders(helper, sfs, null);
assertEquals("Project must have two java source groups", 2, ss.getSourceGroups("java").length);
assertEquals("Project must have two java source groups", 2, JavaProjectGenerator.getSourceFolders(helper, "java").size());
assertEquals("Project cannot have csharp source group", 0, ss.getSourceGroups("csharp").length);
assertEquals("Project must have two x-doc source groups", 2, ss.getSourceGroups("x-doc").length);
assertEquals("Project must have two x-doc source groups", 2, JavaProjectGenerator.getSourceFolders(helper, "x-doc").size());
assertEquals("Project must have four source groups", 4, JavaProjectGenerator.getSourceFolders(helper, null).size());
ProjectManager.getDefault().saveAllProjects();
}
public void testRawSourceFolders() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List folders = new ArrayList();
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder1";
sf.type = "type1";
sf.location = "location1";
folders.add(sf);
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder2";
sf.type = "type2";
sf.location = "location2";
folders.add(sf);
JavaProjectGenerator.putSourceFolders(helper, folders, null);
// test getter and setter here:
folders = JavaProjectGenerator.getSourceFolders(helper, null);
JavaProjectGenerator.putSourceFolders(helper, folders, null);
// ProjectManager.getDefault().saveAllProjects();
Element el = Util.getPrimaryConfigurationData(helper);
el = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
assertNotNull("Source folders were not saved correctly", el);
List subElements = XMLUtil.findSubElements(el);
assertEquals(2, subElements.size());
// compare first source folder
Element el2 = (Element)subElements.get(0);
assertElement(el2, "source-folder", null);
List l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"label", "type", "location"},
new String[]{"folder1", "type1", "location1"});
// compare second source folder
el2 = (Element)subElements.get(1);
assertElement(el2, "source-folder", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"label", "type", "location"},
new String[]{"folder2", "type2", "location2"});
ProjectManager.getDefault().saveAllProjects();
// test rewriting of source folder of some type
folders = new ArrayList();
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder3";
sf.type = "type2";
sf.location = "location3";
folders.add(sf);
JavaProjectGenerator.putSourceFolders(helper, folders, "type2");
ProjectManager.getDefault().saveAllProjects();
el = Util.getPrimaryConfigurationData(helper);
el = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
assertNotNull("Source folders were not saved correctly", el);
subElements = XMLUtil.findSubElements(el);
assertEquals(2, subElements.size());
// compare first source folder
el2 = (Element)subElements.get(0);
assertElement(el2, "source-folder", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"label", "type", "location"},
new String[]{"folder1", "type1", "location1"});
// compare second source folder
el2 = (Element)subElements.get(1);
assertElement(el2, "source-folder", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"label", "type", "location"},
new String[]{"folder3", "type2", "location3"});
ProjectManager.getDefault().saveAllProjects();
}
@RandomlyFails // NB-Core-Build #3877: There must be two subnodes in logical view expected:<2> but was:<1>
public void testSourceViews() throws Exception {
AntProjectHelper helper = createEmptyProject("proj6", "proj-6", true);
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);
LogicalViewProvider lvp = (LogicalViewProvider)p.getLookup().lookup(LogicalViewProvider.class);
assertNotNull("Project does not have LogicalViewProvider", lvp);
Node n = lvp.createLogicalView();
// expected subnodes: #1) src folder and #2) build.xml
assertEquals("There must be two subnodes in logical view", 2, n.getChildren().getNodesCount(true));
List sfs = JavaProjectGenerator.getSourceViews(helper, null);
assertEquals("There must be one source view", 1, sfs.size());
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "test";
sf.style = "packages";
sf.location = test.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceViews(helper, sfs, null);
assertEquals("Project must have two packages source views", 2, JavaProjectGenerator.getSourceViews(helper, "packages").size());
assertEquals("Project cannot have any flat source view", 0, JavaProjectGenerator.getSourceViews(helper, "flat").size());
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());
sfs = new ArrayList();
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "xdoc";
sf.style = "tree";
// just some path
sf.location = test.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceViews(helper, sfs, "tree");
assertEquals("Project must have two packages source views", 2, JavaProjectGenerator.getSourceViews(helper, "packages").size());
assertEquals("Project cannot have any flat source view", 0, JavaProjectGenerator.getSourceViews(helper, "flat").size());
assertEquals("Project must have one tree source view", 1, JavaProjectGenerator.getSourceViews(helper, "tree").size());
assertEquals("Project must have three source views", 3, JavaProjectGenerator.getSourceViews(helper, null).size());
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "xdoc2";
sf.style = "tree";
// just some path
sf.location = src.getAbsolutePath();
sfs.add(sf);
JavaProjectGenerator.putSourceViews(helper, sfs, "tree");
assertEquals("Project must have two packages source views", 2, JavaProjectGenerator.getSourceViews(helper, "packages").size());
assertEquals("Project cannot have any flat source view", 0, JavaProjectGenerator.getSourceViews(helper, "flat").size());
assertEquals("Project must have two tree source views", 2, JavaProjectGenerator.getSourceViews(helper, "tree").size());
assertEquals("Project must have four source views", 4, JavaProjectGenerator.getSourceViews(helper, null).size());
sfs = JavaProjectGenerator.getSourceViews(helper, null);
JavaProjectGenerator.putSourceViews(helper, sfs, null);
assertEquals("Project must have two packages source views", 2, JavaProjectGenerator.getSourceViews(helper, "packages").size());
assertEquals("Project cannot have any flat source view", 0, JavaProjectGenerator.getSourceViews(helper, "flat").size());
assertEquals("Project must have two tree source views", 2, JavaProjectGenerator.getSourceViews(helper, "tree").size());
assertEquals("Project must have four source views", 4, JavaProjectGenerator.getSourceViews(helper, null).size());
ProjectManager.getDefault().saveAllProjects();
}
public void testRawSourceViews() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List folders = new ArrayList();
JavaProjectGenerator.SourceFolder sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder1";
sf.style = "tree";
sf.location = "location1";
folders.add(sf);
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder2";
sf.style = "packages";
sf.location = "location2";
folders.add(sf);
JavaProjectGenerator.putSourceViews(helper, folders, null);
// test getter and setter here:
folders = JavaProjectGenerator.getSourceViews(helper, null);
JavaProjectGenerator.putSourceViews(helper, folders, null);
ProjectManager.getDefault().saveAllProjects();
Element el = Util.getPrimaryConfigurationData(helper);
el = XMLUtil.findElement(el, "view", Util.NAMESPACE);
assertNotNull("View folders were not saved correctly", el);
el = XMLUtil.findElement(el, "items", Util.NAMESPACE);
assertNotNull("View folders were not saved correctly", el);
List subElements = XMLUtil.findSubElements(el);
// there will be three sublements: <source-file> is added for build.xml during project.creation
assertEquals(3, subElements.size());
// compare first source view
Element el2 = (Element)subElements.get(0);
assertElement(el2, "source-folder", null, "style", "tree");
List l1 = XMLUtil.findSubElements(el2);
assertEquals(2, l1.size());
assertElementArray(l1,
new String[]{"label", "location"},
new String[]{"folder1", "location1"});
// compare second source view
el2 = (Element)subElements.get(1);
assertElement(el2, "source-folder", null, "style", "packages");
l1 = XMLUtil.findSubElements(el2);
assertEquals(2, l1.size());
assertElementArray(l1,
new String[]{"label", "location"},
new String[]{"folder2", "location2"});
ProjectManager.getDefault().saveAllProjects();
// test rewriting of source view of some style
folders = new ArrayList();
sf = new JavaProjectGenerator.SourceFolder();
sf.label = "folder3";
sf.style = "packages";
sf.location = "location3";
folders.add(sf);
JavaProjectGenerator.putSourceViews(helper, folders, "packages");
ProjectManager.getDefault().saveAllProjects();
el = Util.getPrimaryConfigurationData(helper);
el = XMLUtil.findElement(el, "view", Util.NAMESPACE);
assertNotNull("Source views were not saved correctly", el);
el = XMLUtil.findElement(el, "items", Util.NAMESPACE);
assertNotNull("View folders were not saved correctly", el);
subElements = XMLUtil.findSubElements(el);
// there will be three sublements: <source-file> is added for build.xml during project.creation
assertEquals("3 elements in " + subElements, 3, subElements.size());
// compare first source view
el2 = (Element)subElements.get(0);
assertElement(el2, "source-folder", null, "style", "tree");
l1 = XMLUtil.findSubElements(el2);
assertEquals(2, l1.size());
assertElementArray(l1,
new String[]{"label", "location"},
new String[]{"folder1", "location1"});
// compare second source view
el2 = (Element)subElements.get(1);
assertElement(el2, "source-folder", null, "style", "packages");
l1 = XMLUtil.findSubElements(el2);
assertEquals(2, l1.size());
assertElementArray(l1,
new String[]{"label", "location"},
new String[]{"folder3", "location3"});
ProjectManager.getDefault().saveAllProjects();
}
public void testJavaCompilationUnits() throws Exception {
AntProjectHelper helper = createEmptyProject("proj5", "proj-5", true);
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:"+Utilities.toURI(lib1).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);
AuxiliaryConfiguration aux = Util.getAuxiliaryConfiguration(helper);
List cus = JavaProjectGenerator.getJavaCompilationUnits(helper, aux);
assertEquals("There must be one compilation unit", 1, cus.size());
JavaProjectGenerator.JavaCompilationUnit cu = (JavaProjectGenerator.JavaCompilationUnit)cus.get(0);
assertEquals("The compilation unit must have one classpath", 1, cu.classpath.size());
JavaProjectGenerator.JavaCompilationUnit.CP cucp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cucp.classpath = lib2.getAbsolutePath();
cucp.mode = "execute";
cu.classpath.add(cucp);
ArrayList outputs = new ArrayList();
outputs.add("output1.jar");
outputs.add("output2.jar");
outputs.add("output3.jar");
cu.output = outputs;
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, cus);
cus = JavaProjectGenerator.getJavaCompilationUnits(helper, aux);
assertEquals("There must be one compilation unit", 1, cus.size());
cu = (JavaProjectGenerator.JavaCompilationUnit)cus.get(0);
assertEquals("The compilation unit must have one classpath", 2, cu.classpath.size());
assertEquals("The compilation unit must have one classpath", 3, cu.output.size());
cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.sourceLevel = "1.4";
cucp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cucp.classpath = lib2.getAbsolutePath();
cucp.mode = "compile";
cu.classpath = Collections.singletonList(cucp);
cu.packageRoots = Collections.singletonList(test.getAbsolutePath());
cus.add(cu);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, cus);
cus = JavaProjectGenerator.getJavaCompilationUnits(helper, aux);
assertEquals("There must be two compilation units", 2, cus.size());
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:"+Utilities.toURI(lib1).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(test), ClassPath.COMPILE);
assertEquals("Project must have one classpath root", 1, cp.getRoots().length);
assertEquals("Classpath root does not match", "jar:"+Utilities.toURI(lib2).toURL()+"!/", (cp.getRoots()[0]).getURL().toExternalForm());
ProjectManager.getDefault().saveAllProjects();
}
public void testRawJavaCompilationUnits() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List<JavaCompilationUnit> units = new ArrayList();
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("pkgroot1");
cu.packageRoots.add("pkgroot2");
cu.output = new ArrayList();
cu.output.add("output1");
cu.output.add("output2");
cu.classpath = new ArrayList();
JavaProjectGenerator.JavaCompilationUnit.CP cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "compile";
cp.classpath = "classpath1";
cu.classpath.add(cp);
cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "boot";
cp.classpath = "classpath2";
cu.classpath.add(cp);
cu.sourceLevel = "1.3";
units.add(cu);
cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("sec-pkgroot1");
cu.packageRoots.add("sec-pkgroot2");
cu.output = new ArrayList();
cu.output.add("sec-output1");
cu.output.add("sec-output2");
cu.classpath = new ArrayList();
cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "compile";
cp.classpath = "sec-classpath1";
cu.classpath.add(cp);
cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "boot";
cp.classpath = "sec-classpath2";
cu.classpath.add(cp);
cu.sourceLevel = "1.4";
units.add(cu);
AuxiliaryConfiguration aux = Util.getAuxiliaryConfiguration(helper);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// test getter and setter here:
units = JavaProjectGenerator.getJavaCompilationUnits(helper, aux);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// ProjectManager.getDefault().saveAllProjects();
Element el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true);
assertNotNull("Java compilation units were not saved correctly", el);
List subElements = XMLUtil.findSubElements(el);
assertEquals(2, subElements.size());
// compare first compilation unit
Element el2 = (Element)subElements.get(0);
assertElement(el2, "compilation-unit", null);
List l1 = XMLUtil.findSubElements(el2);
assertEquals(7, l1.size());
assertElementArray(l1,
new String[]{"package-root", "package-root", "classpath", "classpath", "built-to", "built-to", "source-level"},
new String[]{"pkgroot1", "pkgroot2", "classpath1", "classpath2", "output1", "output2", "1.3"});
el2 = (Element)l1.get(2);
assertElement(el2, "classpath", "classpath1", "mode", "compile");
el2 = (Element)l1.get(3);
assertElement(el2, "classpath", "classpath2", "mode", "boot");
// compare second compilation unit
el2 = (Element)subElements.get(1);
assertElement(el2, "compilation-unit", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(7, l1.size());
assertElementArray(l1,
new String[]{"package-root", "package-root", "classpath", "classpath", "built-to", "built-to", "source-level"},
new String[]{"sec-pkgroot1", "sec-pkgroot2", "sec-classpath1", "sec-classpath2", "sec-output1", "sec-output2", "1.4"});
el2 = (Element)l1.get(2);
assertElement(el2, "classpath", "sec-classpath1", "mode", "compile");
el2 = (Element)l1.get(3);
assertElement(el2, "classpath", "sec-classpath2", "mode", "boot");
ProjectManager.getDefault().saveAllProjects();
// test updating
units = new ArrayList();
cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("foo-package-root");
units.add(cu);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// ProjectManager.getDefault().saveAllProjects();
el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true);
assertNotNull("Java compilation units were not saved correctly", el);
subElements = XMLUtil.findSubElements(el);
assertEquals(1, subElements.size());
// compare first compilation unit
el2 = (Element)subElements.get(0);
assertElement(el2, "compilation-unit", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(1, l1.size());
assertElementArray(l1,
new String[]{"package-root"},
new String[]{"foo-package-root"});
ProjectManager.getDefault().saveAllProjects();
//update to /4:
units = JavaProjectGenerator.getJavaCompilationUnits(helper, aux);
units.iterator().next().sourceLevel = "1.8";
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
assertNull("Java compilation units were not saved correctly", aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true));
assertNotNull("Java compilation units were not saved correctly", aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_4, true));
}
public void testCompilationUnitUpgrades() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// Start with a /1-friendly data set.
List<JavaProjectGenerator.JavaCompilationUnit> units = new ArrayList();
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("pkgroot1");
units.add(cu);
AuxiliaryConfiguration aux = Util.getAuxiliaryConfiguration(helper);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// Check that the correct /1 data was saved.
Element el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true);
assertNotNull("Java compilation units were saved in /1", el);
List<Element> subElements = XMLUtil.findSubElements(el);
assertEquals(1, subElements.size());
// compare the compilation unit
Element el2 = (Element) subElements.get(0);
assertElement(el2, "compilation-unit", null);
assertElementArray(XMLUtil.findSubElements(el2),
new String[] {"package-root"},
new String[] {"pkgroot1"});
ProjectManager.getDefault().saveAllProjects();
// Now check that setting isTests = true on that element forces a /2 save.
units = new ArrayList();
cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("pkgroot1");
cu.isTests = true;
units.add(cu);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// Check that we now have it in /2.
el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true);
assertNull("No /1 data", el);
el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_2, true);
assertNotNull("Have /2 data", el);
subElements = XMLUtil.findSubElements(el);
assertEquals(1, subElements.size());
// compare the compilation unit
el2 = (Element) subElements.get(0);
assertElement(el2, "compilation-unit", null);
assertElementArray(XMLUtil.findSubElements(el2),
new String[] {"package-root", "unit-tests"},
new String[] {"pkgroot1", null});
ProjectManager.getDefault().saveAllProjects();
// Now try fresh save of /2-requiring data (using javadoc).
assertTrue("removed /2 data", aux.removeConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_2, true));
units = new ArrayList();
cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.packageRoots = new ArrayList();
cu.packageRoots.add("pkgroot1");
cu.javadoc = new ArrayList();
cu.javadoc.add("javadoc1");
cu.javadoc.add("javadoc2");
units.add(cu);
JavaProjectGenerator.putJavaCompilationUnits(helper, aux, units);
// Check that we have it in /2.
el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_1, true);
assertNull("No /1 data", el);
el = aux.getConfigurationFragment(JavaProjectNature.EL_JAVA, JavaProjectNature.NS_JAVA_2, true);
assertNotNull("Have /2 data", el);
subElements = XMLUtil.findSubElements(el);
assertEquals(1, subElements.size());
// compare the compilation unit
el2 = (Element) subElements.get(0);
assertElement(el2, "compilation-unit", null);
assertElementArray(XMLUtil.findSubElements(el2),
new String[] {"package-root", "javadoc-built-to", "javadoc-built-to"},
new String[] {"pkgroot1", "javadoc1", "javadoc2"});
ProjectManager.getDefault().saveAllProjects();
}
public void testGuessExports() throws Exception {
JavaProjectGenerator.TargetMapping tm = new JavaProjectGenerator.TargetMapping();
tm.name = "build";
tm.script = "${ant}";
tm.targets = new ArrayList();
tm.targets.add("target-1");
ArrayList targets = new ArrayList();
targets.add(tm);
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.output = new ArrayList();
cu.output.add("${outputfile}");
ArrayList units = new ArrayList();
units.add(cu);
Map m = new HashMap();
m.put("outputfile", "out.jar");
m.put("ant", getWorkDir().getAbsolutePath()+"/etc/antScript");
PropertyEvaluator evaluator = PropertyUtils.sequentialPropertyEvaluator(null, new PropertyProvider[]{
PropertyUtils.fixedPropertyProvider(m)});
List exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("one export was created even though build script is not in project folder", 1, exports.size());
// XXX test stuff about that export
m.put("ant", "etc/antScript");
evaluator = PropertyUtils.sequentialPropertyEvaluator(null, new PropertyProvider[]{
PropertyUtils.fixedPropertyProvider(m)});
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("one export was created", 1, exports.size());
tm.script = null;
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("one export was created", 1, exports.size());
JavaProjectGenerator.Export e = (JavaProjectGenerator.Export)exports.get(0);
assertEquals("export is properly configured", JavaProjectConstants.ARTIFACT_TYPE_JAR, e.type);
assertEquals("export is properly configured", "${outputfile}", e.location);
assertEquals("export is properly configured", null, e.script);
assertEquals("export is properly configured", "target-1", e.buildTarget);
tm.targets.add("target-2");
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("no export was created when there are two targets", 0, exports.size());
tm.targets.remove("target-2");
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("one export was created", 1, exports.size());
tm.name = "buildXX";
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("no export was created when there is no action with build name", 0, exports.size());
tm.name = "build";
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("one export was created", 1, exports.size());
JavaProjectGenerator.JavaCompilationUnit cu2 = new JavaProjectGenerator.JavaCompilationUnit();
cu2.output = new ArrayList();
cu2.output.add("build/classes");
units.add(cu2);
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("two exports was created", 2, exports.size());
cu2.output.add("dist/proj.jar");
cu2.output.add("dist/proj2.jar");
tm.script = "antScript";
exports = JavaProjectGenerator.guessExports(evaluator, getWorkDir(), targets, units);
assertEquals("four exports were created", 4, exports.size());
e = (JavaProjectGenerator.Export)exports.get(0);
assertEquals("export is properly configured", JavaProjectConstants.ARTIFACT_TYPE_JAR, e.type);
assertEquals("export is properly configured", "${outputfile}", e.location);
assertEquals("export is properly configured", "antScript", e.script);
assertEquals("export is properly configured", "target-1", e.buildTarget);
e = (JavaProjectGenerator.Export)exports.get(1);
assertEquals("export is properly configured", JavaProjectConstants.ARTIFACT_TYPE_FOLDER, e.type);
assertEquals("export is properly configured", "build/classes", e.location);
assertEquals("export is properly configured", "antScript", e.script);
assertEquals("export is properly configured", "target-1", e.buildTarget);
e = (JavaProjectGenerator.Export)exports.get(2);
assertEquals("export is properly configured", JavaProjectConstants.ARTIFACT_TYPE_JAR, e.type);
assertEquals("export is properly configured", "dist/proj.jar", e.location);
assertEquals("export is properly configured", "antScript", e.script);
assertEquals("export is properly configured", "target-1", e.buildTarget);
e = (JavaProjectGenerator.Export)exports.get(3);
assertEquals("export is properly configured", JavaProjectConstants.ARTIFACT_TYPE_JAR, e.type);
assertEquals("export is properly configured", "dist/proj2.jar", e.location);
assertEquals("export is properly configured", "antScript", e.script);
assertEquals("export is properly configured", "target-1", e.buildTarget);
}
public void testPutExports() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List exports = new ArrayList();
JavaProjectGenerator.Export e = new JavaProjectGenerator.Export();
e.type = JavaProjectConstants.ARTIFACT_TYPE_JAR;
e.location = "path/smth.jar";
e.script = "someScript";
e.buildTarget = "build_target";
e.cleanTarget = "clean_target";
exports.add(e);
e = new JavaProjectGenerator.Export();
e.type = JavaProjectConstants.ARTIFACT_TYPE_JAR;
e.location = "something/else.jar";
e.buildTarget = "bldtrg";
exports.add(e);
JavaProjectGenerator.putExports(helper, exports);
Element el = Util.getPrimaryConfigurationData(helper);
List subElements = XMLUtil.findSubElements(el);
// 4, i.e. name, two exports and one view of build.xml file
assertEquals(5, subElements.size());
// compare first compilation unit
Element el2 = (Element)subElements.get(0);
assertElement(el2, "name", null);
el2 = (Element)subElements.get(1);
assertElement(el2, "properties", null);
el2 = (Element)subElements.get(2);
assertElement(el2, "export", null);
List l1 = XMLUtil.findSubElements(el2);
assertEquals(5, l1.size());
assertElementArray(l1,
new String[]{"type", "location", "script", "build-target", "clean-target"},
new String[]{JavaProjectConstants.ARTIFACT_TYPE_JAR, "path/smth.jar", "someScript", "build_target", "clean_target"});
// compare second compilation unit
el2 = (Element)subElements.get(3);
assertElement(el2, "export", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"type", "location", "build-target"},
new String[]{JavaProjectConstants.ARTIFACT_TYPE_JAR, "something/else.jar", "bldtrg"});
el2 = (Element)subElements.get(4);
assertElement(el2, "view", null);
ProjectManager.getDefault().saveAllProjects();
// now test updating
exports = new ArrayList();
e = new JavaProjectGenerator.Export();
e.type = JavaProjectConstants.ARTIFACT_TYPE_JAR;
e.location = "aaa/bbb.jar";
e.buildTarget = "ccc";
exports.add(e);
JavaProjectGenerator.putExports(helper, exports);
el = Util.getPrimaryConfigurationData(helper);
subElements = XMLUtil.findSubElements(el);
// 3, i.e. name, export and one view of build.xml file
assertEquals(4, subElements.size());
// compare first compilation unit
el2 = (Element)subElements.get(0);
assertElement(el2, "name", null);
el2 = (Element)subElements.get(1);
assertElement(el2, "properties", null);
el2 = (Element)subElements.get(2);
assertElement(el2, "export", null);
l1 = XMLUtil.findSubElements(el2);
assertEquals(3, l1.size());
assertElementArray(l1,
new String[]{"type", "location", "build-target"},
new String[]{JavaProjectConstants.ARTIFACT_TYPE_JAR, "aaa/bbb.jar", "ccc"});
el2 = (Element)subElements.get(3);
assertElement(el2, "view", null);
ProjectManager.getDefault().saveAllProjects();
}
public void testGuessSubprojects() throws Exception {
AntProjectHelper helper = createEmptyProject("proj1", "proj1", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
ArrayList exports = new ArrayList();
JavaProjectGenerator.Export e = new JavaProjectGenerator.Export();
e.type = JavaProjectConstants.ARTIFACT_TYPE_JAR;
e.location = "libs/some.jar"; // this jar is created in createEmptyProject() so let's use it as export
e.buildTarget = "build_target";
exports.add(e);
JavaProjectGenerator.putExports(helper, exports);
ProjectManager.getDefault().saveAllProjects();
String lib1path = lib1.getAbsolutePath();
String proj1path = FileUtil.toFile(base).getAbsolutePath();
AntProjectHelper helper2 = createEmptyProject("proj2", "proj2", false);
FileObject base2 = helper.getProjectDirectory();
File projBase = FileUtil.toFile(base2);
Project p2 = ProjectManager.getDefault().findProject(base2);
assertNotNull("Project was not created", p2);
assertEquals("Project folder is incorrect", base2, p.getProjectDirectory());
PropertyEvaluator evaluator = PropertyUtils.sequentialPropertyEvaluator(null, new PropertyProvider[]{
PropertyUtils.fixedPropertyProvider(
Collections.singletonMap("lib1", lib1path))});
ArrayList units = new ArrayList();
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
JavaProjectGenerator.JavaCompilationUnit.CP cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "compile";
cp.classpath = "../something.jar;${lib1};";
cu.classpath = new ArrayList();
cu.classpath.add(cp);
units.add(cu);
cu = new JavaProjectGenerator.JavaCompilationUnit();
cp = new JavaProjectGenerator.JavaCompilationUnit.CP();
cp.mode = "compile";
cp.classpath = lib1path+";";
cu.classpath = new ArrayList();
cu.classpath.add(cp);
units.add(cu);
List l = JavaProjectGenerator.guessSubprojects(evaluator, units, projBase, projBase);
assertEquals("one subproject", 1, l.size());
assertEquals("project1 is subproject", /*proj1path*/ ".", l.get(0));
}
public void testPutSubprojects() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List subprojects = new ArrayList();
subprojects.add("/some/path/projA");
subprojects.add("C:\\dev\\projB");
JavaProjectGenerator.putSubprojects(helper, subprojects);
Element el = Util.getPrimaryConfigurationData(helper);
Element subprojectsEl = XMLUtil.findElement(el, "subprojects", Util.NAMESPACE);
assertNotNull("<subprojects> element exists", subprojectsEl);
List subElements = XMLUtil.findSubElements(subprojectsEl);
assertEquals("project depends on two subprojects", 2, subElements.size());
Element el2 = (Element)subElements.get(0);
assertElement(el2, "project", "/some/path/projA");
el2 = (Element)subElements.get(1);
assertElement(el2, "project", "C:\\dev\\projB");
ProjectManager.getDefault().saveAllProjects();
// now test updating
subprojects = new ArrayList();
subprojects.add("/projC");
JavaProjectGenerator.putSubprojects(helper, subprojects);
el = Util.getPrimaryConfigurationData(helper);
subprojectsEl = XMLUtil.findElement(el, "subprojects", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(subprojectsEl);
assertEquals("project depends on one subproject", 1, subElements.size());
el2 = (Element)subElements.get(0);
assertElement(el2, "project", "/projC");
subprojects = new ArrayList();
JavaProjectGenerator.putSubprojects(helper, subprojects);
el = Util.getPrimaryConfigurationData(helper);
subprojectsEl = XMLUtil.findElement(el, "subprojects", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(subprojectsEl);
assertEquals("project depends on one subproject", 0, subElements.size());
ProjectManager.getDefault().saveAllProjects();
}
public void testGuessBuildFolders() throws Exception {
File base = new File(getWorkDir(), "folder");
File proj1 = new File(base, "proj1");
proj1.mkdir();
File base2 = new File(getWorkDir(), "folder2");
base2.mkdir();
JavaProjectGenerator.JavaCompilationUnit cu = new JavaProjectGenerator.JavaCompilationUnit();
cu.output = new ArrayList();
cu.output.add("${outputfile}");
ArrayList units = new ArrayList();
units.add(cu);
Map m = new HashMap();
m.put("outputfile", "out.jar");
PropertyEvaluator evaluator = PropertyUtils.sequentialPropertyEvaluator(null, new PropertyProvider[]{
PropertyUtils.fixedPropertyProvider(m)});
List buildFolders = JavaProjectGenerator.guessBuildFolders(evaluator, units, proj1, proj1);
assertEquals("no build folder", 0, buildFolders.size());
cu.output.add(base2.getAbsolutePath());
buildFolders = JavaProjectGenerator.guessBuildFolders(evaluator, units, proj1, proj1);
assertEquals("one build-folder created", 1, buildFolders.size());
assertEquals("export is properly configured", base2.getAbsolutePath(), buildFolders.get(0));
cu.output.add(getWorkDir().getAbsolutePath());
buildFolders = JavaProjectGenerator.guessBuildFolders(evaluator, units, proj1, proj1);
assertEquals("one build-folder created", 1, buildFolders.size());
assertEquals("export is properly configured", getWorkDir().getAbsolutePath(), buildFolders.get(0));
// check that root of this is handled correctly
File diskRoot = getWorkDir();
while (diskRoot.getParentFile() != null) {
diskRoot = diskRoot.getParentFile();
}
cu.output.add(diskRoot.getAbsolutePath());
buildFolders = JavaProjectGenerator.guessBuildFolders(evaluator, units, proj1, proj1);
assertEquals("one build-folder created", 1, buildFolders.size());
assertEquals("export is properly configured", diskRoot.getAbsolutePath(), buildFolders.get(0));
}
public void testPutBuildFolders() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
// check that all data are correctly persisted
List buildFolders = new ArrayList();
buildFolders.add("/some/path/projA");
buildFolders.add("C:\\dev\\projB");
JavaProjectGenerator.putBuildFolders(helper, buildFolders);
Element el = Util.getPrimaryConfigurationData(helper);
Element foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
assertNotNull("<folders> element exists", foldersEl);
List subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has two build-folders", 2, subElements.size());
Element el2 = (Element)subElements.get(0);
assertElement(el2, "build-folder", null);
assertEquals("build-folder has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "/some/path/projA");
el2 = (Element)subElements.get(1);
assertElement(el2, "build-folder", null);
assertEquals("build-folder has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "C:\\dev\\projB");
ProjectManager.getDefault().saveAllProjects();
// now test updating
buildFolders = new ArrayList();
buildFolders.add("/projC");
JavaProjectGenerator.putBuildFolders(helper, buildFolders);
el = Util.getPrimaryConfigurationData(helper);
foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has one build-folder", 1, subElements.size());
el2 = (Element)subElements.get(0);
assertElement(el2, "build-folder", null);
assertEquals("build-folder has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "/projC");
buildFolders = new ArrayList();
JavaProjectGenerator.putBuildFolders(helper, buildFolders);
el = Util.getPrimaryConfigurationData(helper);
foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has no build-folder", 0, subElements.size());
ProjectManager.getDefault().saveAllProjects();
}
public void testPutBuildFiles() throws Exception {
AntProjectHelper helper = createEmptyProject("proj", "proj", false);
FileObject base = helper.getProjectDirectory();
Project p = ProjectManager.getDefault().findProject(base);
assertNotNull("Project was not created", p);
assertEquals("Project folder is incorrect", base, p.getProjectDirectory());
List buildFiles = new ArrayList();
buildFiles.add("/some/path/projA/archive.jar");
buildFiles.add("C:\\dev\\projB\\library.jar");
JavaProjectGenerator.putBuildFiles(helper, buildFiles);
Element el = Util.getPrimaryConfigurationData(helper);
Element foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
assertNotNull("<folders> element exists", foldersEl);
List subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has two build-files", 2, subElements.size());
Element el2 = (Element)subElements.get(0);
assertElement(el2, "build-file", null);
assertEquals("build-file has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "/some/path/projA/archive.jar");
el2 = (Element)subElements.get(1);
assertElement(el2, "build-file", null);
assertEquals("build-file has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "C:\\dev\\projB\\library.jar");
ProjectManager.getDefault().saveAllProjects();
// now test updating
buildFiles = new ArrayList();
buildFiles.add("/projC/dist/projC.jar");
JavaProjectGenerator.putBuildFiles(helper, buildFiles);
el = Util.getPrimaryConfigurationData(helper);
foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has one build-file", 1, subElements.size());
el2 = (Element)subElements.get(0);
assertElement(el2, "build-file", null);
assertEquals("build-file has one subelement", 1, XMLUtil.findSubElements(el2).size());
assertElement((Element)XMLUtil.findSubElements(el2).get(0), "location", "/projC/dist/projC.jar");
buildFiles = new ArrayList();
JavaProjectGenerator.putBuildFiles(helper, buildFiles);
el = Util.getPrimaryConfigurationData(helper);
foldersEl = XMLUtil.findElement(el, "folders", Util.NAMESPACE);
subElements = XMLUtil.findSubElements(foldersEl);
assertEquals("project has no build-file", 0, subElements.size());
ProjectManager.getDefault().saveAllProjects();
}
private static class Listener implements ChangeListener {
int count = 0;
public void stateChanged(ChangeEvent ev) {
count++;
}
public void reset() {
count = 0;
}
}
// 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();
}
}
}