blob: c539fadc152fc36b7562a41b8632e33202eb6344 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.ui.tests.browsing;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.JavaTestPlugin;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceDescription;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.swt.widgets.Control;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IElementChangedListener;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaElementDelta;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.ui.browsing.LogicalPackage;
public class PackagesViewContentProviderTests2 extends TestCase {
public static Test suite() {
TestSuite suite= new TestSuite("org.eclipse.jdt.ui.tests.PackagesViewContentProviderTests2"); //$NON-NLS-1$
//$JUnit-BEGIN$
suite.addTestSuite(PackagesViewContentProviderTests2.class);
//$JUnit-END$
return suite;
}
private IJavaProject fJProject1;
private IJavaProject fJProject2;
private IPackageFragmentRoot fRoot1;
private IWorkspace fWorkspace;
private IWorkbench fWorkbench;
private MockPluginView fMyPart;
private IStructuredContentProvider fProvider;
private IPackageFragmentRoot fArchiveFragmentRoot;
private IPackageFragment fPackJunit;
private IPackageFragment fPackJunitSamples;
private IPackageFragment fPackJunitSamplesMoney;
private ICompilationUnit fCUIMoney;
private ICompilationUnit fCUMoney;
private ICompilationUnit fCUMoneyBag;
private ICompilationUnit fCUMoneyTest;
private IWorkbenchPage fPage;
private IPackageFragmentRoot fRoot2;
private IPackageFragment fPack12;
private IPackageFragment fPack32;
private IPackageFragment fPack42;
private IPackageFragment fPack52;
private IPackageFragment fPack62;
private ICompilationUnit fCU12;
private ICompilationUnit fCU22;
private IPackageFragment fPack21;
private ICompilationUnit fCU11;
private ICompilationUnit fCU21;
private IPackageFragment fPack61;
private IPackageFragment fPack51;
private IPackageFragment fPack41;
private IPackageFragment fPack31;
private IPackageFragment fPackDefault1;
private IPackageFragment fPackDefault2;
private IPackageFragment fPack17;
private IPackageFragment fPack81;
private IPackageFragment fPack91;
private IPackageFragmentRoot fInternalJarRoot;
private IPackageFragment fInternalPackDefault;
private IPackageFragment fInternalPack3;
private IPackageFragment fInternalPack4;
private IPackageFragment fInternalPack5;
private IPackageFragment fInternalPack10;
private IPackageFragment fInternalPack6;
private IPackageFragment fInternalPackMetaInf;
private boolean fEnableAutoBuildAfterTesting;
private IPackageFragment fPack102;
public PackagesViewContentProviderTests2(String name) {
super(name);
}
//----------- getElement in flat view ------------------------------
public void testGetElementsPackageFragmentRoot() throws Exception {
Object[] children= fProvider.getElements(fRoot1);
Object[] expectedChildren= new Object[] { fPack21, fPack31, fPack41, fPack51, fPack61, fPack81, fPack91, fPackDefault1 };
assertTrue("Wrong children found for PackageFragment", compareArrays(children, expectedChildren)); //$NON-NLS-1$
}
public void testGetElementsProject() throws Exception {
LogicalPackage cp3= new LogicalPackage(fPack31);
cp3.add(fPack32);
cp3.add(fInternalPack3);
LogicalPackage defaultCp= new LogicalPackage(fPackDefault1);
defaultCp.add(fPackDefault2);
defaultCp.add(fInternalPackDefault);
LogicalPackage cp4= new LogicalPackage(fPack41);
cp4.add(fPack42);
cp4.add(fInternalPack4);
LogicalPackage cp5= new LogicalPackage(fPack51);
cp5.add(fPack52);
cp5.add(fInternalPack5);
LogicalPackage cp6= new LogicalPackage(fPack61);
cp6.add(fPack62);
cp6.add(fInternalPack6);
LogicalPackage cp10= new LogicalPackage(fPack102);
cp10.add(fInternalPack10);
Object[] children= fProvider.getElements(fJProject2);
Object[] expectedChildren= new Object[] { defaultCp, cp3, cp4, cp5, cp6, cp10, fInternalPackMetaInf, fPack21, fPack12, fPack91, fPack81, fPack17 };
assertTrue("Wrong children founf for PackageFragment", compareArrays(children, expectedChildren)); //$NON-NLS-1$
}
//---------------Delta Tests-----------------------------
public void testRemovePackageNotLogicalPackage() throws Exception {
//initialise Map
fProvider.getElements(fJProject2);
fMyPart.clear();
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.REMOVED, fPack12);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
assertTrue("Remove happened", fMyPart.hasRemoveHappened()); //$NON-NLS-1$
assertTrue("Correct package removed", fMyPart.getRemovedObject().contains(fPack12)); //$NON-NLS-1$
}
public void testRemovePackageInTwoPackageLogicalPackage() throws Exception {
//initialise map
fProvider.getElements(fJProject2);
//create CompoundElement containning
LogicalPackage cp10= new LogicalPackage(fInternalPack10);
fMyPart.clear();
//send a delta indicating fragment deleted
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.REMOVED, fPack102);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
//assert remove happened (delta worked)
assertTrue("Refresh happened", fMyPart.hasRemoveHappened() && fMyPart.hasAddHappened()); //$NON-NLS-1$
Object addedObject= fMyPart.getAddedObject().get(0);
Object removedObject= fMyPart.getRemovedObject().get(0);
assertTrue("Correct guy removed", canFindEqualCompoundElement(cp10, new Object[] { removedObject })); //$NON-NLS-1$
assertTrue("Correct guy added", fInternalPack10.equals(addedObject)); //$NON-NLS-1$
}
public void testRemovePackageFromLogicalPackage() throws Exception {
//initialise map
fProvider.getElements(fJProject2);
fMyPart.clear();
//send a delta indicating fragment deleted
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.REMOVED, fPack62);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
//assert remove happened (delta worked)
assertTrue("Refresh did not happened", !fMyPart.hasRefreshHappened()); //$NON-NLS-1$
}
public void testRemoveCUFromPackageNotLogicalPackage() throws Exception {
//initialise Map
ICompilationUnit cu= fPack81.createCompilationUnit("Object.java", "", true, null); //$NON-NLS-1$//$NON-NLS-2$
//make sure parent is visible
fMyPart.fViewer.setInput(fJProject2);
fMyPart.clear();
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= TestDelta.createCUDelta(new ICompilationUnit[] { cu }, fPack81, IJavaElementDelta.REMOVED);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
assertTrue("Refresh happened", fMyPart.hasRefreshHappened()); //$NON-NLS-1$
assertTrue("Correct package refreshed", fMyPart.getRefreshedObject().contains(fPack81)); //$NON-NLS-1$
assertEquals("Correct number of refreshes", 1, fMyPart.getRefreshedObject().size()); //$NON-NLS-1$
}
public void testAddCUFromPackageNotLogicalPackage() throws Exception {
ICompilationUnit cu= fPack81.createCompilationUnit("Object.java", "", true, null); //$NON-NLS-1$//$NON-NLS-2$
//initialise Map
fMyPart.fViewer.setInput(fJProject2);
fMyPart.clear();
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= TestDelta.createCUDelta(new ICompilationUnit[] { cu }, fPack81, IJavaElementDelta.ADDED);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
assertTrue("Refresh happened", fMyPart.hasRefreshHappened()); //$NON-NLS-1$
assertTrue("Correct package refreshed", fMyPart.getRefreshedObject().contains(fPack81)); //$NON-NLS-1$
assertEquals("Correct number of refreshes", 1, fMyPart.getRefreshedObject().size()); //$NON-NLS-1$
}
public void testAddFragmentToLogicalPackage() throws Exception {
//create package fragment to be added
IPackageFragment pack101= fRoot1.createPackageFragment("pack3.pack4.pack10", true, null);//$NON-NLS-1$
//initialise map
fProvider.getElements(fJProject2);
fMyPart.clear();
//send delta
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.ADDED, pack101);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
//make sure no refresh happened
assertTrue("Refresh did not happened", !fMyPart.hasRefreshHappened()); //$NON-NLS-1$
}
public void testAddPackageNotLogicalPackage() throws Exception {
//initialise Map
fProvider.getElements(fJProject2);
fMyPart.clear();
IPackageFragment test= fRoot1.createPackageFragment("pack3.test", true, null); //$NON-NLS-1$
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.ADDED, test);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
assertTrue("Add happened", fMyPart.hasAddHappened()); //$NON-NLS-1$
assertTrue("Correct package added", fMyPart.getAddedObject().contains(test)); //$NON-NLS-1$
}
public void testAddPackageToCreateLogicalPackage() throws Exception {
//initialise map
fProvider.getElements(fJProject2);
//create new package
IPackageFragment pack11= fRoot1.createPackageFragment("pack1", true, null);//$NON-NLS-1$
//create a logical package for testing
LogicalPackage lp1= new LogicalPackage(fPack12);
lp1.add(pack11);
fMyPart.clear();
//send a delta indicating fragment deleted
IElementChangedListener listener= (IElementChangedListener) fProvider;
IJavaElementDelta delta= new TestDelta(IJavaElementDelta.ADDED, pack11);
listener.elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
//force events from display
pushDisplay();
//assert remove and add happened (delta worked)
assertTrue("Remove and add happened", fMyPart.hasRemoveHappened() && fMyPart.hasAddHappened()); //$NON-NLS-1$
Object addedObject= fMyPart.getAddedObject().get(0);
Object removedObject= fMyPart.getRemovedObject().get(0);
assertTrue("Correct guy removed", fPack12.equals(removedObject)); //$NON-NLS-1$
assertTrue("Correct guy added", lp1.equals(addedObject) ); //$NON-NLS-1$
}
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
fWorkspace= ResourcesPlugin.getWorkspace();
assertNotNull(fWorkspace);
IWorkspaceDescription workspaceDesc= fWorkspace.getDescription();
fEnableAutoBuildAfterTesting= workspaceDesc.isAutoBuilding();
if (fEnableAutoBuildAfterTesting)
JavaProjectHelper.setAutoBuilding(false);
fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");//$NON-NLS-1$//$NON-NLS-2$
fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");//$NON-NLS-1$//$NON-NLS-2$
assertNotNull("project1 null", fJProject1);//$NON-NLS-1$
assertNotNull("project2 null", fJProject2);//$NON-NLS-1$
//------------set up project #1 : External Jar and zip file-------
IPackageFragmentRoot jdk= JavaProjectHelper.addVariableRTJar(fJProject1, "JRE_LIB_TEST", null, null);//$NON-NLS-1$
assertTrue("jdk not found", jdk != null);//$NON-NLS-1$
//---Create zip file-------------------
java.io.File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());//$NON-NLS-1$
fArchiveFragmentRoot= JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", junitSrcArchive);//$NON-NLS-1$
fPackJunit= fArchiveFragmentRoot.getPackageFragment("junit");//$NON-NLS-1$
fPackJunitSamples= fArchiveFragmentRoot.getPackageFragment("junit.samples");//$NON-NLS-1$
fPackJunitSamplesMoney= fArchiveFragmentRoot.getPackageFragment("junit.samples.money");//$NON-NLS-1$
assertNotNull("creating fPackJunit", fPackJunit);//$NON-NLS-1$
assertNotNull("creating fPackJunitSamples", fPackJunitSamples);//$NON-NLS-1$
assertNotNull("creating fPackJunitSamplesMoney",fPackJunitSamplesMoney);//$NON-NLS-1$
fCUIMoney= fPackJunitSamplesMoney.getCompilationUnit("IMoney.java");//$NON-NLS-1$
fCUMoney= fPackJunitSamplesMoney.getCompilationUnit("Money.java");//$NON-NLS-1$
fCUMoneyBag= fPackJunitSamplesMoney.getCompilationUnit("MoneyBag.java");//$NON-NLS-1$
fCUMoneyTest= fPackJunitSamplesMoney.getCompilationUnit("MoneyTest.java");//$NON-NLS-1$
//java.io.File mylibJar= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB);
//assertTrue("lib not found", mylibJar != null && mylibJar.exists());//$NON-NLS-1$
//JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(mylibJar.getPath()), null, null);
//----------------Set up internal jar----------------------------
//File myInternalJar= JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/compoundtest.jar"));//$NON-NLS-1$
//assertTrue("lib not found", myInternalJar != null && myInternalJar.exists());//$NON-NLS-1$
fInternalJarRoot= JavaProjectHelper.addLibraryWithImport(fJProject2, new Path("testresources/compoundtest.jar"), null, null); //$NON-NLS-1$
fInternalPackDefault= fInternalJarRoot.getPackageFragment("");//$NON-NLS-1$
fInternalPack3= fInternalJarRoot.getPackageFragment("pack3");//$NON-NLS-1$
fInternalPack4= fInternalJarRoot.getPackageFragment("pack3.pack4");//$NON-NLS-1$
fInternalPack5= fInternalJarRoot.getPackageFragment("pack3.pack5");//$NON-NLS-1$
fInternalPack6= fInternalJarRoot.getPackageFragment("pack3.pack5.pack6");//$NON-NLS-1$
fInternalPack10= fInternalJarRoot.getPackageFragment("pack3.pack4.pack10");//$NON-NLS-1$
fInternalPackMetaInf= fInternalJarRoot.getPackageFragment("META-INF");//$NON-NLS-1$
//-----------------Set up source folder--------------------------
fRoot2= JavaProjectHelper.addSourceContainer(fJProject2, "src2");//$NON-NLS-1$
fPackDefault2= fRoot2.createPackageFragment("",true,null);//$NON-NLS-1$
fPack12= fRoot2.createPackageFragment("pack1", true, null);//$NON-NLS-1$
fPack17= fRoot2.createPackageFragment("pack1.pack7",true,null);//$NON-NLS-1$
fPack32= fRoot2.createPackageFragment("pack3",true,null);//$NON-NLS-1$
fPack42= fRoot2.createPackageFragment("pack3.pack4", true,null);//$NON-NLS-1$
fPack52= fRoot2.createPackageFragment("pack3.pack5",true,null);//$NON-NLS-1$
fPack62= fRoot2.createPackageFragment("pack3.pack5.pack6", true, null);//$NON-NLS-1$
fPack102=fRoot2.createPackageFragment("pack3.pack4.pack10", true, null);//$NON-NLS-1$
fCU12= fPack12.createCompilationUnit("Object.java", "", true, null);//$NON-NLS-1$//$NON-NLS-2$
fCU22= fPack62.createCompilationUnit("Object.java","", true, null);//$NON-NLS-1$//$NON-NLS-2$
//set up project #2: file system structure with in a source folder
// JavaProjectHelper.addVariableEntry(fJProject2, new Path("JRE_LIB_TEST"), null, null);
//----------------Set up source folder--------------------------
fRoot1= JavaProjectHelper.addSourceContainer(fJProject2, "src1"); //$NON-NLS-1$
fPackDefault1= fRoot1.createPackageFragment("",true,null); //$NON-NLS-1$
fPack21= fRoot1.createPackageFragment("pack2", true, null);//$NON-NLS-1$
fPack31= fRoot1.createPackageFragment("pack3",true,null);//$NON-NLS-1$
fPack41= fRoot1.createPackageFragment("pack3.pack4", true,null);//$NON-NLS-1$
fPack91= fRoot1.createPackageFragment("pack3.pack4.pack9",true,null);//$NON-NLS-1$
fPack51= fRoot1.createPackageFragment("pack3.pack5",true,null);//$NON-NLS-1$
fPack61= fRoot1.createPackageFragment("pack3.pack5.pack6", true, null);//$NON-NLS-1$
fPack81= fRoot1.createPackageFragment("pack3.pack8", true, null);//$NON-NLS-1$
fCU11= fPack21.createCompilationUnit("Object.java", "", true, null);//$NON-NLS-1$//$NON-NLS-2$
fCU21= fPack61.createCompilationUnit("Object.java","", true, null);//$NON-NLS-1$//$NON-NLS-2$
//set up the mock view
setUpMockView();
}
public void setUpMockView() throws Exception{
fWorkbench= PlatformUI.getWorkbench();
assertNotNull(fWorkbench);
fPage= fWorkbench.getActiveWorkbenchWindow().getActivePage();
assertNotNull(fPage);
//just testing to make sure my part can be created
IViewPart myPart= new MockPluginView();
((MockPluginView)myPart).setListState(true);
myPart= fPage.showView("org.eclipse.jdt.ui.tests.browsing.MockPluginView");//$NON-NLS-1$
if (myPart instanceof MockPluginView) {
fMyPart= (MockPluginView) myPart;
fProvider= (IStructuredContentProvider)fMyPart.getTreeViewer().getContentProvider();
//create map and set listener
fProvider.inputChanged(null,null,fJProject2);
JavaCore.removeElementChangedListener((IElementChangedListener) fProvider);
} else assertTrue("Unable to get view",false);//$NON-NLS-1$
assertNotNull(fProvider);
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
JavaProjectHelper.delete(fJProject1);
JavaProjectHelper.delete(fJProject2);
fProvider.inputChanged(null, null, null);
fPage.hideView(fMyPart);
fMyPart.dispose();
if (fEnableAutoBuildAfterTesting)
JavaProjectHelper.setAutoBuilding(true);
super.tearDown();
}
private boolean compareArrays(Object[] children, Object[] expectedChildren) {
if(children.length!=expectedChildren.length)
return false;
for (int i= 0; i < children.length; i++) {
Object child= children[i];
if (child instanceof IJavaElement) {
IJavaElement el= (IJavaElement) child;
if(!contains(el, expectedChildren))
return false;
} else if(child instanceof IResource){
IResource res = (IResource) child;
if(!contains(res, expectedChildren)){
return false;
}
} else if (child instanceof LogicalPackage){
if(!canFindEqualCompoundElement((LogicalPackage)child, expectedChildren))
return false;
}
}
return true;
}
private boolean canFindEqualCompoundElement(LogicalPackage compoundElement, Object[] expectedChildren) {
for (int i= 0; i < expectedChildren.length; i++) {
Object object= expectedChildren[i];
if(object instanceof LogicalPackage){
LogicalPackage el= (LogicalPackage) object;
if(el.getElementName().equals(compoundElement.getElementName()) && (el.getJavaProject().equals(compoundElement.getJavaProject()))){
if(compareArrays(el.getFragments(), compoundElement.getFragments()))
return true;
}
}
}
return false;
}
private boolean contains(IResource res, Object[] expectedChildren) {
for (int i= 0; i < expectedChildren.length; i++) {
Object object= expectedChildren[i];
if (object instanceof IResource) {
IResource expres= (IResource) object;
if(expres.equals(res))
return true;
}
}
return false;
}
private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
for (int i= 0; i < expectedChildren.length; i++) {
Object object= expectedChildren[i];
if (object instanceof IJavaElement) {
IJavaElement expfrag= (IJavaElement) object;
if(expfrag.equals(fragment))
return true;
}
}
return false;
}
private void pushDisplay() {
boolean moreToDispatch= true;
while (moreToDispatch) {
Control ctrl= fMyPart.getTreeViewer().getControl();
if (ctrl != null && !ctrl.isDisposed()) {
moreToDispatch= fMyPart.getTreeViewer().getControl().getDisplay().readAndDispatch();
} else
moreToDispatch= false;
}
}
}