blob: 8c26103b71f2f5436d3d47c9038e79f9df3e8f8f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 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 - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.localstore;
import java.io.*;
import org.eclipse.core.filesystem.*;
import org.eclipse.core.internal.localstore.FileSystemResourceManager;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.tests.resources.ResourceTest;
public abstract class LocalStoreTest extends ResourceTest {
// test configuration attributes
protected static int numberOfProjects = 3;
protected static int numberOfProperties = 5;
protected static final int sleepTime = 5000;
// projects names and projects
protected String[] projectNames;
protected IProject[] projects;
public LocalStoreTest() {
super();
}
public LocalStoreTest(String name) {
super(name);
}
protected int countChildren(File root) {
String[] children = root.list();
if (children == null) {
return 0;
}
int result = 0;
for (String element : children) {
File child = new File(root, element);
if (child.isDirectory()) {
result += countChildren(child);
}
result++;
}
return result;
}
public int countChildren(IFolder root) throws CoreException {
int total = 0;
IResource[] children = root.members();
for (IResource element : children) {
if (element.getType() == IResource.FILE) {
total++;
} else {
total += countChildren((IFolder) element);
}
}
return total;
}
/**
* Create a file with random content. If a resource exists in the same path,
* the resource is deleted.
*/
protected void createFile(IFileStore target, String content) throws CoreException {
target.delete(EFS.NONE, null);
InputStream input = new ByteArrayInputStream(content.getBytes());
transferData(input, target.openOutputStream(EFS.NONE, null));
IFileInfo info = target.fetchInfo();
assertTrue(info.exists() && !info.isDirectory());
}
/**
* Create a file with random content. If a resource exists in the same path,
* the resource is deleted.
*/
protected void createIOFile(java.io.File target, String content) throws IOException {
target.delete();
InputStream input = new ByteArrayInputStream(content.getBytes());
transferData(input, new FileOutputStream(target));
assertTrue(target.exists() && !target.isDirectory());
}
protected void createNode(IFileStore node) throws CoreException {
char type = node.getName().charAt(0);
if (type == 'd') {
node.mkdir(EFS.NONE, null);
} else {
InputStream input = getRandomContents();
OutputStream output = node.openOutputStream(EFS.NONE, null);
transferData(input, output);
}
}
protected void createTree(IFileStore[] tree) throws CoreException {
for (IFileStore element : tree) {
createNode(element);
}
}
/**
* The returned array will have at least the specified size.
*/
protected byte[] getBigContents(int size) {
return getBigString(size).getBytes();
}
/**
* The returned array will have at least the specified size.
*/
protected String getBigString(int size) {
StringBuffer sb = new StringBuffer();
while (sb.length() < size) {
sb.append(getRandomString());
}
return sb.toString();
}
public FileSystemResourceManager getLocalManager() {
return ((Workspace) getWorkspace()).getFileSystemManager();
}
protected IFileStore[] getTree(IFileStore root) {
return getTree(root, getTreeElements());
}
protected IFileStore[] getTree(IFileStore root, String[] elements) {
IFileStore[] tree = new IFileStore[elements.length];
for (int i = 0; i < elements.length; i++) {
tree[i] = root.getChild(elements[i]);
}
return tree;
}
protected String[] getTreeElements() {
String[] tree = new String[10];
tree[0] = "d-folder";
tree[1] = tree[0] + File.separator + "d-subfolder";
tree[2] = tree[0] + File.separator + "f-file";
tree[3] = tree[1] + File.separator + "f-anotherFile";
tree[4] = tree[1] + File.separator + "d-subfolder";
tree[5] = "d-1";
tree[6] = "d-2";
tree[7] = "f-3";
tree[8] = "f-4";
tree[9] = "f-5";
return tree;
}
@Override
protected void setUp() throws Exception {
super.setUp();
projectNames = new String[numberOfProjects];
projects = new IProject[numberOfProjects];
getWorkspace().run((IWorkspaceRunnable) monitor -> {
for (int i = 0; i < projectNames.length; i++) {
projectNames[i] = "Project" + i;
projects[i] = getWorkspace().getRoot().getProject(projectNames[i]);
projects[i].create(null);
projects[i].open(null);
}
}, null);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Copy the data from the input stream to the output stream.
* Close just the input stream.
*/
public void transferDataWithoutCloseStreams(InputStream input, OutputStream output) {
try {
int c = 0;
while ((c = input.read()) != -1) {
output.write(c);
}
//input.close();
//output.close();
} catch (IOException e) {
e.printStackTrace();
assertTrue(e.toString(), false);
}
}
protected boolean verifyNode(IFileStore node) {
char type = node.getName().charAt(0);
//if the name starts with d it must be a directory
return (type == 'd') == node.fetchInfo().isDirectory();
}
protected boolean verifyTree(IFileStore[] tree) {
for (int i = 0; i < tree.length; i++) {
if (!verifyNode(tree[i])) {
return false;
}
}
return true;
}
}