/******************************************************************************* * 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); } } }