blob: fe3bbe03ebb54718630530d983f7f0e8bc9839c7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.resources.regression;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.tests.internal.builders.AbstractBuilderTest;
import org.eclipse.core.tests.resources.usecase.SignaledBuilder;
public class IProjectTest extends AbstractBuilderTest {
public static Test suite() {
return new TestSuite(IProjectTest.class);
}
public IProjectTest() {
super("");
}
public IProjectTest(String name) {
super(name);
}
public void test_1G0XIMA() throws CoreException {
/* common objects */
IProject project = getWorkspace().getRoot().getProject("MyProject");
project.create(null);
project.open(null);
/* define a visitor that renames all resources it visits */
IResourceVisitor renameVisitor = resource -> {
if (!resource.exists()) {
return false;
}
IPath path = resource.getFullPath();
path = path.removeLastSegments(1);
long timestamp = System.currentTimeMillis();
path = path.append(resource.getName() + " renamed at " + timestamp);
resource.move(path, false, null);
return true;
};
/* test */
try {
project.accept(renameVisitor);
} catch (CoreException e) {
fail("1.0", e);
}
// cleanup
project.delete(true, getMonitor());
}
public void test_1G5I6PV() throws CoreException {
/* common objects */
IProject project = getWorkspace().getRoot().getProject("MyProject");
project.create(getMonitor());
project.open(getMonitor());
/* test */
try {
project.setLocal(true, IResource.DEPTH_ZERO, getMonitor());
} catch (Exception e) {
fail("1.0", e);
}
// cleanup
project.delete(true, getMonitor());
}
/**
* 1GC2FKV: ITPCORE:BuildManager triggers incremental build when doing full builds
*/
public void testAutoBuild_1GC2FKV() {
// set auto build OFF
try {
IWorkspaceDescription description = getWorkspace().getDescription();
description.setAutoBuilding(false);
getWorkspace().setDescription(description);
} catch (CoreException e) {
fail("0.0", e);
}
// create project with a builder
IProject projectONE = getWorkspace().getRoot().getProject("Project_ONE");
try {
IProjectDescription prjDescription = getWorkspace().newProjectDescription("ProjectONE");
ICommand command = prjDescription.newCommand();
command.setBuilderName(SignaledBuilder.BUILDER_ID);
prjDescription.setBuildSpec(new ICommand[] {command});
projectONE.create(prjDescription, getMonitor());
projectONE.open(getMonitor());
} catch (CoreException e) {
fail("0.1", e);
}
// create project with a builder
IProject projectTWO = getWorkspace().getRoot().getProject("Project_TWO");
try {
IProjectDescription prjDescription = getWorkspace().newProjectDescription("Project_TWO");
ICommand command = prjDescription.newCommand();
command.setBuilderName(SignaledBuilder.BUILDER_ID);
prjDescription.setBuildSpec(new ICommand[] {command});
projectTWO.create(prjDescription, getMonitor());
projectTWO.open(getMonitor());
} catch (CoreException e) {
fail("0.2", e);
}
// set auto build ON
try {
IWorkspaceDescription description = getWorkspace().getDescription();
description.setAutoBuilding(true);
getWorkspace().setDescription(description);
getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, getMonitor());
waitForBuild();
} catch (CoreException e) {
fail("0.0", e);
}
SignaledBuilder projectONEbuilder = SignaledBuilder.getInstance(projectONE);
SignaledBuilder projectTWObuilder = SignaledBuilder.getInstance(projectTWO);
projectONEbuilder.reset();
projectTWObuilder.reset();
try {
projectONE.build(IncrementalProjectBuilder.FULL_BUILD, null);
waitForBuild();
} catch (CoreException e) {
fail("1.0", e);
}
assertTrue("1.1", projectONEbuilder.wasExecuted());
assertTrue("1.2", !projectTWObuilder.wasExecuted());
projectONEbuilder.reset();
projectTWObuilder.reset();
try {
projectTWO.build(IncrementalProjectBuilder.FULL_BUILD, SignaledBuilder.BUILDER_ID, null, null);
waitForBuild();
} catch (CoreException e) {
fail("2.0", e);
}
assertTrue("2.1", !projectONEbuilder.wasExecuted());
assertTrue("2.2", projectTWObuilder.wasExecuted());
projectONEbuilder.reset();
projectTWObuilder.reset();
try {
projectTWO.touch(null);
waitForBuild();
} catch (CoreException e) {
fail("3.0", e);
}
//project one won't be executed because project didn't change.
assertTrue("3.1", !projectONEbuilder.wasExecuted());
assertTrue("3.2", projectTWObuilder.wasExecuted());
}
/*
* Create a project with resources already existing on disk and ensure
* that the resources are automatically discovered and brought into the workspace.
*/
public void testBug78711() {
String name = getUniqueString();
IProject project = getWorkspace().getRoot().getProject(name);
IFolder folder = project.getFolder("folder");
IFile file1 = project.getFile("file1.txt");
IFile file2 = folder.getFile("file2.txt");
IPath location = Platform.getLocation().append(project.getFullPath());
location.toFile().mkdirs();
// create in file-system
location.append(folder.getName()).toFile().mkdirs();
createFileInFileSystem(location.append(folder.getName()).append(file2.getName()));
createFileInFileSystem(location.append(file1.getName()));
// create
try {
project.create(getMonitor());
project.open(getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
// verify discovery
assertTrue("2.0", project.isAccessible());
assertTrue("2.1", folder.exists());
assertTrue("2.2", file1.exists());
assertTrue("2.3", file2.exists());
}
/**
* 1GDW1RX: ITPCORE:ALL - IResource.delete() without force not working correctly
*/
public void testDelete_1GDW1RX() {
IProject project = getWorkspace().getRoot().getProject("MyProject");
try {
project.create(getMonitor());
project.open(getMonitor());
} catch (CoreException e) {
fail("0.0", e);
}
String[] paths = new String[] {"/1/", "/1/1", "/1/2", "/1/3", "/2/", "/2/1"};
IResource[] resources = buildResources(project, paths);
ensureExistsInWorkspace(resources, true);
IFolder folder = project.getFolder("folder");
ensureExistsInFileSystem(folder);
IFile file = folder.getFile("MyFile");
ensureExistsInFileSystem(file);
try {
project.delete(false, getMonitor());
fail("3.0");
} catch (CoreException e) {
// expected
}
// clean up
try {
project.delete(true, true, getMonitor());
} catch (CoreException e) {
fail("20.0", e);
}
}
public void testRefreshDotProject() {
String name = getUniqueString();
IProject project = getWorkspace().getRoot().getProject(name);
IFile dotProject = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
try {
project.create(null);
project.open(null);
touchInFilesystem(dotProject);
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
fail("0.99", e);
}
try {
IProjectDescription description = project.getDescription();
description.setComment("Changed description");
project.setDescription(description, IResource.NONE, null);
} catch (CoreException e) {
fail("1.99", e);
}
}
}