[jboss-cvs] jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test ...
Marshall Culpepper
mculpepper at jboss.com
Fri Feb 9 14:12:53 EST 2007
User: mculpepper
Date: 07/02/09 14:12:53
Added: core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test
PackagesBuildTest.java
Log:
5 new unit tests specifically tailored towards the incremental builder.. this test case will be expanded upon more soon
Revision Changes Path
1.1 date: 2007/02/09 19:12:53; author: mculpepper; state: Exp;jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/PackagesBuildTest.java
Index: PackagesBuildTest.java
===================================================================
package org.jboss.ide.eclipse.packages.test;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.jboss.ide.eclipse.core.test.util.JavaProjectHelper;
import org.jboss.ide.eclipse.core.util.ProjectUtil;
import org.jboss.ide.eclipse.core.util.ResourceUtil;
import org.jboss.ide.eclipse.packages.core.model.AbstractPackagesBuildListener;
import org.jboss.ide.eclipse.packages.core.model.IPackage;
import org.jboss.ide.eclipse.packages.core.model.IPackageFileSet;
import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
import org.jboss.ide.eclipse.packages.core.model.PackagesCore;
import org.jboss.ide.eclipse.packages.core.model.internal.PackageBuildDelegate;
import org.jboss.ide.eclipse.packages.core.model.internal.PackagesModel;
import org.jboss.ide.eclipse.packages.core.model.types.JARPackageType;
import org.jboss.ide.eclipse.packages.core.project.PackagesBuilder;
import de.schlichtherle.io.FileInputStream;
public class PackagesBuildTest extends TestCase{
private IProject project;
private IJavaProject javaProject;
private PackageBuildDelegate buildDelegate;
private NullProgressMonitor nullMonitor = new NullProgressMonitor();
private IPackage simpleJar;
private IFile testXmlFile;
private IPackageFileSet simpleJarFileset;
private static boolean initialized = false;
public PackagesBuildTest (String testName)
{
super(testName);
}
protected void setUp() throws Exception {
if (!initialized)
{
javaProject = JavaProjectHelper.createJavaProject("buildProject", new String[] { "src" }, "/bin");
project = javaProject.getProject();
buildDelegate = new PackageBuildDelegate(project);
testXmlFile = project.getFile("test.xml");
simpleJar = PackagesCore.createDetachedPackage(project, true);
simpleJar.setName("simple.jar");
simpleJar.setPackageType(PackagesCore.getPackageType(JARPackageType.TYPE_ID));
simpleJar.setDestinationContainer(project);
setContents(testXmlFile, testXml_originalContents);
simpleJarFileset = PackagesCore.createDetachedPackageFileSet(project);
simpleJarFileset.setIncludesPattern("*.xml");
simpleJarFileset.setSourceContainer(project);
simpleJar.addChild(simpleJarFileset);
PackagesModel.instance().attach(simpleJar, nullMonitor);
initialized = true;
} else{
project = ResourcesPlugin.getWorkspace().getRoot().getProject("buildProject");
javaProject = JavaCore.create(project);
buildDelegate = new PackageBuildDelegate(project);
testXmlFile = project.getFile("test.xml");
List packages = PackagesModel.instance().getProjectPackages(project);
simpleJar = (IPackage) packages.get(0);
simpleJarFileset = (IPackageFileSet) simpleJar.getChildren(IPackageNode.TYPE_PACKAGE_FILESET)[0];
}
}
private void setContents(IFile file, String contents)
{
ByteArrayInputStream stream = new ByteArrayInputStream(contents.getBytes());
try {
if (file.exists())
{
file.setContents(stream, false, false, nullMonitor);
} else {
ResourceUtil.safeCreateFile(file, stream, false, nullMonitor);
}
} catch (CoreException e) {
fail(e.getMessage());
}
}
private static String testXml_originalContents = "<testXML><text>YoYo</text></testXML>";
private static String testXml_newContents = "<testXML><text>YoYo - Revision 2</text></testXML>";
private static String addedXml_contents = "<added><text>added content</text></added>";
private static String nestedXml_contents = "<nested<text>nested content</text></nested>";
private class SimpleJarListener extends AbstractPackagesBuildListener
{
public boolean startedBuildingPackage = false, startedCollecting = false;
public boolean finishedBuildingPackage = false, finishedCollecting = false;
public void startedBuildingPackage(IPackage pkg) {
startedBuildingPackage = true;
finishedBuildingPackage = false;
assertEquals(pkg, simpleJar);
}
public void startedCollectingFileSet(IPackageFileSet fileset) {
startedCollecting = true;
assertEquals(fileset, simpleJarFileset);
}
public void finishedCollectingFileSet(IPackageFileSet fileset) {
finishedCollecting = true;
assertEquals(fileset, simpleJarFileset);
}
public void finishedBuildingPackage (IPackage pkg) {
assertTrue(startedBuildingPackage);
assertTrue(startedCollecting);
assertTrue(finishedCollecting);
assertTrue(simpleJar.getPackageFile().exists());
assertTestXmlContents (testXml_originalContents);
startedBuildingPackage = startedCollecting = finishedCollecting = false;
finishedBuildingPackage = true;
}
}
private void assertTestXmlContents (String contents)
{
assertFileContents(simpleJar, "test.xml", contents);
}
private de.schlichtherle.io.File getPackageFile (IPackage pkg)
{
return new de.schlichtherle.io.File(pkg.getPackageFile().getRawLocation().toFile());
}
private File findFile (de.schlichtherle.io.File jarFile, String name)
{
File subFiles[] = jarFile.listFiles();
assertNotNull(subFiles);
File file = null;
for (int i = 0; i < subFiles.length; i++)
{
if (subFiles[i].getName().equals(name)) {
file = subFiles[i]; break;
}
}
return file;
}
private void assertFileContents (File file, String contents)
{
assertNotNull(file);
assertEquals(file.length(), contents.length());
byte bytes[] = new byte[0];
try {
FileInputStream stream = new FileInputStream(file);
bytes = new byte[(int)file.length()];
stream.read(bytes);
} catch (FileNotFoundException e) {
fail(e.getMessage());
} catch (IOException e) {
fail(e.getMessage());
}
String fileContents = new String(bytes);
assertEquals(fileContents, contents);
}
private void assertFileContents (IPackage jar, String fileName, String contents)
{
de.schlichtherle.io.File jarFile = getPackageFile(jar);
assertTrue(jarFile.exists());
assertTrue(jarFile.isArchive());
File file = findFile (jarFile, fileName);
assertFileContents (file, contents);
}
public void testSimpleJar_buildWithAPI ()
{
SimpleJarListener listener = new SimpleJarListener();
PackagesModel.instance().addPackagesBuildListener(listener);
buildDelegate.buildSinglePackage(simpleJar, nullMonitor);
assertTrue(listener.finishedBuildingPackage);
assertTrue(ProjectUtil.projectHasBuilder(project, PackagesBuilder.BUILDER_ID));
PackagesModel.instance().removePackagesBuildListener(listener);
}
private void waitForBuilder ()
{
// wait for incremental builder to finish
try {
Thread.sleep(1000 * 3);
while (PackageBuildDelegate.isBuilding())
{
Thread.sleep(300);
}
} catch (InterruptedException e) {
fail(e.getMessage());
}
}
public void testSimpleJar_changeFile ()
{
setContents(testXmlFile, testXml_newContents);
waitForBuilder();
assertTestXmlContents(testXml_newContents);
}
public void testSimpleJar_addFile ()
{
IFile addedXMLFile = project.getFile("added.xml");
setContents(addedXMLFile, addedXml_contents);
waitForBuilder();
assertFileContents (simpleJar, "added.xml", addedXml_contents);
}
public void testSimpleJar_removeFile ()
{
IFile addedXML = project.getFile("added.xml");
try {
addedXML.delete(true, nullMonitor);
} catch (CoreException e) {
fail(e.getMessage());
}
waitForBuilder();
assertFalse(addedXML.exists());
de.schlichtherle.io.File jarFile = getPackageFile(simpleJar);
File addedXMLFile = findFile(jarFile, "added.xml");
assertNull(addedXMLFile);
}
public void testSimpleJar_changeFilesetPattern ()
{
IFile nestedXMLFile = project.getFile(new Path("dir1/dir2/nested.xml"));
setContents(nestedXMLFile, nestedXml_contents);
de.schlichtherle.io.File jarFile = getPackageFile(simpleJar);
File dir1 = findFile(jarFile, "dir1");
assertNull(dir1);
simpleJarFileset.setIncludesPattern("**/*.xml");
waitForBuilder();
dir1 = findFile(jarFile, "dir1");
assertNotNull(dir1);
assertEquals(dir1.getName(), "dir1");
File dir2 = dir1.listFiles()[0];
assertNotNull(dir2);
assertEquals(dir2.getName(), "dir2");
File nestedXMLFile2 = dir2.listFiles()[0];
assertNotNull(nestedXMLFile2);
assertEquals(nestedXMLFile2.getName(), "nested.xml");
assertFileContents (nestedXMLFile2, nestedXml_contents);
}
}
More information about the jboss-cvs-commits
mailing list