/******************************************************************************* * Copyright (c) 2005, 2015 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.filesystem; import java.io.IOException; import java.io.OutputStream; import java.net.URI; import org.eclipse.core.filesystem.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.tests.harness.CoreTest; import org.eclipse.core.tests.harness.FileSystemHelper; import org.eclipse.core.tests.internal.filesystem.ram.MemoryTree; /** * Abstract superclass for all generic file system tests. */ public abstract class FileSystemTest extends CoreTest { protected IFileStore baseStore, localFileBaseStore; public FileSystemTest() { super(); } public FileSystemTest(String name) { super(name); } protected void ensureDoesNotExist(IFileStore store) { try { store.delete(EFS.NONE, getMonitor()); assertTrue("1.0", !store.fetchInfo().exists()); } catch (CoreException e) { fail("ensureDoesNotExist", e); } } /** * Asserts that a file store exists. * * @param message The failure message if the assertion fails * @param store The store to check for existence */ protected void assertExists(String message, IFileStore store) { IFileInfo info = store.fetchInfo(); assertTrue(message, info.exists()); //check that the parent knows about it try { IFileInfo[] children = store.getParent().childInfos(EFS.NONE, getMonitor()); for (IFileInfo element : children) { if (element.getName().equals(store.getName())) { return; } } assertTrue(message, false); } catch (CoreException e) { fail(message, e); } } /** * Ensures that the provided store exists, as either a file or directory. */ protected void ensureExists(IFileStore store, boolean directory) { try { if (directory) { store.mkdir(EFS.NONE, getMonitor()); final IFileInfo info = store.fetchInfo(); assertTrue("1.0", info.exists()); assertTrue("1.1", info.isDirectory()); } else { OutputStream out = store.openOutputStream(EFS.NONE, getMonitor()); out.write(5); out.close(); final IFileInfo info = store.fetchInfo(); assertTrue("1.5", info.exists()); assertTrue("1.6", !info.isDirectory()); } } catch (CoreException e) { fail("ensureExists", e); } catch (IOException e) { fail("ensureExists", e); } } /** * Checks whether the local file system supports accessing and modifying the given attribute. */ protected boolean isAttributeSupported(int attribute) { return (EFS.getLocalFileSystem().attributes() & attribute) != 0; } @Override protected void setUp() throws Exception { super.setUp(); doFSSetUp(); localFileBaseStore = EFS.getLocalFileSystem().getStore(FileSystemHelper.getRandomLocation(getTempDir())); } @Override protected void tearDown() throws Exception { super.tearDown(); localFileBaseStore.delete(EFS.NONE, null); doFSTearDown(); } /** * The base file system to be tested is setup here. * The default implementation sets up in-memory file system (@see MemoryFileSystem). * <p> * Subclasses should override to test a different file system * implementation and set up its base directory. * </p> */ protected void doFSSetUp() throws Exception { MemoryTree.TREE.deleteAll(); baseStore = EFS.getStore(URI.create("mem:/baseStore")); baseStore.mkdir(EFS.NONE, null); } /** * Tear down the tested base file system and base directory here. * The default implementation tears down in memory file system (@see MemoryFileSystem). * <p> * Subclasses should override to tear down a different file system * implementation and its base directory. * </p> */ protected void doFSTearDown() throws Exception { baseStore.delete(EFS.NONE, null); MemoryTree.TREE.deleteAll(); } }