/*******************************************************************************
* Copyright (c) 2011 Broadcom 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:
* Broadcom Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core.regressions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.eclipse.cdt.managedbuilder.testplugin.AbstractBuilderTest;
import org.eclipse.cdt.managedbuilder.testplugin.ResourceDeltaVerifier;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
/**
* Tests that removing the last source file from a directory
* causes the subdir.mk to be regenerated, and associated dervied
* files should be deleted.
*/
public class Bug_303953 extends AbstractBuilderTest {
public void testBuildAfterSourcefileDelete() throws CoreException {
setWorkspace("regressions");
final IProject app = loadProject("helloworldC");
List<IResource> buildOutputResources = new ArrayList<IResource>();
buildOutputResources.addAll(getProjectBuildExeResources("helloworldC", "Debug", "src/helloworldC"));
// Ensure Debug is the active configuration
setActiveConfigurationByName(app, "Debug");
ResourceDeltaVerifier verifier = new ResourceDeltaVerifier();
verifier.addExpectedChange(buildOutputResources.toArray(new IResource[buildOutputResources.size()]), IResourceDelta.ADDED, IResourceDelta.NO_CHANGE);
verifier.addIgnore(new IResource[]{
getWorkspace().getRoot(), app,
app.getFile(".project")});
verifyBuild(app, IncrementalProjectBuilder.FULL_BUILD, verifier);
// Delete helloworldC
IFile srcFile = app.getFile("src/helloworldC.c");
assertTrue("1.1", srcFile.exists());
srcFile.delete(false, null);
// Build again
// - derived files from helloworldC.c should be removed
// - subdir.mk should be changed
// - ignore other changes in the build tree (not the subject of this bug...)
verifier = new ResourceDeltaVerifier();
// These files should be removed
IResource[] removed = new IResource[] {app.getFile("Debug/src/helloworldC.o"),
app.getFile("Debug/src/helloworldC.d")};
verifier.addExpectedChange(removed, IResourceDelta.REMOVED, IResourceDelta.NO_CHANGE);
// subdir.mk has been updated
IResource[] expected = new IResource[] {app.getFile("Debug/src/subdir.mk")};
verifier.addExpectedChange(expected, IResourceDelta.CHANGED, IResourceDelta.CONTENT);
// Ignore other resources
Collection<IResource> ignored = getProjectBuildExeResources("helloworldC", "Debug", "src/helloworldC");
ignored.removeAll(Arrays.asList(removed));
ignored.removeAll(Arrays.asList(expected));
ignored.add(getWorkspace().getRoot());
ignored.add(app);
verifier.addIgnore(ignored.toArray(new IResource[ignored.size()]));
verifyBuild(app, IncrementalProjectBuilder.INCREMENTAL_BUILD, verifier);
}
}