[jboss-cvs] jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/build ...

Marshall Culpepper mculpepper at jboss.com
Mon Feb 26 14:19:00 EST 2007


  User: mculpepper
  Date: 07/02/26 14:19:00

  Added:       core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/build   
                        IncrementalBuilderTest.java BuildTest.java
                        FileOpsTest.java
  Log:
  new seperated unit tests to deal with each physical part of the incremental package builder
  
  Revision  Changes    Path
  1.1      date: 2007/02/26 19:19:00;  author: mculpepper;  state: Exp;jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/build/IncrementalBuilderTest.java
  
  Index: IncrementalBuilderTest.java
  ===================================================================
  package org.jboss.ide.eclipse.packages.test.build;
  
  import junit.framework.Test;
  import junit.framework.TestSuite;
  
  import org.eclipse.core.resources.IFile;
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.core.runtime.IPath;
  import org.eclipse.core.runtime.Path;
  import org.jboss.ide.eclipse.core.util.ProjectUtil;
  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.PackagesCore;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackageNodeImpl;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackagesModel;
  import org.jboss.ide.eclipse.packages.core.project.PackagesBuilder;
  import org.jboss.ide.eclipse.packages.core.project.build.PackageBuildDelegate;
  
  import de.schlichtherle.io.File;
  
  public class IncrementalBuilderTest extends BuildTest {
  	
  	public IncrementalBuilderTest (String testName)
  	{
  		super(testName);
  	}
  	
  	public static Test suite ()
  	{
  		TestSuite suite = new TestSuite();
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_buildWithAPI"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_changeFile"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_addFile"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_removeFile"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_changeFilesetPattern_addFile"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_changeFilesetPattern_removeFile"));
  		suite.addTest(new IncrementalBuilderTest("testExplodedJar"));
  		suite.addTest(new IncrementalBuilderTest("testSimpleJar_changeToExploded"));
  		suite.addTest(new IncrementalBuilderTest("testBaseFile"));
  		return suite;
  	}
  	
  	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;
  		}
  	}
  	
  	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 ()
  	{
  		long timeout = 1000 * 20;
  		long wait = 0;
  		
  		//	 wait for incremental builder to finish
  		try {
  			Thread.sleep(1000 * 3);
  			while (PackageBuildDelegate.instance().isBuilding() && wait < timeout)
  			{
  				Thread.sleep(100);
  				wait += 100;
  			}
  			if (wait > timeout) {
  				fail("Timed out ("+(timeout/1000)+"s) waiting for builder");
  			}
  		} catch (InterruptedException e) {
  			e.printStackTrace();
  			fail(e.getMessage());
  		}
  	}
  	
  	public void testSimpleJar_changeFile ()
  	{	
  		setContents(testXmlFile, testXml_newContents);
  		
  		waitForBuilder();
  		
  		assertTestXmlContents(testXml_newContents);
  		
  		assertTrue (refJar.getPackageFile().exists());
  		
  		File refJarFile = getPackageFile(refJar);
  		File libFolderFile = findFile(refJarFile, "lib");
  		assertNotNull(libFolderFile);
  		
  		File nestedSimpleJarFile = findFile(libFolderFile, "simple.jar");
  		assertNotNull(nestedSimpleJarFile);
  		
  		File nestedTestXmlFile = findFile(nestedSimpleJarFile, "test.xml");
  		assertNotNull(nestedTestXmlFile);
  		
  		assertFileContents(nestedTestXmlFile, 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());
  		
  		File jarFile = getPackageFile(simpleJar);
  		File addedXMLFile = findFile(jarFile, "added.xml");
  		
  		assertNull(addedXMLFile);
  	}
  	
  	public void testSimpleJar_changeFilesetPattern_addFile ()
  	{
  		IFile nestedXMLFile = project.getFile(new Path("dir1/dir2/nested.xml"));
  		setContents(nestedXMLFile, nestedXml_contents);
  		
  		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 = (File) dir1.listFiles()[0];
  		assertNotNull(dir2);
  		assertEquals(dir2.getName(), "dir2");
  		
  		File nestedXMLFile2 = (File) dir2.listFiles()[0];
  		assertNotNull(nestedXMLFile2);
  		assertEquals(nestedXMLFile2.getName(), "nested.xml");
  		
  		assertFileContents (nestedXMLFile2, nestedXml_contents);
  	}
  	
  	public void testSimpleJar_changeFilesetPattern_removeFile ()
  	{
  		File jarFile = getPackageFile(simpleJar);
  		
  		simpleJarFileset.setIncludesPattern("*.xml");
  		((PackageNodeImpl)simpleJarFileset).flagAsChanged();
  		
  		waitForBuilder();
  		
  		File dir1 = findFile(jarFile, "dir1");
  		assertNull(dir1);
  	}
  	
  	public void testExplodedJar ()
  	{
  		PackageBuildDelegate.instance().buildSinglePackage(explodedJar, nullMonitor);
  		
  		File explodedJarFolder = getPackageFile(explodedJar);
  		
  		assertTrue(explodedJarFolder.exists());
  		assertTrue(explodedJarFolder.getDelegate().isDirectory());
  	}
  	
  	public void testSimpleJar_changeToExploded ()
  	{
  		simpleJar.setExploded(true);
  		((PackageNodeImpl)simpleJar).flagAsChanged();
  		waitForBuilder();
  		
  		File simpleJarFile = getPackageFile(simpleJar);
  		assertTrue(simpleJarFile.getDelegate().isDirectory());
  	}
  	
  	public void testBaseFile ()
  	{
  		IPath projectPath = project.getFullPath();
  		IPath filePath = projectPath.append("simple.jar").append("test.xml");
  		
  		IPath basePath = PackagesCore.getBaseFile(filePath);
  		
  		assertEquals (basePath.segmentCount(), 2);
  		assertEquals (basePath.segment(0), project.getName());
  		assertEquals (basePath.segment(1), "simple.jar");
  		
  		filePath = projectPath.append("exploded.jar").append("test.xml");
  		basePath = PackagesCore.getBaseFile(filePath);
  		
  		assertEquals (basePath.segmentCount(), 3);
  		assertEquals (basePath.segment(0), project.getName());
  		assertEquals (basePath.segment(1), "exploded.jar");
  		assertEquals (basePath.segment(2), "test.xml");
  	}
  }
  
  
  
  1.1      date: 2007/02/26 19:19:00;  author: mculpepper;  state: Exp;jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/build/BuildTest.java
  
  Index: BuildTest.java
  ===================================================================
  package org.jboss.ide.eclipse.packages.test.build;
  
  import java.io.ByteArrayInputStream;
  import java.io.FileNotFoundException;
  import java.io.IOException;
  import java.util.List;
  
  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.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.ResourceUtil;
  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.IPackageFolder;
  import org.jboss.ide.eclipse.packages.core.model.PackagesCore;
  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.build.PackageBuildDelegate;
  
  import de.schlichtherle.io.File;
  import de.schlichtherle.io.FileInputStream;
  
  import junit.framework.TestCase;
  
  public class BuildTest extends TestCase {
  	protected IProject project;
  	protected IJavaProject javaProject;
  	
  	protected PackageBuildDelegate buildDelegate;
  	protected NullProgressMonitor nullMonitor = new NullProgressMonitor();
  	
  	protected IPackage simpleJar, refJar, explodedJar;
  	protected IFile testXmlFile;
  	protected IPackageFileSet simpleJarFileset, explodedJarFileset;
  	protected IPackageFolder libFolder;
  	
  	protected static boolean initialized = false;
  
  	protected static String testXml_originalContents = "<testXML><text>YoYo</text></testXML>";
  	protected static String testXml_newContents = "<testXML><text>YoYo - Revision 2</text></testXML>";
  	protected static String addedXml_contents = "<added><text>added content</text></added>";
  	protected static String nestedXml_contents = "<nested<text>nested content</text></nested>";
  	
  	public BuildTest (String testName)
  	{
  		super(testName);
  	}
  	
  	protected void setUp() throws Exception {
  		if (!initialized)
  		{
  			javaProject = JavaProjectHelper.createJavaProject("buildProject", new String[] { "src" }, "/bin");
  			project = javaProject.getProject();
  			
  			buildDelegate = PackageBuildDelegate.instance();
  			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);
  
  			refJar = PackagesCore.createDetachedPackage(project, true);
  			refJar.setName("ref.jar");
  			refJar.setPackageType(PackagesCore.getPackageType(JARPackageType.TYPE_ID));
  			refJar.setDestinationContainer(project);
  			
  			libFolder = PackagesCore.createDetachedFolder(project);
  			libFolder.setName("lib");
  			refJar.addChild(libFolder);
  			
  			libFolder.addChild(simpleJar.createReference(false));
  			
  			PackagesModel.instance().attach(refJar, nullMonitor);
  	
  			explodedJar = PackagesCore.createDetachedPackage(project, true);
  			explodedJar.setName("exploded.jar");
  			explodedJar.setExploded(true);
  			explodedJar.setPackageType(PackagesCore.getPackageType(JARPackageType.TYPE_ID));
  			explodedJar.setDestinationContainer(project);
  			
  			explodedJarFileset = PackagesCore.createDetachedPackageFileSet(project);
  			explodedJarFileset.setIncludesPattern("*.xml");
  			explodedJarFileset.setSourceProject(project);
  			
  			explodedJar.addChild(explodedJarFileset);
  			
  			PackagesModel.instance().attach(explodedJar, nullMonitor);
  			
  			initialized = true;
  		} else{
  			
  			project = ResourcesPlugin.getWorkspace().getRoot().getProject("buildProject");
  			javaProject = JavaCore.create(project);
  			
  			buildDelegate = PackageBuildDelegate.instance();
  			testXmlFile = project.getFile("test.xml");
  			
  			List packages = PackagesModel.instance().getProjectPackages(project);
  			simpleJar = (IPackage) packages.get(0);
  			simpleJarFileset = simpleJar.getFileSets()[0];
  			
  			refJar = (IPackage) packages.get(1);
  			libFolder = refJar.getFolders()[0];
  			
  			explodedJar = (IPackage) packages.get(2);
  			explodedJarFileset = explodedJar.getFileSets()[0];
  		}
  	}
  	
  	protected 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);
  			}
  
  			stream.close();
  		} catch (CoreException e) {
  			fail(e.getMessage());
  		} catch (IOException e) {
  			fail(e.getMessage());
  		}
  	}
  	
  	protected void assertTestXmlContents (String contents)
  	{
  		assertFileContents(simpleJar, "test.xml", contents);
  	}
  	
  	protected File getPackageFile (IPackage pkg)
  	{
  		return new File(pkg.getPackageFile().getRawLocation().toFile());
  	}
  	
  	protected File findFile (File jarFile, String name)
  	{
  		File subFiles[] = (File [])  jarFile.listFiles();
  		if (subFiles == null || subFiles.length == 0)
  			return null;
  		
  		File file = null;
  		for (int i = 0; i < subFiles.length; i++)
  		{
  			if (subFiles[i].getName().equals(name)) {
  				file = subFiles[i]; break;
  			}
  		}
  		
  		return file;
  	}
  	
  	protected 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);
  			stream.close();
  		} catch (FileNotFoundException e) {
  			fail(e.getMessage());
  		} catch (IOException e) {
  			fail(e.getMessage());
  		}
  		
  		String fileContents = new String(bytes);
  		assertEquals(fileContents, contents);
  	}
  	
  	protected void assertFileContents (IPackage jar, String fileName, String contents)
  	{
  		File jarFile = getPackageFile(jar);
  		assertTrue(jarFile.exists());
  		assertTrue(jarFile.isArchive());
  
  		File file = findFile (jarFile, fileName);
  		assertFileContents (file, contents);
  	}
  }
  
  
  
  1.1      date: 2007/02/26 19:19:00;  author: mculpepper;  state: Exp;jbosside/core/tests/org.jboss.ide.eclipse.packages.test/src/org/jboss/ide/eclipse/packages/test/build/FileOpsTest.java
  
  Index: FileOpsTest.java
  ===================================================================
  package org.jboss.ide.eclipse.packages.test.build;
  
  import junit.framework.Test;
  import junit.framework.TestSuite;
  
  import org.jboss.ide.eclipse.packages.core.model.IPackageFileSet;
  import org.jboss.ide.eclipse.packages.core.project.build.BuildFileOperations;
  
  import de.schlichtherle.io.ArchiveException;
  import de.schlichtherle.io.File;
  
  public class FileOpsTest extends BuildTest {
  
  	private BuildFileOperations ops;
  	
  	public FileOpsTest (String testName)
  	{
  		super(testName);
  	}
  	
  	public static Test suite ()
  	{
  		TestSuite suite = new TestSuite();
  		suite.addTest(new FileOpsTest("testRemoveFile"));
  		suite.addTest(new FileOpsTest("testUpdateFile_noStamps"));
  		
  		return suite;
  	}
  	
  	protected void setUp() throws Exception {
  		super.setUp();
  		
  		this.ops = buildDelegate.getFileOperations();
  	}
  	
  	public void testRemoveFile ()
  	{
  		ops.removeFileFromFilesets(testXmlFile, new IPackageFileSet[] { simpleJarFileset });
  		File simpleJarFile = getPackageFile(simpleJar);
  		
  		try {
  			File.update(simpleJarFile);
  		} catch (ArchiveException e) {
  			fail(e.getMessage());
  		}
  		
  		File refJarFile = getPackageFile(refJar);
  		
  		assertNull(findFile(simpleJarFile, "test.xml"));
  		File simpleJarInRefJar = findFile(refJarFile, "simple.jar");
  		
  		assertNull(findFile(simpleJarInRefJar, "test.xml"));
  	}
  	
  	public void testUpdateFile_noStamps ()
  	{
  		ops.updateFileInFilesets(testXmlFile, new IPackageFileSet[] { simpleJarFileset }, false);
  		
  		File simpleJarFile = getPackageFile(simpleJar);
  		File refJarFile = getPackageFile(refJar);
  		
  		assertNotNull(findFile(simpleJarFile, "test.xml"));
  		File simpleJarInRefJar = findFile(refJarFile, "simple.jar");
  		
  		assertNotNull(findFile(simpleJarInRefJar, "test.xml"));
  	}
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list