blob: 1d66768f35aef98ce5a2ed16c5fd7051287f1bb5 [file] [log] [blame]
/*
* Copyright (c) 2014 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.resources.backend;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.eclipse.oomph.resources.backend.BackendResource.Type;
import org.eclipse.oomph.tests.AbstractTest;
import org.eclipse.oomph.util.IOUtil;
import org.eclipse.emf.common.util.URI;
import org.eclipse.core.runtime.Path;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* @author Eike Stepper
*/
public abstract class BackendSystemTest extends AbstractTest
{
public static final Set<String> EMPTY = Collections.emptySet();
public BackendSystemTest()
{
}
protected abstract Set<String> getNames();
protected abstract BackendSystem createBackendSystem();
@Test
public void testGetParent()
{
BackendSystem system = createBackendSystem();
BackendContainer parent = system.getParent();
assertThat(parent, isNull());
}
@Test
public void testGetMembers()
{
BackendSystem system = createBackendSystem();
BackendResource[] members = system.getMembers(null);
assertThat(members.length, is(5));
Set<String> names = getNames();
int folders = 3;
int files = 2;
for (BackendResource member : members)
{
names.remove(member.getName());
if (member.getType() == Type.FOLDER)
{
--folders;
}
if (member.getType() == Type.FILE)
{
--files;
}
BackendContainer parent = member.getParent();
assertThat(parent, is((BackendContainer)system));
BackendContainer parentParent = parent.getParent();
assertThat(parentParent, isNull());
}
assertThat(names, is(EMPTY));
assertThat(folders, is(0));
assertThat(files, is(0));
}
@Test
public void testFindMember()
{
BackendSystem system = createBackendSystem();
BackendResource folder1 = system.findMember(new Path("folder1"), null);
assertThat(folder1.getName(), is("folder1"));
assertThat(folder1.getParent(), is((BackendContainer)system));
assertThat(folder1.getSystemRelativeURI(), is(URI.createURI("folder1")));
assertThat(folder1.exists(LOGGER), is(true));
assertThat(folder1.getType(), is(BackendResource.Type.FOLDER));
BackendResource file1 = system.findMember(new Path("file1.txt"), null);
assertThat(file1.getName(), is("file1.txt"));
assertThat(file1.getParent(), is((BackendContainer)system));
assertThat(file1.getSystemRelativeURI(), is(URI.createURI("file1.txt")));
assertThat(file1.exists(LOGGER), is(true));
assertThat(file1.getType(), is(BackendResource.Type.FILE));
BackendResource self = system.findMember(Path.EMPTY, null);
assertThat(self.getName(), is(""));
assertThat(self.getParent(), isNull());
assertThat(self.getSystemRelativeURI(), is(URI.createURI("")));
assertThat(self.exists(LOGGER), is(true));
assertThat(self.getType(), is(BackendResource.Type.SYSTEM));
try
{
BackendResource member = system.findMember(new Path("resourceX"), null);
System.out.println(member);
Assert.fail("BackendException expected");
}
catch (BackendException expected)
{
// SUCCESS
}
}
@Test
public void testGetFolder()
{
BackendSystem system = createBackendSystem();
BackendFolder folder1 = system.getFolder(new Path("folder1"));
assertThat(folder1.getName(), is("folder1"));
assertThat(folder1.getParent(), is((BackendContainer)system));
assertThat(folder1.getSystemRelativeURI(), is(URI.createURI("folder1")));
assertThat(folder1.exists(LOGGER), is(true));
BackendFolder folderX = system.getFolder(new Path("folderX"));
assertThat(folderX.getName(), is("folderX"));
assertThat(folderX.getParent(), is((BackendContainer)system));
assertThat(folderX.getSystemRelativeURI(), is(URI.createURI("folderX")));
assertThat(folderX.exists(LOGGER), is(false));
}
@Test
public void testGetFile()
{
BackendSystem system = createBackendSystem();
BackendFile file1 = system.getFile(new Path("file1.txt"));
assertThat(file1.getName(), is("file1.txt"));
assertThat(file1.getParent(), is((BackendContainer)system));
assertThat(file1.getSystemRelativeURI(), is(URI.createURI("file1.txt")));
assertThat(file1.exists(LOGGER), is(true));
BackendFile fileX = system.getFile(new Path("fileX.txt"));
assertThat(fileX.getName(), is("fileX.txt"));
assertThat(fileX.getParent(), is((BackendContainer)system));
assertThat(fileX.getSystemRelativeURI(), is(URI.createURI("fileX.txt")));
assertThat(fileX.exists(LOGGER), is(false));
}
/**
* @author Eike Stepper
*/
public static class Local extends BackendSystemTest
{
private static File root;
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
root = createTempFolder();
for (File folder : createTree(root))
{
if (folder.isDirectory())
{
createTree(folder);
}
}
}
private static File[] createTree(File parent)
{
File folder1 = createFolder(parent, "folder1");
File folder2 = createFolder(parent, "folder2");
File folder3 = createFolder(parent, "folder3");
File file1 = createFile(parent, "file1.txt");
File file2 = createFile(parent, "file2.txt");
return new File[] { folder1, folder2, folder3, file1, file2 };
}
private static File createFolder(File parent, String name)
{
File folder = new File(parent, name);
folder.mkdirs();
return folder;
}
private static File createFile(File parent, String name)
{
File file = new File(parent, name);
IOUtil.writeLines(file, "UTF-8", Collections.singletonList("A single line of text in " + name));
return file;
}
@Override
protected Set<String> getNames()
{
Set<String> names = new HashSet<String>();
for (File file : root.listFiles())
{
names.add(file.getName());
}
return names;
}
@Override
protected BackendSystem createBackendSystem()
{
return (BackendSystem)BackendResource.get(root.getAbsolutePath());
}
}
}