blob: 7d2f433f02fbd757d59daff51b3867fa08456d7f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2011 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import junit.framework.TestCase;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.util.TaskDataExportOperation;
import org.eclipse.mylyn.internal.tasks.ui.util.TaskDataSnapshotOperation;
import org.eclipse.mylyn.internal.tasks.ui.wizards.TaskDataExportWizard;
import org.eclipse.mylyn.internal.tasks.ui.wizards.TaskDataExportWizardPage;
import org.eclipse.swt.widgets.Shell;
/**
* Test case for the Task Export Wizard
*
* @author Wesley Coelho
* @author Mik Kersten
* @author Steffen Pingel
*/
public class TaskDataExportTest extends TestCase {
private File destinationDir;
private File mylynFolder;
private final List<File> tempFiles = new ArrayList<File>();
private TaskDataExportWizard wizard;
private TaskDataExportWizardPage wizardPage;
private File createDirectory(File parent, String folderName) {
File file = new File(parent, folderName);
if (!file.exists()) {
assertTrue(file.mkdir());
tempFiles.add(file);
}
return file;
}
private File createFile(File directory, String fileName) throws IOException {
File file = new File(directory, fileName);
if (!file.exists()) {
assertTrue(file.createNewFile());
tempFiles.add(file);
}
return file;
}
private List<String> getEntries(File file) throws IOException {
ArrayList<String> entries = new ArrayList<String>();
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
try {
ZipEntry entry = zipInputStream.getNextEntry();
while (entry != null) {
entries.add(entry.getName());
entry = zipInputStream.getNextEntry();
}
} finally {
zipInputStream.close();
}
Collections.sort(entries);
return entries;
}
@Override
protected void setUp() throws Exception {
// Create the export wizard
wizard = new TaskDataExportWizard();
wizard.addPages();
wizard.createPageControls(new Shell());
wizardPage = (TaskDataExportWizardPage) wizard.getPage("org.eclipse.mylyn.tasklist.exportPage");
assertNotNull(wizardPage);
mylynFolder = new File(TasksUiPlugin.getDefault().getDataDirectory());
// Clear context and tasks directory
File contextDirectory = new File(mylynFolder, "contexts");
CommonTestUtil.deleteFolder(contextDirectory);
contextDirectory.mkdir();
File tasksDirectory = new File(mylynFolder, "tasks");
CommonTestUtil.deleteFolderRecursively(tasksDirectory);
tasksDirectory.mkdir();
// Create test export destination directory
destinationDir = new File(mylynFolder.getParent(), "TestDir");
CommonTestUtil.deleteFolder(destinationDir);
createDirectory(destinationDir.getParentFile(), destinationDir.getName());
// Create folder/file structure
createFile(mylynFolder, "monitor-log.xml");
createFile(mylynFolder, "my-tasklist.xml.zip");
createFile(mylynFolder, "tasks.xml.zip");
createFile(mylynFolder, "tasklist.xml.zip");
createFile(mylynFolder, ".hidden");
createDirectory(mylynFolder, "my-attachments");
createDirectory(mylynFolder, "attachments");
createDirectory(mylynFolder, "backup");
File tasksandstuff = createDirectory(mylynFolder, "tasksandstuff");
createFile(tasksandstuff, "file1.xml.zip");
File taskSubDir = createDirectory(tasksandstuff, "sub");
createFile(taskSubDir, "file2.xml.zip");
}
@Override
protected void tearDown() throws Exception {
wizard.dispose();
wizardPage.dispose();
Collections.reverse(tempFiles);
for (File file : tempFiles) {
file.delete();
}
}
/**
* Tests the wizard when it has been asked to export all task data to a zip file.
*/
public void testExportAllToZip() throws Exception {
// set parameters in the wizard to simulate a user setting them and clicking "Finish"
wizardPage.setDestinationDirectory(destinationDir.getPath());
wizard.performFinish();
// check that the task list file was exported
File[] files = destinationDir.listFiles();
assertEquals(1, files.length);
List<String> entries = getEntries(files[0]);
assertEquals(Arrays.asList("my-tasklist.xml.zip", "repositories.xml.zip", "tasks.xml.zip",
"tasksandstuff/file1.xml.zip", "tasksandstuff/sub/file2.xml.zip"), entries);
}
public void testSnapshotWithContext() throws Exception {
File activityFile = new File(mylynFolder, "contexts/activity.xml.zip");
if (!activityFile.exists()) {
assertTrue(activityFile.createNewFile());
}
final TaskDataExportOperation backupJob = new TaskDataSnapshotOperation(destinationDir.getPath(),
"testBackup.zip");
backupJob.run(new NullProgressMonitor());
// check that the task list file was exported
File[] files = destinationDir.listFiles();
assertEquals(1, files.length);
List<String> entries = getEntries(files[0]);
assertEquals(Arrays.asList("contexts/activity.xml.zip", "repositories.xml.zip", "tasks.xml.zip"), entries);
}
public void testSnapshotWithoutContext() throws Exception {
File activityFile = new File(mylynFolder, "contexts/activity.xml.zip");
if (activityFile.exists()) {
assertTrue(activityFile.delete());
}
final TaskDataExportOperation backupJob = new TaskDataSnapshotOperation(destinationDir.getPath(),
"testBackup.zip");
backupJob.run(new NullProgressMonitor());
// check that the task list file was exported
File[] files = destinationDir.listFiles();
assertEquals(1, files.length);
List<String> entries = getEntries(files[0]);
assertEquals(Arrays.asList("repositories.xml.zip", "tasks.xml.zip"), entries);
}
}