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