package org.jboss.shrinkwrap.impl.base;
import java.io.File;
import junit.framework.Assert;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
/**
* Tests that verify {@link Archive} implement the semantics of equals and hashCode correctly.
*
* SHRINKWRAP-181
*
* @author <a href="mailto:chris.wash@gmail.com">Chris Wash</a>
* @version $Revision: $
*
*/
public class ArchiveEqualsHashCodeTestCase {
// -------------------------------------------------------------------------------------||
// Class Members ----------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
// These two files have the same contents, used for testing equality.
private static final String TEST_ZIP_1 = "org/jboss/shrinkwrap/impl/base/importer/test.zip";
private static final String TEST_ZIP_2 = "org/jboss/shrinkwrap/impl/base/asset/test.zip";
// -------------------------------------------------------------------------------------||
// Tests ------------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
@Test
public void archiveEqualsShouldReturnTrueWhenNameAndContentsAreEqual() throws Exception {
final File testFile = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final File testFile2 = TestIOUtil.createFileFromResourceName(TEST_ZIP_2);
final Archive<?> archive = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile);
final Archive<?> archive2 = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile2);
Assert.assertEquals("Archives were not equal, but should be.", archive, archive2);
}
@Test
public void archiveEqualsShouldReturnTrueWhenEqualByReference() throws Exception {
// reference the same file
final File testFile = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final File testFile2 = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final Archive<?> archive = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile);
final Archive<?> archive2 = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile2);
Assert.assertEquals("Archives were not equal, but should be.", archive, archive2);
}
@Test
public void archiveEqualsShouldReturnFalseWhenArchivesContentsAreNotEqual() throws Exception {
final String archiveName = "test.zip";
final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, archiveName);
final File testFile = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final JavaArchive archive2 = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile);
Assert
.assertFalse("Archives were equal, but should not have been - contents differ.", archive.equals(archive2));
}
@Test
public void archiveEqualsShouldReturnFalseWhenArchivesNamesAreNotEqual() throws Exception {
final String archiveName = "test.war";
final String archiveName2 = "test.jar";
final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, archiveName);
final JavaArchive archive2 = ShrinkWrap.create(JavaArchive.class, archiveName2);
Assert.assertFalse("Archives were equal, but should not have been - names differ.", archive.equals(archive2));
}
@Test
public void enterpriseArchiveEqualsShouldReturnTrueWhenNameAndContentsAreEqual() throws Exception {
final File testFile1 = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final File testFile2 = TestIOUtil.createFileFromResourceName(TEST_ZIP_2);
final EnterpriseArchive ear1 = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, testFile1);
final EnterpriseArchive ear2 = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, testFile2);
Assert.assertEquals("EnterpriseArchive instances were not equal, but should be.", ear1, ear2);
}
@Test
public void javaArchiveShouldEqualEnterpriseArchiveWhenNameAndContentsAreEqual() throws Exception {
final File testFile1 = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final File testFile2 = TestIOUtil.createFileFromResourceName(TEST_ZIP_2);
final JavaArchive jar = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile1);
final EnterpriseArchive ear = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, testFile2);
Assert.assertEquals("JavaArchive and EnterpriseArchive were not equal, but should be.", jar, ear);
}
/**
* Calls to hashCode with the same value should always hash to the same result.
*
* @throws Exception
*/
@Test
public void archiveHashCodeShouldBeIdempotent() throws Exception {
final File testFile1 = TestIOUtil.createFileFromResourceName(TEST_ZIP_1);
final JavaArchive jar = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile1);
Assert.assertEquals("hashCode did not return consistent value for same instance", jar.hashCode(),
jar.hashCode());
}
}