blob: 3ee7b4dfca79c918f657cd43eacd17f6aad17bf3 [file] [log] [blame]
package org.eclipse.ui.tests.datatransfer;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.tests.harness.FileSystemHelper;
import org.eclipse.ui.dialogs.IOverwriteQuery;
import org.eclipse.ui.internal.wizards.datatransfer.FileSystemExportOperation;
import org.eclipse.ui.tests.harness.util.FileUtil;
public class ExportFileSystemOperationTest extends DataTransferTestCase implements
IOverwriteQuery {
private String localDirectory;
private String[] directoryNames = { "dir1", "dir2" };
private String[] fileNames = { "file1.txt", "file2.txt" };
private IProject project;
public ExportFileSystemOperationTest(String testName) {
super(testName);
}
public String queryOverwrite(String pathString) {
return "";
}
protected void doSetUp() throws Exception {
super.doSetUp();
project = FileUtil.createProject("Export" + getName());
File destination =
new File(FileSystemHelper.getRandomLocation(FileSystemHelper.getTempDir())
.toOSString());
localDirectory = destination.getAbsolutePath();
if (!destination.mkdirs())
fail("Could not set up destination directory for " + getName());
setUpData();
}
private void setUpData(){
try{
for(int i = 0; i < directoryNames.length; i++){
IFolder folder = project.getFolder(directoryNames[i]);
folder.create(false, true, new NullProgressMonitor());
for (int k = 0; k < fileNames.length; k++){
IFile file = folder.getFile(fileNames[k]);
String contents =
directoryNames[i] + ", " + fileNames[k];
file.create(new ByteArrayInputStream(contents.getBytes()),
true, new NullProgressMonitor());
}
}
}
catch(Exception e){
fail(e.toString());
}
}
protected void doTearDown() throws Exception {
super.doTearDown();
// delete exported data
File root = new File(localDirectory);
if (root.exists()){
deleteDirectory(root);
}
try {
project.delete(true, true, null);
} catch (CoreException e) {
fail(e.toString());
}
}
public void testGetStatus() throws Exception {
List resources = new ArrayList();
resources.add(project);
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
assertTrue(operation.getStatus().getCode() == IStatus.OK);
}
/* Export a project, with all directories */
public void testExportRootResource() throws Exception {
List resources = new ArrayList();
resources.add(project);
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
openTestWindow().run(true, true, operation);
verifyFolders(directoryNames.length);
}
/* Export a project, create all leadup folders. */
public void testExportResources() throws Exception {
List resources = new ArrayList();
IResource[] members = project.members();
for (int i = 0; i < members.length; i++){
resources.add(members[i]);
}
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
openTestWindow().run(true, true, operation);
verifyFolders(directoryNames.length);
}
/* Export folders, do not create leadup folders. */
public void testExportFolderCreateDirectoryStructure() throws Exception {
List resources = new ArrayList();
IResource[] members = project.members();
for (int i = 0; i < members.length; i++){
if (isDirectory(members[i]))
resources.add(members[i]);
}
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
operation.setCreateContainerDirectories(true);
operation.setCreateLeadupStructure(false);
openTestWindow().run(true, true, operation);
verifyFolders(directoryNames.length, false);
}
/* Export files, do not create leadup folders. */
public void testExportFilesCreateDirectoryStructure() throws Exception {
List resources = new ArrayList();
IResource[] members = project.members();
for (int i = 0; i < members.length; i++){
if (isDirectory(members[i])){
IResource[] folderMembers = ((IFolder)members[i]).members();
for (int k = 0; k < folderMembers.length; k++){
if (isFile(folderMembers[k])){
resources.add(folderMembers[k]);
}
}
}
}
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
operation.setCreateContainerDirectories(true);
operation.setCreateLeadupStructure(false);
openTestWindow().run(true, true, operation);
verifyFiles(resources);
}
/* Export files, overwrite - do not create container directories or lead up folders. */
public void testExportOverwrite() throws Exception {
List resources = new ArrayList();
resources.add(project);
FileSystemExportOperation operation =
new FileSystemExportOperation(
null, resources, localDirectory, this);
openTestWindow().run(true, true, operation);
operation.setOverwriteFiles(true);
operation.setCreateContainerDirectories(false);
operation.setCreateLeadupStructure(false);
openTestWindow().run(true, true, operation);
verifyFolders(directoryNames.length);
}
private boolean isFile(IResource resource){
for (int i = 0; i < fileNames.length; i++){
if (fileNames[i].equals(resource.getName()))
return true;
}
return false;
}
private void verifyFiles(List resources){
for (int i = 0; i < resources.size(); i++){
IResource resource = (IResource)resources.get(i);
assertTrue(
"Export should have exported " + resource.getName(),
isFile(resource));
}
}
private void verifyFolders(int folderCount){
verifyFolders(folderCount, true);
}
private void verifyFolders(int folderCount, boolean includeRootFolder){
File root;
if (includeRootFolder){
root = new File(localDirectory, project.getName());
assertTrue("Export failed: " + project.getName() + " folder does not exist", root.exists());
}
else{
root = new File(localDirectory);
}
File[] files = root.listFiles();
List directories = new ArrayList();
if (files != null){
for (int i = 0; i < files.length; i++){
if (files[i].isDirectory())
directories.add(files[i]);
}
}
assertEquals("Export failed to Export all directories",
folderCount, directories.size());
for (int i = 0; i < directories.size(); i++) {
File directory = (File)directories.get(i);
assertTrue("Export failed to export directory " + directory.getName(), directory.exists());
verifyFolder(directory);
}
}
private void verifyFolder(File directory){
File[] files = directory.listFiles();
if (files != null){
for (int k = 0; k < files.length; k++){
File file = files[k];
assertTrue("Export failed to export file: " + file.getName(), file.exists());
}
}
}
private boolean isDirectory(IResource resource){
for (int i = 0; i < directoryNames.length; i++){
if (directoryNames[i].equals(resource.getName()))
return true;
}
return false;
}
}