| /******************************************************************************* |
| * Copyright (c) 2000, 2007 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 - Bits of importWizard from DeprecatedUIWizards |
| * Red Hat, Inc - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.ui.tests.datatransfer; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.lang.reflect.InvocationTargetException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.HashSet; |
| import java.util.zip.ZipFile; |
| |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| 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.IProgressMonitor; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.core.tests.harness.FileSystemHelper; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.viewers.CheckboxTreeViewer; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.WorkbenchPlugin; |
| import org.eclipse.ui.internal.dialogs.ImportExportWizard; |
| import org.eclipse.ui.internal.wizards.datatransfer.WizardProjectsImportPage; |
| import org.eclipse.ui.internal.wizards.datatransfer.WizardProjectsImportPage.ProjectRecord; |
| import org.eclipse.ui.tests.TestPlugin; |
| import org.eclipse.ui.tests.harness.util.DialogCheck; |
| import org.eclipse.ui.tests.harness.util.FileTool; |
| import org.eclipse.ui.tests.harness.util.FileUtil; |
| import org.eclipse.ui.tests.harness.util.UITestCase; |
| |
| public class ImportExistingProjectsWizardTest extends UITestCase { |
| private static final String DATA_PATH_PREFIX = "data/org.eclipse.datatransferArchives/"; |
| private static final String WS_DATA_PREFIX = "data/workspaces"; |
| private static final String WS_DATA_LOCATION = "importExistingFromDirTest"; |
| private static final String ARCHIVE_HELLOWORLD = "helloworld"; |
| private static final String ARCHIVE_FILE_WITH_EMPTY_FOLDER = "EmptyFolderInArchive"; |
| |
| private static final String[] FILE_LIST = new String[] { "test-file-1.txt", |
| "test-file-2.doc", ".project" }; |
| |
| private static final String[] ARCHIVE_FILE_EMPTY_FOLDER_LIST = new String[] { |
| "empty", "folder" }; |
| |
| private String dataLocation = null; |
| |
| private String zipLocation = null; |
| |
| private boolean originalRefreshSetting; |
| |
| public ImportExistingProjectsWizardTest(String testName) { |
| super(testName); |
| } |
| |
| private Shell getShell() { |
| return DialogCheck.getShell(); |
| } |
| |
| protected void doSetUp() throws Exception { |
| super.doSetUp(); |
| originalRefreshSetting = ResourcesPlugin.getPlugin() |
| .getPluginPreferences().getBoolean( |
| ResourcesPlugin.PREF_AUTO_REFRESH); |
| ResourcesPlugin.getPlugin().getPluginPreferences().setValue( |
| ResourcesPlugin.PREF_AUTO_REFRESH, true); |
| } |
| |
| protected void doTearDown() throws Exception { |
| super.doTearDown(); |
| IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot(); |
| IProject[] projects = wsRoot.getProjects(); |
| for (int i = 0; i < projects.length; i++) { |
| FileUtil.deleteProject(projects[i]); |
| } |
| // clean up any data directories created |
| if (dataLocation != null) { |
| File root = new File(dataLocation); |
| if (root.exists()) { |
| FileSystemHelper.clear(root); |
| } |
| } |
| dataLocation = null; // reset for next test |
| |
| // do same for zip location |
| if (zipLocation != null) { |
| File root = new File(zipLocation); |
| if (root.exists()) { |
| // zipLocation is the zip file, not the temp directory it was |
| // copied to |
| FileSystemHelper.clear(root.getParentFile()); |
| } |
| } |
| zipLocation = null; // reset for next test |
| |
| ResourcesPlugin.getPlugin().getPluginPreferences().setValue( |
| ResourcesPlugin.PREF_AUTO_REFRESH, originalRefreshSetting); |
| } |
| |
| private void waitForRefresh() { |
| try { |
| PlatformUI.getWorkbench().getProgressService().busyCursorWhile( |
| new IRunnableWithProgress() { |
| public void run(IProgressMonitor monitor) |
| throws InterruptedException { |
| Job.getJobManager().join( |
| ResourcesPlugin.FAMILY_AUTO_REFRESH, |
| new NullProgressMonitor()); |
| } |
| }); |
| } catch (InvocationTargetException e) { |
| fail(e.getLocalizedMessage()); |
| } catch (InterruptedException e) { |
| fail(e.getLocalizedMessage()); |
| } |
| } |
| |
| public void testFindSingleZip() { |
| try { |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".zip"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| } catch (IOException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testFindSingleTar() { |
| try { |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".tar"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in tar", |
| projectNames.containsAll(projects)); |
| } catch (IOException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testFindSingleDirectory() { |
| try { |
| dataLocation = copyDataLocation(); |
| IPath wsPath = new Path(dataLocation).append("HelloWorld"); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| // We're importing a directory |
| wpip.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip.updateProjectsList(wsPath.toOSString()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in directory", |
| projectNames.containsAll(projects)); |
| } catch (IOException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testDoNotShowProjectWithSameName() { |
| try { |
| dataLocation = copyDataLocation(); |
| IPath wsPath = new Path(dataLocation); |
| |
| FileUtil.createProject("HelloWorld"); |
| |
| WizardProjectsImportPage wpip = getNewWizard(); |
| // We're importing a directory |
| wpip.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip.updateProjectsList(wsPath.toOSString()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertEquals("there should only be the WorldHello project left", 1, |
| projectNames.size()); |
| |
| assertTrue( |
| "HelloWorld project should not be found in project list.", |
| !projectNames.contains("HelloWorld")); |
| } catch (Exception e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testImportSingleZip() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".zip"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| |
| } |
| |
| public void testImportZipWithEmptyFolder() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_FILE_WITH_EMPTY_FOLDER + ".zip"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("A"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], |
| ARCHIVE_FILE_EMPTY_FOLDER_LIST, false); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testImportSingleTar() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".tar"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in tar", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| |
| } |
| |
| public void testImportTarWithEmptyFolder() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_FILE_WITH_EMPTY_FOLDER + ".tar"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("A"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in tar", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported: Expected=1, Actual=" |
| + workspaceProjects.length); |
| IFolder helloFolder = workspaceProjects[0].getFolder("A"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], |
| ARCHIVE_FILE_EMPTY_FOLDER_LIST, false); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| |
| } |
| |
| public void testImportSingleDirectory() { |
| IPath wsPath = null; |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| |
| dataLocation = copyDataLocation(); |
| wsPath = new Path(dataLocation).append("HelloWorld"); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip.updateProjectsList(wsPath.toOSString()); |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in directory", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(false, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testImportSingleDirectoryWithCopy() { |
| IPath wsPath = null; |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| |
| dataLocation = copyDataLocation(); |
| wsPath = new Path(dataLocation).append("HelloWorld"); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip.getCopyCheckbox().setSelection(true); |
| wpip.saveWidgetValues(); |
| wpip.restoreWidgetValues(); |
| |
| wpip.updateProjectsList(wsPath.toOSString()); |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testImportSingleDirectoryWithCopyDeleteProjectKeepContents() { |
| IPath wsPath = null; |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| |
| dataLocation = copyDataLocation(); |
| wsPath = new Path(dataLocation).append("HelloWorld"); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip.getCopyCheckbox().setSelection(true); |
| wpip.saveWidgetValues(); |
| wpip.restoreWidgetValues(); |
| |
| wpip.updateProjectsList(wsPath.toOSString()); |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported: " |
| + workspaceProjects.length + " projects in workspace."); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| // delete projects in workspace but not contents |
| for (int i = 0; i < workspaceProjects.length; i++) { |
| workspaceProjects[i].delete(false, true, null); |
| } |
| assertTrue("Test project not deleted successfully.", root |
| .getProjects().length == 0); |
| |
| // perform same test again, but this time import from this workspace |
| final WizardProjectsImportPage wpip2 = getNewWizard(); |
| HashSet projects2 = new HashSet(); |
| projects2.add("HelloWorld"); |
| |
| wpip2.getProjectFromDirectoryRadio().setSelection((true)); |
| wpip2.getCopyCheckbox().setSelection(true); |
| wpip2.saveWidgetValues(); |
| wpip2.restoreWidgetValues(); |
| |
| wpip2.updateProjectsList(wsPath.toOSString()); |
| ProjectRecord[] selectedProjects2 = wpip2.getValidProjects(); |
| assertTrue("Not all projects were found correctly in zip (2).", |
| selectedProjects2.length == 1); |
| |
| ArrayList projectNames2 = new ArrayList(); |
| for (int i = 0; i < selectedProjects2.length; i++) { |
| projectNames2.add(selectedProjects2[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip (2)", |
| projectNames2.containsAll(projects2)); |
| |
| CheckboxTreeViewer projects2List = wpip2.getProjectsList(); |
| projects2List.setCheckedElements(selectedProjects2); |
| wpip2.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself (2)"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| public void testImportZipDeleteContentsImportAgain() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| URL archiveFile = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".zip"))); |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(archiveFile.getPath()); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 1) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("Project was imported as a folder into itself"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects[0], FILE_LIST, |
| true); |
| |
| // delete projects in workspace but not contents |
| for (int i = 0; i < workspaceProjects.length; i++) { |
| workspaceProjects[i].delete(true, true, null); |
| } |
| assertTrue("Test project not deleted successfully.", root |
| .getProjects().length == 0); |
| |
| // import again |
| IProject[] workspaceProjects2 = root.getProjects(); |
| for (int i = 0; i < workspaceProjects2.length; i++) |
| FileUtil.deleteProject(workspaceProjects2[i]); |
| URL archiveFile2 = Platform.asLocalURL(Platform.find(TestPlugin |
| .getDefault().getBundle(), new Path(DATA_PATH_PREFIX |
| + ARCHIVE_HELLOWORLD + ".zip"))); |
| WizardProjectsImportPage wpip2 = getNewWizard(); |
| HashSet projects2 = new HashSet(); |
| projects2.add("HelloWorld"); |
| |
| wpip2.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip2.updateProjectsList(archiveFile2.getPath()); |
| |
| ProjectRecord[] selectedProjects2 = wpip2.getValidProjects(); |
| ArrayList projectNames2 = new ArrayList(); |
| for (int i = 0; i < selectedProjects2.length; i++) { |
| projectNames2.add(selectedProjects2[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip (2)", |
| projectNames2.containsAll(projects2)); |
| |
| CheckboxTreeViewer projectsList2 = wpip2.getProjectsList(); |
| projectsList2.setCheckedElements(selectedProjects2); |
| wpip2.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects2 = root.getProjects(); |
| if (workspaceProjects2.length != 1) |
| fail("Incorrect Number of projects imported (2)"); |
| IFolder helloFolder2 = workspaceProjects2[0] |
| .getFolder("HelloWorld"); |
| if (helloFolder2.exists()) |
| fail("Project was imported as a folder into itself (2)"); |
| |
| verifyProjectInWorkspace(true, workspaceProjects2[0], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| |
| } |
| |
| public void testImportArchiveMultiProject() { |
| try { |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| zipLocation = copyZipLocation(); |
| |
| IProject[] workspaceProjects = root.getProjects(); |
| for (int i = 0; i < workspaceProjects.length; i++) |
| FileUtil.deleteProject(workspaceProjects[i]); |
| |
| WizardProjectsImportPage wpip = getNewWizard(); |
| HashSet projects = new HashSet(); |
| projects.add("HelloWorld"); |
| projects.add("WorldHello"); |
| |
| wpip.getProjectFromDirectoryRadio().setSelection((false)); // We |
| // want |
| // the |
| // other |
| // one |
| // selected |
| wpip.updateProjectsList(zipLocation); |
| |
| ProjectRecord[] selectedProjects = wpip.getValidProjects(); |
| ArrayList projectNames = new ArrayList(); |
| for (int i = 0; i < selectedProjects.length; i++) { |
| projectNames.add(selectedProjects[i].getProjectName()); |
| } |
| |
| assertTrue("Not all projects were found correctly in zip", |
| projectNames.containsAll(projects)); |
| |
| CheckboxTreeViewer projectsList = wpip.getProjectsList(); |
| projectsList.setCheckedElements(selectedProjects); |
| wpip.createProjects(); // Try importing all the projects we found |
| waitForRefresh(); |
| |
| // "HelloWorld" should be the only project in the workspace |
| workspaceProjects = root.getProjects(); |
| if (workspaceProjects.length != 2) |
| fail("Incorrect Number of projects imported"); |
| IFolder helloFolder = workspaceProjects[0].getFolder("HelloWorld"); |
| if (helloFolder.exists()) |
| fail("HelloWorld was imported as a folder into itself"); |
| IFolder folder2 = workspaceProjects[0].getFolder("WorldHello"); |
| if (folder2.exists()) |
| fail("WorldHello was imported as a folder into itself"); |
| |
| for (int i = 0; i < workspaceProjects.length; i++) |
| verifyProjectInWorkspace(true, workspaceProjects[i], FILE_LIST, |
| true); |
| |
| } catch (IOException e) { |
| fail(e.toString()); |
| } catch (CoreException e) { |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Verify whether or not the imported project is in the current workspace |
| * location (i.e. copy projects was true) or in another workspace location |
| * (i.e. copy projects was false). |
| * |
| * @param inWorkspace |
| * @param project |
| */ |
| private void verifyProjectInWorkspace(final boolean inWorkspace, |
| final IProject project, String[] fileList, boolean isListFiles) { |
| |
| IPath rootLocation = ResourcesPlugin.getWorkspace().getRoot() |
| .getLocation(); |
| IPath projectLocation = project.getLocation(); |
| boolean isProjectInWorkspace = rootLocation.isPrefixOf(projectLocation); |
| if (inWorkspace) { |
| if (!isProjectInWorkspace) |
| fail(project.getName() |
| + " should be in the workspace location: " |
| + rootLocation.toOSString()); |
| } else { |
| if (isProjectInWorkspace) |
| fail(project.getName() |
| + " should not be in the workspace location: " |
| + rootLocation.toOSString()); |
| } |
| StringBuffer filesNotImported = new StringBuffer(); |
| // make sure the files in the project were imported |
| for (int i = 0; i < fileList.length; i++) { |
| IResource res = isListFiles ? (IResource) project |
| .getFile(fileList[i]) : (IResource) project |
| .getFolder(fileList[i]); |
| if (!res.exists()) |
| filesNotImported.append(res.getName() + ", "); |
| } |
| assertTrue("Files expected but not in workspace: " |
| + filesNotImported.toString(), filesNotImported.length() == 0); |
| } |
| |
| /** |
| * Copies the data to a temporary directory and returns the new location. |
| * |
| * @return the location |
| */ |
| private String copyDataLocation() throws IOException { |
| TestPlugin plugin = TestPlugin.getDefault(); |
| if (plugin == null) |
| throw new IllegalStateException( |
| "TestPlugin default reference is null"); |
| |
| URL fullPathString = plugin.getDescriptor().find( |
| new Path(WS_DATA_PREFIX).append(WS_DATA_LOCATION + ".zip")); |
| |
| if (fullPathString == null) |
| throw new IllegalArgumentException(); |
| |
| IPath path = new Path(fullPathString.getPath()); |
| |
| File origin = path.toFile(); |
| if (!origin.exists()) |
| throw new IllegalArgumentException(); |
| |
| ZipFile zFile = new ZipFile(origin); |
| |
| File destination = new File(FileSystemHelper.getRandomLocation( |
| FileSystemHelper.getTempDir()).toOSString()); |
| FileTool.unzip(zFile, destination); |
| return destination.getAbsolutePath(); |
| } |
| |
| private String copyZipLocation() throws IOException { |
| TestPlugin plugin = TestPlugin.getDefault(); |
| if (plugin == null) |
| throw new IllegalStateException( |
| "TestPlugin default reference is null"); |
| |
| URL fullPathString = plugin.getDescriptor().find( |
| new Path(WS_DATA_PREFIX).append(WS_DATA_LOCATION + ".zip")); |
| |
| if (fullPathString == null) |
| throw new IllegalArgumentException(); |
| |
| IPath path = new Path(fullPathString.getPath()); |
| |
| File origin = path.toFile(); |
| if (!origin.exists()) |
| throw new IllegalArgumentException(); |
| |
| File destination = new File(FileSystemHelper.getRandomLocation( |
| FileSystemHelper.getTempDir()).toOSString() |
| + File.separator + ARCHIVE_HELLOWORLD + ".zip"); |
| FileTool.copy(origin, destination); |
| return destination.getAbsolutePath(); |
| } |
| |
| private WizardProjectsImportPage getNewWizard() { |
| ImportExportWizard wizard = new ImportExportWizard( |
| ImportExportWizard.IMPORT); |
| wizard.init(getWorkbench(), null); |
| IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault() |
| .getDialogSettings(); |
| IDialogSettings wizardSettings = workbenchSettings |
| .getSection("ImportExportTests"); |
| if (wizardSettings == null) |
| wizardSettings = workbenchSettings |
| .addNewSection("ImportExportTests"); |
| wizard.setDialogSettings(wizardSettings); |
| wizard.setForcePreviousAndNextButtons(true); |
| |
| WizardProjectsImportPage wpip = new WizardProjectsImportPage(); |
| |
| Shell shell = getShell(); |
| |
| WizardDialog dialog = new WizardDialog(shell, wizard); |
| dialog.create(); |
| dialog.getShell().setSize(Math.max(100, dialog.getShell().getSize().x), |
| 100); |
| |
| Composite parent = new Composite(shell, SWT.NONE); |
| parent.setLayout(new GridLayout()); |
| wpip.setWizard(dialog.getCurrentPage().getWizard()); |
| wpip.createControl(parent); |
| return wpip; |
| } |
| } |