blob: 9ad1588c2c5231ad4f29f076c3f574c7ad714642 [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.j2ee.earproject;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.junit.NbTestCase;
import org.netbeans.api.j2ee.core.Profile;
import org.netbeans.modules.j2ee.earproject.test.TestUtil;
import org.netbeans.spi.project.support.ant.AntProjectHelper;
import org.netbeans.spi.project.support.ant.EditableProperties;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Mutex;
import org.openide.util.test.MockLookup;
import org.openide.xml.XMLUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
/**
* @author vkraemer
*/
public class EarProjectGeneratorTest extends NbTestCase {
private static final String[] CREATED_FILES = {
"build.xml",
"nbproject/build-impl.xml",
"nbproject/genfiles.properties",
"nbproject/project.xml",
"nbproject/project.properties",
"nbproject/private/private.properties",
"src/conf/application.xml"
};
private static final String[] CREATED_FILES_EXT_SOURCES = {
"build.xml",
"nbproject/build-impl.xml",
"nbproject/genfiles.properties",
"nbproject/project.xml",
"nbproject/project.properties",
"nbproject/private/private.properties",
};
private static final String[] CREATED_PROPERTIES = {
"build.classes.excludes",
"build.dir",
"build.generated.dir",
"client.module.uri",
"client.urlPart",
"debug.classpath",
"display.browser",
"dist.dir",
"dist.jar",
"j2ee.deploy.on.save",
"j2ee.compile.on.save",
"j2ee.platform",
"j2ee.platform.classpath",
"j2ee.server.type",
"jar.compress",
"jar.content.additional",
"jar.name",
"javac.debug",
"javac.deprecation",
"javac.source",
"javac.target",
"meta.inf",
"no.dependencies",
"platform.active",
"resource.dir",
"source.root",
};
private static final String[] CREATED_PROPERTIES_EXT_SOURCES = {
"build.classes.excludes",
"build.dir",
"build.generated.dir",
"client.module.uri",
"client.urlPart",
"debug.classpath",
"display.browser",
"dist.dir",
"dist.jar",
"j2ee.deploy.on.save",
"j2ee.compile.on.save",
"j2ee.platform",
"j2ee.platform.classpath",
"j2ee.server.type",
"jar.compress",
"jar.content.additional",
"jar.name",
"javac.debug",
"javac.deprecation",
"javac.source",
"javac.target",
"meta.inf",
"no.dependencies",
"platform.active",
//"resource.dir", -XXX- this is not found in project.props
// when the project is created from ex. sources. Bug or not???
"source.root"
};
public EarProjectGeneratorTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
TestUtil.makeScratchDir(this);
MockLookup.setLayersAndInstances();
}
public void testCreateProjectJavaEE5() throws Exception {
File prjDirF = new File(getWorkDir(), "EARProject");
AntProjectHelper aph = EarProjectGenerator.createProject(prjDirF, "test-project",
Profile.JAVA_EE_5, TestUtil.SERVER_URL, "1.5", null);
assertNotNull(aph);
FileObject prjDirFO = aph.getProjectDirectory();
for (String file : CREATED_FILES) {
FileObject fo = prjDirFO.getFileObject(file);
if ("src/conf/application.xml".equals(file)) {
// deployment descriptor should not exist
assertNull(file + " file/folder should not exist", fo);
} else {
assertNotNull(file + " file/folder should exist", fo);
}
}
EditableProperties props = aph.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
@SuppressWarnings("unchecked")
List createdProperties = new ArrayList(props.keySet());
for (String property : CREATED_PROPERTIES) {
assertNotNull(property + " property cannot be found in project.properties", props.getProperty(property));
createdProperties.remove(property);
}
assertEquals("Found unexpected property: " + createdProperties,
CREATED_PROPERTIES.length, props.keySet().size());
}
public void testCreateProjectJ2EE14() throws Exception {
File prjDirF = new File(getWorkDir(), "EARProject");
AntProjectHelper aph = EarProjectGenerator.createProject(prjDirF, "test-project",
Profile.J2EE_14, TestUtil.SERVER_URL, "1.4", null);
assertNotNull(aph);
FileObject prjDirFO = aph.getProjectDirectory();
for (String file : CREATED_FILES) {
assertNotNull(file + " file/folder cannot be found", prjDirFO.getFileObject(file));
}
EditableProperties props = aph.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
@SuppressWarnings("unchecked")
List createdProperties = new ArrayList(props.keySet());
for (String property : CREATED_PROPERTIES) {
assertNotNull(property + " property cannot be found in project.properties", props.getProperty(property));
createdProperties.remove(property);
}
assertEquals("Found unexpected property: " + createdProperties,
CREATED_PROPERTIES.length, props.keySet().size());
}
public void testImportProject() throws Exception {
File prjDirF = new File(getWorkDir(), "EARProject");
AntProjectHelper helper = EarProjectGenerator.importProject(prjDirF, prjDirF,
"test-project-ext-src", Profile.JAVA_EE_5, TestUtil.SERVER_URL, null,
"1.5", Collections.<FileObject, ModuleType>emptyMap(), null);
assertNotNull(helper);
FileObject prjDirFO = FileUtil.toFileObject(prjDirF);
for (String createdFile : CREATED_FILES_EXT_SOURCES) {
assertNotNull(createdFile + " file/folder cannot be found", prjDirFO.getFileObject(createdFile));
}
EditableProperties props = helper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
@SuppressWarnings("unchecked")
List createdProperties = new ArrayList(props.keySet());
int extFileRefCount = 0;
List<String> extProperties = new ArrayList<String>();
Collections.addAll(extProperties, CREATED_PROPERTIES_EXT_SOURCES);
extProperties.add("file.reference." + getWorkDir().getName() + "-EARProject");
for (String propName : extProperties) {
String propValue = props.getProperty(propName);
assertNotNull(propName+" property cannot be found in project.properties", propValue);
createdProperties.remove(propName);
if ("manifest.file".equals(propName)) {
assertEquals("Invalid value of manifest.file property.", "manifest.mf", propValue);
}
}
assertEquals("Found unexpected property: " + createdProperties,
extProperties.size(), props.keySet().size() - extFileRefCount);
}
public void testProjectNameIsSet() throws Exception { // #73930
File prjDirF = new File(getWorkDir(), "EARProject");
EarProjectGenerator.createProject(prjDirF, "test-project",
Profile.JAVA_EE_5, TestUtil.SERVER_URL, "1.5", null);
// test also build
final File buildXML = new File(prjDirF, "build.xml");
String projectName = ProjectManager.mutex().readAccess(new Mutex.ExceptionAction<String>() {
public String run() throws Exception {
Document doc = XMLUtil.parse(new InputSource(buildXML.toURI().toString()),
false, true, null, null);
Element project = doc.getDocumentElement();
return project.getAttribute("name");
}
});
assertEquals("project name is set in the build.xml", "test-project", projectName);
}
public void testProjectNameIsEscaped() throws Exception {
final File prjDirF = new File(getWorkDir(), "EARProject");
EarProjectGenerator.createProject(prjDirF, "test project",
Profile.JAVA_EE_5, TestUtil.SERVER_URL, "1.5", null);
// test build.xml
String buildXmlProjectName = ProjectManager.mutex().readAccess(new Mutex.ExceptionAction<String>() {
public String run() throws Exception {
Document doc = XMLUtil.parse(new InputSource(new File(prjDirF, "build.xml").toURI().toString()),
false, true, null, null);
Element project = doc.getDocumentElement();
return project.getAttribute("name");
}
});
assertEquals("project name is escaped in build.xml", "test_project", buildXmlProjectName);
// test build-impl.xml
String buildImplXmlProjectName = ProjectManager.mutex().readAccess(new Mutex.ExceptionAction<String>() {
public String run() throws Exception {
Document doc = XMLUtil.parse(new InputSource(new File(prjDirF, "nbproject/build-impl.xml").toURI().toString()),
false, true, null, null);
Element project = doc.getDocumentElement();
return project.getAttribute("name");
}
});
assertEquals("project name is escaped in build-impl.xml", "test_project-impl", buildImplXmlProjectName);
}
}