/*
* ==================================================================== The
* ObjectStyle Group Software License, Version 1.0 Copyright (c) 2006 The
* ObjectStyle Group, and individual authors of the software. All rights
* reserved. Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. The end-user documentation
* included with the redistribution, if any, must include the following
* acknowlegement: "This product includes software developed by the ObjectStyle
* Group (http://objectstyle.org/)." Alternately, this acknowlegement may appear
* in the software itself, if and wherever such third-party acknowlegements
* normally appear. 4. The names "ObjectStyle Group" and "Cayenne" must not be
* used to endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* andrus@objectstyle.org. 5. Products derived from this software may not be
* called "ObjectStyle" nor may "ObjectStyle" appear in their names without
* prior written permission of the ObjectStyle Group. THIS SOFTWARE IS PROVIDED
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ==================================================================== This
* software consists of voluntary contributions made by many individuals on
* behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*/
package org.objectstyle.woproject.maven2.wobootstrap;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.util.Properties;
import junit.framework.TestCase;
import org.apache.commons.io.FileUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.easymock.EasyMock;
import org.objectstyle.woproject.maven2.wobootstrap.locator.WebObjectsLocator;
/**
* Criado em 30/09/2006
*/
/**
* @author <a href="mailto:hprange@moleque.com.br">Henrique Prange</a>
*/
public class TestAbstractBootstrapMojo extends TestCase {
protected String input[];
protected MockBootstrapMojo mojo;
protected String output[];
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
input = new String[] { "c:/JavaDirectToWeb.jar", "c:/JavaFoundation.jar", "c:/javaeoutil.jar", "c:/JavaXML.jar" };
output = new String[] { "JavaDirectToWeb", "JavaFoundation", "javaeoutil", "JavaXML" };
File versionFile = FileUtils.toFile(getClass().getResource("/version.plist"));
WebObjectsLocator mockLocator = EasyMock.createMock(WebObjectsLocator.class);
EasyMock.expect(mockLocator.getWebObjectsVersionFile()).andReturn(versionFile);
EasyMock.replay(new Object[] { mockLocator });
mojo = new MockBootstrapMojo(mockLocator);
}
public void testArtifatIdConvention() throws Exception {
for (int i = 0; i < input.length; i++) {
File jar = new File(input[i]);
assertEquals(output[i], mojo.getArtifactIdForJar(jar));
}
}
public void testCaseInsensitiveNameMapping() throws Exception {
for (int i = 0; i < input.length; i++) {
input[i] = input[i].toLowerCase();
}
for (int i = 0; i < input.length; i++) {
File jar = new File(input[i]);
assertEquals(output[i], mojo.getArtifactIdForJar(jar));
}
}
public void testCustomWebObjectsLocator() throws Exception {
final String path = "path_to_webobject";
final String version = "5.3.3";
mojo = new MockBootstrapMojo(path, version);
mojo.initializeLocator();
assertEquals(new File(path), mojo.locator.getWebObjectsLibFolder());
mojo.initialize();
Properties properties = mojo.artifactProperties;
assertEquals(version, properties.getProperty("version"));
}
public void testExceptionIfOnlyLibFolderOrOnlyVersionIsProvided() throws Exception {
mojo = new MockBootstrapMojo("a path", null);
try {
mojo.initializeLocator();
fail("Must throw an exception about illegal parameters");
} catch (MojoExecutionException exception) {
// It is ok
}
mojo = new MockBootstrapMojo(null, "a version");
try {
mojo.initializeLocator();
fail("Must throw an exception about illegal parameters");
} catch (MojoExecutionException exception) {
// It is ok
}
}
public void testFillValidProperties() throws Exception {
File resourcesPath = FileUtils.toFile(getClass().getResource("/"));
String filePath = "JavaWOExtensions.jar";
File mockJar = new File(resourcesPath, filePath);
Properties properties = mojo.fillProperties(mockJar);
assertEquals("com.webobjects", properties.getProperty("groupId"));
assertNotNull(properties.getProperty("version"));
assertEquals("jar", properties.getProperty("packaging"));
assertEquals(mockJar.getAbsolutePath(), properties.getProperty("file"));
assertEquals("JavaWOExtensions", properties.getProperty("artifactId"));
assertNotNull(properties.getProperty("pomFile"));
}
public void testNoJarMapping() throws Exception {
String filePath = "c:\\JavaWOExtensionsXXX.jar";
File invalidJar = new File(filePath);
Properties properties = mojo.fillProperties(invalidJar);
assertNull(properties);
}
public void testNullJarFile() throws Exception {
assertNull(mojo.getArtifactIdForJar(null));
assertNull(mojo.fillProperties(null));
}
public void testWarningForNotMappedArtifact() throws Exception {
WebObjectsLocator mockLocator = EasyMock.createMock(WebObjectsLocator.class);
File versionFile = FileUtils.toFile(getClass().getResource("/version.plist"));
EasyMock.expect(mockLocator.getWebObjectsVersionFile()).andReturn(versionFile);
File file = FileUtils.toFile(getClass().getResource("/mock-jar1.jar")).getParentFile();
EasyMock.expect(mockLocator.getWebObjectsLibFolder()).andReturn(file);
EasyMock.replay(mockLocator);
mojo.locator = mockLocator;
mojo.nullFillProperties = true;
mojo.execute();
assertThat(mojo.getLog().warningCount, is(2));
assertThat(mojo.executeGoalCount, is(0));
}
public void testWebObjectsNotInstalled() throws Exception {
WebObjectsLocator mockLocator = EasyMock.createMock(WebObjectsLocator.class);
EasyMock.expect(mockLocator.getWebObjectsVersionFile()).andReturn(null);
mojo.locator = mockLocator;
EasyMock.replay(new Object[] { mockLocator });
try {
mojo.execute();
fail("WebOjects not installed, must throws an exception.");
} catch (MojoExecutionException exception) {
assertEquals("WebObjects version is missing. Maybe WebObjects isn't installed.", exception.getMessage());
}
}
}