/*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.settings.model;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
public class ProjectCreationStateTests extends BaseTestCase{
private static final String PROJ_NAME_PREFIX = "ProjectCreationStateTests_";
private IProject p1, p2, p3, p4;
private Listener listener;
private class Listener implements ICProjectDescriptionListener {
private boolean fIsCreationCompletedNotified;
private boolean fIsCreating;
private boolean fIsNotified;
private String fProjName;
Listener(String projName){
init();
fProjName = projName;
}
public void handleEvent(CProjectDescriptionEvent event) {
if(!event.getProject().getName().equals(fProjName))
return;
fIsNotified = true;
boolean creating = event.getNewCProjectDescription().isCdtProjectCreating();
ICDescriptionDelta delta = event.getProjectDelta();
boolean notified = delta != null ? (delta.getChangeFlags() & ICDescriptionDelta.PROJECT_CREAION_COMPLETED) != 0 : false;
if(creating)
assertTrue(fIsCreating);
if(notified)
assertFalse(fIsCreationCompletedNotified);
fIsCreating = creating;
fIsCreationCompletedNotified = notified;
}
void init(){
fIsCreating = true;
fIsCreationCompletedNotified = false;
resetNotified();
}
boolean isCreating(){
return fIsCreating;
}
boolean isCreationCompletedNotified(){
return fIsCreationCompletedNotified;
}
boolean isNotified(){
boolean notified = fIsNotified;
resetNotified();
return notified;
}
void resetNotified(){
fIsNotified = false;
}
}
public static TestSuite suite() {
return suite(ProjectCreationStateTests.class, "_");
}
protected void setUp() throws Exception {
// p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER);
}
private void initListener(String projName){
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
if(listener != null)
mngr.removeCProjectDescriptionListener(listener);
listener = new Listener(projName);
mngr.addCProjectDescriptionListener(listener, CProjectDescriptionEvent.APPLIED);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
}
public void testProjectCreatingState() throws Exception {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
String projName = PROJ_NAME_PREFIX + "a";
initListener(projName);
ICProject cp1 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, true);
IProject project = cp1.getProject();
p1 = project;
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
listener.resetNotified();
ICProjectDescription des = mngr.getProjectDescription(project, false);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, true);
assertTrue(des.isCdtProjectCreating());
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
ICProjectDescription des2 = mngr.getProjectDescription(project, true);
des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]);
mngr.setProjectDescription(project, des2);
des2 = mngr.getProjectDescription(project, false);
assertTrue(des2.isCdtProjectCreating());
des2 = mngr.getProjectDescription(project, true);
assertTrue(des2.isCdtProjectCreating());
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
listener.resetNotified();
des.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des.getConfigurations()[0]);
des.setCdtProjectCreated();
des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]);
mngr.setProjectDescription(project, des);
assertTrue(listener.isNotified());
assertTrue(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
listener.resetNotified();
assertTrue(des2.isCdtProjectCreating());
mngr.setProjectDescription(project, des2);
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
listener.resetNotified();
des2 = mngr.getProjectDescription(project, false);
assertFalse(des2.isCdtProjectCreating());
des2 = mngr.getProjectDescription(project, true);
assertFalse(des2.isCdtProjectCreating());
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
des2.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), des2.getConfigurations()[0]);
mngr.setProjectDescription(project, des2);
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
listener.resetNotified();
}
public void testCreateProjectDescriptionForInexistingDes() throws Exception {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
String projName = PROJ_NAME_PREFIX + "b";
initListener(projName);
IWorkspace wsp = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = wsp.getRoot();
IProject project = root.getProject(projName);
p2 = project;
project.create(null);
project.open(null);
CProjectHelper.addNatureToProject(project, CProjectNature.C_NATURE_ID, null);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
ICProjectDescription des = mngr.getProjectDescription(project, false);
assertNull(des);
des = mngr.getProjectDescription(project, true);
assertNull(des);
des = mngr.createProjectDescription(project, true);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNull(des);
des = mngr.getProjectDescription(project, true);
assertNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, false);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNull(des);
des = mngr.getProjectDescription(project, true);
assertNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, true, true);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNull(des);
des = mngr.getProjectDescription(project, true);
assertNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, false, true);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNull(des);
des = mngr.getProjectDescription(project, true);
assertNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
}
public void testCreateProjectDescriptionForCreatingDes() throws Exception {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
String projName = PROJ_NAME_PREFIX + "c";
initListener(projName);
ICProject cp3 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, true);
IProject project = cp3.getProject();
p3 = project;
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
ICProjectDescription des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
des = mngr.createProjectDescription(project, true);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, false);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, true, true);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
des = mngr.createProjectDescription(project, false, true);
assertTrue(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertTrue(listener.isCreating());
}
public void testCreateProjectDescriptionForCreatedDes() throws Exception {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
String projName = PROJ_NAME_PREFIX + "d";
initListener(projName);
ICProject cp4 = CProjectHelper.createNewStileCProject(projName, IPDOMManager.ID_NO_INDEXER, false);
IProject project = cp4.getProject();
p4 = project;
assertTrue(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
ICProjectDescription des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
des = mngr.createProjectDescription(project, true);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
des = mngr.createProjectDescription(project, false);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
des = mngr.createProjectDescription(project, true, true);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
des = mngr.createProjectDescription(project, false, true);
assertFalse(des.isCdtProjectCreating());
des = mngr.getProjectDescription(project, false);
assertNotNull(des);
des = mngr.getProjectDescription(project, true);
assertNotNull(des);
assertFalse(listener.isNotified());
assertFalse(listener.isCreationCompletedNotified());
assertFalse(listener.isCreating());
}
protected void tearDown() throws Exception {
if(listener != null){
CoreModel.getDefault().getProjectDescriptionManager().removeCProjectDescriptionListener(listener);
listener = null;
}
try {
if(p1 != null){
p1.getProject().delete(true, null);
p1 = null;
}
} catch (CoreException e){
}
try {
if(p2 != null){
p2.getProject().delete(true, null);
p2 = null;
}
} catch (CoreException e){
}
try {
if(p3 != null){
p3.getProject().delete(true, null);
p3 = null;
}
} catch (CoreException e){
}
try {
if(p4 != null){
p4.getProject().delete(true, null);
p4 = null;
}
} catch (CoreException e){
}
}
}