/******************************************************************************* * Copyright (c) 2000, 2015 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 * Alexander Kurtakov <akurtako@redhat.com> - Bug 459343 *******************************************************************************/ package org.eclipse.core.tests.resources.session; import java.util.ArrayList; import java.util.Map; import junit.framework.Test; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.tests.internal.builders.DeltaVerifierBuilder; import org.eclipse.core.tests.internal.builders.TestBuilder; import org.eclipse.core.tests.resources.AutomatedTests; import org.eclipse.core.tests.resources.WorkspaceSessionTest; import org.eclipse.core.tests.session.WorkspaceSessionTestSuite; /** * When a builder is run, it reports what projects it is interested in obtaining * deltas for the next time it is run. This class tests that this list of "interesting" * projects is correctly saved between sessions. */ public class TestInterestingProjectPersistence extends WorkspaceSessionTest { //various resource handles private IProject project1; private IProject project2; private IProject project3; private IProject project4; private IFile file1; private IFile file2; private IFile file3; private IFile file4; /** * Constructor for TestInterestingProjectPersistence. */ public TestInterestingProjectPersistence() { super(); } /** * Constructor for TestInterestingProjectPersistence. * @param name */ public TestInterestingProjectPersistence(String name) { super(name); } /** * Sets the workspace autobuilding to the desired value. */ protected void setAutoBuilding(boolean value) throws CoreException { IWorkspace workspace = getWorkspace(); if (workspace.isAutoBuilding() == value) { return; } IWorkspaceDescription desc = workspace.getDescription(); desc.setAutoBuilding(value); workspace.setDescription(desc); } /* * @see TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); IWorkspaceRoot root = getWorkspace().getRoot(); project1 = root.getProject("Project1"); project2 = root.getProject("Project2"); project3 = root.getProject("Project3"); project4 = root.getProject("Project4"); file1 = project1.getFile("File1"); file2 = project2.getFile("File2"); file3 = project3.getFile("File3"); file4 = project4.getFile("File4"); } /** * Create projects, setup a builder, and do an initial build. */ public void test1() { IResource[] resources = {project1, project2, project3, project4, file1, file2, file3, file4}; ensureExistsInWorkspace(resources, true); try { //turn off autobuild IWorkspace workspace = getWorkspace(); IWorkspaceDescription desc = workspace.getDescription(); desc.setAutoBuilding(false); workspace.setDescription(desc); //create a project and configure builder IProjectDescription description = project1.getDescription(); ICommand command = description.newCommand(); Map<String, String> args = command.getArguments(); args.put(TestBuilder.BUILD_ID, "Project1Build1"); command.setBuilderName(DeltaVerifierBuilder.BUILDER_NAME); command.setArguments(args); description.setBuildSpec(new ICommand[] {command}); project1.setDescription(description, getMonitor()); //initial build requesting no projects project1.build(IncrementalProjectBuilder.FULL_BUILD, getMonitor()); getWorkspace().save(true, getMonitor()); } catch (CoreException e) { fail("2.0", e); } } /** * Check that "no interesting builders" case suceeded, then ask for more projects. */ public void test2() { DeltaVerifierBuilder builder = DeltaVerifierBuilder.getInstance(); builder.checkDeltas(new IProject[] {project1, project2, project3, project4}); builder.requestDeltas(new IProject[] {project1, project2, project4}); try { file1.setContents(getRandomContents(), true, true, getMonitor()); project1.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor()); ArrayList<IProject> received = builder.getReceivedDeltas(); //should have received only a delta for project1 assertEquals("1.0", 1, received.size()); assertTrue("1.1", received.contains(project1)); //should be no empty deltas ArrayList<IProject> empty = builder.getEmptyDeltas(); assertEquals("1.2", 0, empty.size()); //save getWorkspace().save(true, getMonitor()); } catch (CoreException e) { fail("1.99", e); } } /** * Check that interesting projects (1, 2, and 4) were stored and retrieved */ public void test3() { DeltaVerifierBuilder builder = DeltaVerifierBuilder.getInstance(); builder.checkDeltas(new IProject[] {project1, project2, project3, project4}); try { //dirty projects 1, 2, 3 file1.setContents(getRandomContents(), true, true, getMonitor()); file2.setContents(getRandomContents(), true, true, getMonitor()); file3.setContents(getRandomContents(), true, true, getMonitor()); //build project1.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor()); ArrayList<IProject> received = builder.getReceivedDeltas(); //should have received deltas for 1, 2, and 4 assertEquals("1.0", 3, received.size()); assertTrue("1.1", received.contains(project1)); assertTrue("1.2", received.contains(project2)); assertTrue("1.3", !received.contains(project3)); assertTrue("1.4", received.contains(project4)); //delta for project4 should be empty ArrayList<IProject> empty = builder.getEmptyDeltas(); assertEquals("1.2", 1, empty.size()); assertTrue("1.3", empty.contains(project4)); //save getWorkspace().save(true, getMonitor()); } catch (CoreException e) { fail("1.99", e); } } public static Test suite() { return new WorkspaceSessionTestSuite(AutomatedTests.PI_RESOURCES_TESTS, TestInterestingProjectPersistence.class); } }