diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test20/Test20.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test20/Test20.zip new file mode 100644 index 00000000000..d6ee8e4b197 Binary files /dev/null and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test20/Test20.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test21/Test21.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test21/Test21.zip new file mode 100644 index 00000000000..c7977ccf9a2 Binary files /dev/null and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/toolChainConversionProjects/test21/Test21.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProject30MakefileTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProject30MakefileTests.java index dd26b516e94..15632862633 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProject30MakefileTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProject30MakefileTests.java @@ -567,7 +567,7 @@ public class ManagedProject30MakefileTests extends TestCase { Path.fromOSString("objects.mk"), Path.fromOSString("sources.mk"), Path.fromOSString("module/subdir.mk"), - Path.fromOSString("sources/subdir.mk")}; + Path.fromOSString("Sources/subdir.mk")}; IProject[] projects = createProjects("CDTFortranTest2", null, null, true); buildProjects(projects, makefiles); } diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/MultiVersionSupportTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/MultiVersionSupportTests.java index 500f14c8140..c261c01d206 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/MultiVersionSupportTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/MultiVersionSupportTests.java @@ -12,6 +12,14 @@ package org.eclipse.cdt.managedbuilder.core.tests; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; import java.util.Map; import junit.framework.Test; @@ -31,16 +39,24 @@ import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature; +import org.eclipse.cdt.managedbuilder.projectconverter.UpdateManagedProjectManager; +import org.eclipse.cdt.managedbuilder.testplugin.CTestPlugin; +import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceDescription; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.ui.dialogs.IOverwriteQuery; public class MultiVersionSupportTests extends TestCase { @@ -62,6 +78,8 @@ public class MultiVersionSupportTests extends TestCase { suite.addTest(new MultiVersionSupportTests("testConfigurationDescription")); //$NON-NLS-1$ suite.addTest(new MultiVersionSupportTests("testVersionInfo")); //$NON-NLS-1$ suite.addTest(new MultiVersionSupportTests("testVersionsSupportedAttribute")); //$NON-NLS-1$ + suite.addTest(new MultiVersionSupportTests("testToolChainConversion_CDT20")); //$NON-NLS-1$ + suite.addTest(new MultiVersionSupportTests("testToolChainConversion_CDT21")); //$NON-NLS-1$ //$JUnit-END$ return suite; @@ -374,4 +392,164 @@ public class MultiVersionSupportTests extends TestCase { cfgs = mproj.getConfigurations(); assertNotNull(cfgs); } + + public void testToolChainConversion_CDT20() throws Exception { + // Pass CDT version as '2.0', and 'true' to update Project + doTestProjectUpdate("2.0", true); //$NON-NLS-1$ + + String tmpDir = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ + + File inputFile = new File(tmpDir + "/converterOutput20.txt"); //$NON-NLS-1$ + try { + assertTrue(inputFile.exists()); + + String expectedContent = "Converter for CDT 2.0 Project is invoked"; //$NON-NLS-1$ + + BufferedReader data = new BufferedReader(new FileReader(inputFile)); + String actualContent; + + if ((actualContent = data.readLine()) != null) { + assertEquals(actualContent,expectedContent); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testToolChainConversion_CDT21() throws Exception { + // Pass CDT version as '2.1', and 'true' to update Project + doTestProjectUpdate("2.1", true); //$NON-NLS-1$ + + String tmpDir = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ + + File inputFile = new File(tmpDir + "/converterOutput21.txt"); //$NON-NLS-1$ + try { + assertTrue(inputFile.exists()); + + String expectedContent = "Converter for CDT 2.1 Project is invoked"; //$NON-NLS-1$ + + BufferedReader data = new BufferedReader(new FileReader(inputFile)); + String actualContent; + + if ((actualContent = data.readLine()) != null) { + assertEquals(actualContent,expectedContent); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + + private IProject getCDT_TestProject(String cdtVersion) { + + IProject project = null; + File file = null; + + if (cdtVersion.equalsIgnoreCase("2.0")) { //$NON-NLS-1$ + file = CTestPlugin.getFileInPlugin(new Path( + "resources/toolChainConversionProjects/test20")); //$NON-NLS-1$ + } else if (cdtVersion.equals("2.1")) { //$NON-NLS-1$ + file = CTestPlugin.getFileInPlugin(new Path( + "resources/toolChainConversionProjects/test21")); //$NON-NLS-1$ + } + + if (file == null) { + fail("Test project directory " + file.getName() //$NON-NLS-1$ + + " is missing."); //$NON-NLS-1$ + return null; + } + + File projectZips[] = file.listFiles(new FileFilter() { + public boolean accept(File pathname) { + if (pathname.isDirectory()) + return false; + return true; + } + }); + + ArrayList projectList = new ArrayList(projectZips.length); + assertEquals(projectZips.length, 1); + + try { + String projectName = projectZips[0].getName(); + if (!projectName.endsWith(".zip")) + fail("No projects found in test 'toolChainConversionProjects' project directory " //$NON-NLS-1$ + + file.getName() + + ". The .zip file may be missing or corrupt."); //$NON-NLS-1$ + + projectName = projectName.substring(0, projectName.length() + - ".zip".length()); //$NON-NLS-1$ + if (projectName.length() == 0) + fail("No projects found in test 'toolChainConversionProjects' project directory " //$NON-NLS-1$ + + file.getName() + + ". The .zip file may be missing or corrupt."); //$NON-NLS-1$ + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + // Path path = (Path) root.getLocation(); + IPath location = new Path( root.getLocation().toString() ); + project = ManagedBuildTestHelper.createProject( + projectName, projectZips[0], null, null); + if (project != null) + projectList.add(project); + } catch (Exception e) { + System.out.println("Exception Occured."); //$NON-NLS-1$ + } + + if (projectList.size() == 0) { + fail("No projects found in test project directory " //$NON-NLS-1$ + + file.getName() + + ". The .zip file may be missing or corrupt."); //$NON-NLS-1$ + return null; + } + return project; + } + + private void doTestProjectUpdate(String cdtVersion, boolean updateProject) { + IOverwriteQuery queryALL = new IOverwriteQuery(){ + public String queryOverwrite(String file) { + return ALL; + }}; + IOverwriteQuery queryNOALL = new IOverwriteQuery(){ + public String queryOverwrite(String file) { + return NO_ALL; + }}; + + UpdateManagedProjectManager.setUpdateProjectQuery(updateProject ? queryALL : queryNOALL); + + final IProject project = getCDT_TestProject(cdtVersion); + if (project == null) + return; + + // the project conversion occurs the first time + // ManagedBuildManager.getBuildInfo gets called + // If requires it also invokes converters for the project. + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); + + // check whether the managed build info is converted + boolean isCompatible = UpdateManagedProjectManager + .isCompatibleProject(info); + assertTrue(isCompatible); + + if (isCompatible) { + // check for correct update + if (!updateProject) { + // TODO: if the user has chosen not to update the + // project the + // .cdtbuild file should not change + } else { + // Make sure that we have a valid project + if (info == null || info.getManagedProject() == null + || info.getManagedProject().isValid() == false) { + fail("the project \"" + project.getName() //$NON-NLS-1$ + + "\" was not properly converted"); //$NON-NLS-1$ + } + } + } + ManagedBuildTestHelper.removeProject(project.getName()); + } + } diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter20.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter20.java new file mode 100644 index 00000000000..b8417809312 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter20.java @@ -0,0 +1,30 @@ +package org.eclipse.cdt.managedbuilder.core.tests; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.eclipse.cdt.managedbuilder.core.IBuildObject; +import org.eclipse.cdt.managedbuilder.core.IConvertManagedBuildObject; + +public class ProjectConverter20 implements IConvertManagedBuildObject { + + public IBuildObject convert(IBuildObject buildObj, String fromId, + String toId, boolean isConfirmed) { + + String tmpDir = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ + + File outputFile = new File(tmpDir + "/converterOutput20.txt"); //$NON-NLS-1$ + try { + FileWriter out = new FileWriter(outputFile); + out.write("Converter for CDT 2.0 Project is invoked"); //$NON-NLS-1$ + out.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + // e.printStackTrace(); + System.out.println("Exception raised."); //$NON-NLS-1$ + } + return buildObj; + } + +} diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter21.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter21.java new file mode 100644 index 00000000000..2e87e470443 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ProjectConverter21.java @@ -0,0 +1,30 @@ +package org.eclipse.cdt.managedbuilder.core.tests; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.eclipse.cdt.managedbuilder.core.IBuildObject; +import org.eclipse.cdt.managedbuilder.core.IConvertManagedBuildObject; + +public class ProjectConverter21 implements IConvertManagedBuildObject { + + public IBuildObject convert(IBuildObject buildObj, String fromId, + String toId, boolean isConfirmed) { + + String tmpDir = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ + + File outputFile = new File(tmpDir + "/converterOutput21.txt"); //$NON-NLS-1$ + try { + FileWriter out = new FileWriter(outputFile); + out.write("Converter for CDT 2.1 Project is invoked"); //$NON-NLS-1$ + out.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + // e.printStackTrace(); + System.out.println("Exception raised."); //$NON-NLS-1$ + } + return buildObj; + } + +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java index 8457e42e83d..7e67debf426 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java @@ -792,7 +792,7 @@ public class Builder extends BuildObject implements IBuilder { * converters and stores them. */ - private void checkForMigrationSupport() { + public void checkForMigrationSupport() { String tmpId = null; boolean isExists = false; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java index a191d116f48..47a146ca2ef 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java @@ -2442,7 +2442,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory { * converters and stores them. */ - private void checkForMigrationSupport() { + public void checkForMigrationSupport() { boolean isExists = false; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java index bc6f9877958..694560c7cc5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java @@ -1475,7 +1475,7 @@ public class ToolChain extends HoldsOptions implements IToolChain { * converters and adds them to the list. */ - private void checkForMigrationSupport() { + public void checkForMigrationSupport() { String tmpId = null; boolean isExists = false; @@ -1507,7 +1507,7 @@ public class ToolChain extends HoldsOptions implements IToolChain { // toolChain version is supported String baseId = ManagedBuildManager.getIdFromIdAndVersion(superClassId); - String version = ManagedBuildManager.getVersionFromIdAndVersion(superClassId); + String version = getVersionFromId().toString(); IToolChain[] toolChainElements = (IToolChain[]) subMap.values().toArray(); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java index 597572c2abd..8c337c4c2d2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java @@ -34,7 +34,10 @@ import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.IToolReference; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; +import org.eclipse.cdt.managedbuilder.internal.core.Builder; import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.internal.core.Tool; +import org.eclipse.cdt.managedbuilder.internal.core.ToolChain; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; @@ -216,7 +219,8 @@ class UpdateManagedProject20 { // Convert the tool references IToolChain toolChain = newConfig.getToolChain(); - + ((ToolChain)toolChain).checkForMigrationSupport(); + if(targetEl.hasAttribute(ITarget.OS_LIST)){ String oses = targetEl.getAttribute(ITarget.OS_LIST); String osList[] = oses.split(","); //$NON-NLS-1$ @@ -271,6 +275,12 @@ class UpdateManagedProject20 { builder.setArguments(makeArguments); } +// by now if a builder is going to be created, it will have been + Builder builder = (Builder)toolChain.getBuilder(); + if (! builder.isExtensionElement()) { + builder.checkForMigrationSupport(); + } + NodeList toolRefNodes = oldConfig.getElementsByTagName(IConfigurationV2.TOOLREF_ELEMENT_NAME); for (int refIndex = 0; refIndex < toolRefNodes.getLength(); ++refIndex) { try{ @@ -334,6 +344,9 @@ class UpdateManagedProject20 { ConverterMessages.getFormattedString("UpdateManagedProject20.5",toolId), null)); //$NON-NLS-1$ } + // Check for migration support + ((Tool)tool).checkForMigrationSupport(); + //the tool found, proceed with conversion ... if(oldToolRef.hasAttribute(IToolReference.COMMAND))