blob: 31919f8bbddd77ca7ee080cd09f805f1ade4946e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 SAP AG.
* 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:
* Eduard Bartsch (SAP AG) - initial API and implementation
* Mathias Kinzler (SAP AG) - initial API and implementation
*******************************************************************************/
package org.eclipse.core.resources.semantic.test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.filesystem.provider.FileInfo;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.semantic.ISemanticFile;
import org.eclipse.core.resources.semantic.ISemanticFileSystem;
import org.eclipse.core.resources.semantic.ISemanticFolder;
import org.eclipse.core.resources.semantic.ISemanticProject;
import org.eclipse.core.resources.semantic.ISemanticResource;
import org.eclipse.core.resources.semantic.ISemanticResourceInfo;
import org.eclipse.core.resources.semantic.SyncDirection;
import org.eclipse.core.resources.semantic.examples.remote.RemoteFile;
import org.eclipse.core.resources.semantic.examples.remote.RemoteFolder;
import org.eclipse.core.resources.semantic.examples.remote.RemoteStore;
import org.eclipse.core.resources.semantic.examples.remote.RemoteStoreTransient;
import org.eclipse.core.resources.semantic.spi.ISemanticFileStore;
import org.eclipse.core.resources.semantic.spi.Util;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.team.core.RepositoryProvider;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Base class for content provider tests
* <p>
* Creates a test project an initializes the remote repository
*
*/
public abstract class TestsContentProviderBase extends TestsContentProviderUtil {
private static final String SOME_OTHER_VALUE = "Some other Value";
private static final String SOME_VALUE = "Some Value";
IWorkspace workspace = ResourcesPlugin.getWorkspace();
/**
* The constructor
*
* @param autoRefresh
* if auto-refresh should be used
* @param projectName
* the test project name
* @param providerName
* the id of the content provider
*/
public TestsContentProviderBase(boolean autoRefresh, String projectName, String providerName) {
super(autoRefresh, projectName, providerName);
}
@BeforeClass
public static void beforeClass() throws Exception {
TestsContentProviderUtil.beforeClass();
}
public static void afterClass() throws Exception {
TestsContentProviderUtil.afterClass();
}
public abstract RemoteFile getRemoteFile();
@Override
@Before
public void beforeMethod() throws Exception {
final IProject project = workspace.getRoot().getProject(this.projectName);
if (project.exists()) {
throw new IllegalStateException("Project exists");
}
IWorkspaceRunnable myRunnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
IProjectDescription description = workspace.newProjectDescription(TestsContentProviderBase.this.projectName);
try {
description.setLocationURI(new URI(ISemanticFileSystem.SCHEME + ":/" + TestsContentProviderBase.this.projectName));
} catch (URISyntaxException e) {
// really not likely, though
throw new RuntimeException(e);
}
project.create(description, monitor);
project.open(monitor);
// for SFS, we map this to the team provider
RepositoryProvider.map(project, ISemanticFileSystem.SFS_REPOSITORY_PROVIDER);
ISemanticProject spr = (ISemanticProject) project.getAdapter(ISemanticProject.class);
RemoteStoreTransient store = (RemoteStoreTransient) project.getAdapter(RemoteStoreTransient.class);
store.reset();
RemoteFolder f1 = store.getRootFolder().addFolder("Folder1");
f1.addFolder("Folder11");
try {
f1.addFile("File1", "Hello".getBytes("UTF-8"), store.newTime());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
Map<QualifiedName, String> properties = new HashMap<QualifiedName, String>();
properties.put(TEMPLATE_PROP, "World");
spr.addFolder("root", TestsContentProviderBase.this.providerName, properties, TestsContentProviderBase.this.options,
monitor);
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
};
workspace.run(myRunnable, workspace.getRoot(), IWorkspace.AVOID_UPDATE, null);
this.testProject = project;
String projectName1 = this.testProject.getName();
String[] roots = ((ISemanticFileSystem) EFS.getFileSystem(ISemanticFileSystem.SCHEME)).getRootNames();
for (String root : roots) {
if (root.equals(projectName1)) {
return;
}
}
Assert.fail("Project should be in the list of root names");
}
@Override
@After
public void afterMethod() throws Exception {
RemoteStoreTransient store = (RemoteStoreTransient) this.testProject.getAdapter(RemoteStoreTransient.class);
store.reset();
final IProject project = workspace.getRoot().getProject(this.projectName);
this.testProject = null;
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
project.delete(true, monitor);
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testTemplateProperties() throws Exception {
final IFolder root = this.testProject.getFolder("root");
ISemanticFileStore store = (ISemanticFileStore) EFS.getStore(root.getLocationURI());
Assert.assertTrue(store.getPersistentProperties().containsKey(TEMPLATE_PROP));
}
/**
*
* @throws Exception
*/
@Test
public void testAddFileFromRemoteAndDeleteFolder() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
Assert.assertEquals("Folder existence", false, parent.exists());
final IFile file = parent.getFile("File1");
Assert.assertEquals("File existence", false, file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticFile sfile = sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue(sfile.getAdaptedFile().equals(file));
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
InputStream is = null;
try {
is = sfile.getAdaptedFile().getContents();
try {
Assert.assertTrue("Too few bytes available", is.available() > 0);
} catch (IOException e) {
// $JL-EXC$
Assert.fail(e.getMessage());
}
} finally {
Util.safeClose(is);
}
}
};
// we need to use the project since the root folder is not yet synched
workspace.run(runnable, this.testProject, 0, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
Assert.assertEquals("Folder existence", true, parent.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
try {
sfr.addResource("File1", TestsContentProviderBase.this.options, monitor);
// TODO restore after content providers have implemented
// validateLocalDelete
// Assert.fail("Exception should have been thrown for adding the same resource");
} catch (Exception e) {
// $JL-EXC$ expected
}
try {
sfr.addResource("notexisting", TestsContentProviderBase.this.options, monitor);
Assert.fail("Exception should have been thrown for adding nonexisting resource");
} catch (CoreException e) {
// $JL-EXC$ expected
// TODO fix test
// String test = e.getStatus().toString();
// Assert.assertTrue("Status as String should contain path",
// test.contains(sfr.getAdaptedContainer()
// .getProjectRelativePath().toString()));
}
// TODO restore after content provider implement
// validateLocalDelete
// try {
// file.delete(false, monitor);
// Assert.fail("Exception should have been thrown for local delete of semantic resource");
// } catch (OperationCanceledException e) {
// // $JL-EXC$ expected
// // reset canceled:
// monitor.setCanceled(false);
// }
try {
IFolder test = TestsContentProviderBase.this.testProject.getFolder("FileTarget");
file.move(test.getFullPath(), false, monitor);
Assert.fail("Exception should have been thrown for local move of semantic file");
} catch (OperationCanceledException e) {
// $JL-EXC$ expected
// reset canceled
monitor.setCanceled(false);
}
// // TODO problems due to copying in
// RESTContentProvider.openInputStreamInternal with folders
// try {
// IFolder test =
// TestsContentProviderBase.this.testProject.getFolder("FolderTarget");
// parent.move(test.getFullPath(), false, monitor);
// Assert.fail("Exception should have been thrown for local move of semantic folder");
// } catch (OperationCanceledException e) {
// // $JL-EXC$ expected
// // reset canceled
// monitor.setCanceled(false);
// }
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertTrue("File should exist", file.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
sf.remove(TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, file.exists());
}
};
workspace.run(runnable, workspace.getRuleFactory().refreshRule(parent), 0, new NullProgressMonitor());
Assert.assertFalse("File should not exist", file.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testAddFileAndImplicitFolderLocalFlag() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
Assert.assertEquals("Folder existence", false, parent.exists());
final IFile file = parent.getFile("File1");
Assert.assertEquals("File existence", false, file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticFile sfile = sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue(sfile.getAdaptedFile().equals(file));
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, workspace.getRuleFactory().refreshRule(parent), 0, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
Assert.assertEquals("Folder existence", true, parent.exists());
ISemanticFolder sFolder = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticResourceInfo info = sFolder.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCAL_ONLY, null);
Assert.assertTrue("Folder should be local", info.isLocalOnly());
}
@Test
public void testAddFileAndUpdateProperties() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertEquals("File existence", false, file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticFile sfile = sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue(sfile.getAdaptedFile().equals(file));
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
}
};
// we need to use the project since the root folder is not yet synched
workspace.run(runnable, this.testProject, 0, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
Map<QualifiedName, String> propertiesToBeAddedOrUpdated = new HashMap<QualifiedName, String>();
propertiesToBeAddedOrUpdated.put(DUMMY_PROP, SOME_VALUE);
propertiesToBeAddedOrUpdated.put(DUMMY_PROP2, SOME_OTHER_VALUE);
sfile.updatePersistentProperties(propertiesToBeAddedOrUpdated, null);
Assert.assertNotNull("Property should not be null", sfile.getPersistentProperty(DUMMY_PROP));
Assert.assertTrue("Map should contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP));
Assert.assertTrue("Map should contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP2));
Assert.assertEquals(SOME_VALUE, sfile.getPersistentProperty(DUMMY_PROP));
Assert.assertEquals(SOME_OTHER_VALUE, sfile.getPersistentProperty(DUMMY_PROP2));
sfile.updatePersistentProperties(propertiesToBeAddedOrUpdated, null);
List<QualifiedName> propertiesToBeDeleted = new ArrayList<QualifiedName>();
propertiesToBeDeleted.add(DUMMY_PROP2);
sfile.updatePersistentProperties(null, propertiesToBeDeleted);
Assert.assertTrue("Map should contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP));
Assert.assertFalse("Map should not contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP2));
propertiesToBeDeleted.clear();
propertiesToBeDeleted.add(DUMMY_PROP);
sfile.updatePersistentProperties(null, propertiesToBeDeleted);
Assert.assertFalse("Map should not contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP));
Assert.assertNull("Property should be null", sfile.getPersistentProperty(DUMMY_PROP));
}
};
workspace.run(runnable, workspace.getRuleFactory().modifyRule(file), 0, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testAddFileAndHandleProperties() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
Assert.assertEquals("Folder existence", false, parent.exists());
final IFile file = parent.getFile("File1");
Assert.assertEquals("File existence", false, file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticFile sfile = sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue(sfile.getAdaptedFile().equals(file));
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
InputStream is = null;
try {
is = sfile.getAdaptedFile().getContents();
try {
Assert.assertTrue("Too few bytes available", is.available() > 0);
} catch (IOException e) {
// $JL-EXC$
Assert.fail(e.getMessage());
}
} finally {
Util.safeClose(is);
}
}
};
// we need to use the project since the root folder is not yet synched
workspace.run(runnable, this.testProject, 0, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
Assert.assertEquals("Folder existence", true, parent.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sfile.setPersistentProperty(DUMMY_PROP, SOME_VALUE);
Assert.assertNotNull("Property should not be null", sfile.getPersistentProperty(DUMMY_PROP));
Assert.assertTrue("Map should contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP));
Assert.assertFalse("Map should not contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP2));
sfile.setPersistentProperty(DUMMY_PROP2, SOME_OTHER_VALUE);
Assert.assertTrue("Map should contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP2));
sfile.setPersistentProperty(DUMMY_PROP2, null);
Assert.assertFalse("Map should not contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP2));
sfile.setPersistentProperty(DUMMY_PROP, null);
Assert.assertFalse("Map should not contain the property", sfile.getPersistentProperties().containsKey(DUMMY_PROP));
sfile.setPersistentProperty(DUMMY_PROP, null);
Assert.assertNull("Property should be null", sfile.getPersistentProperty(DUMMY_PROP));
}
};
workspace.run(runnable, workspace.getRuleFactory().modifyRule(file), 0, new NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sfile.setSessionProperty(DUMMY_PROP, SOME_VALUE);
Assert.assertNotNull("Property should not be null", sfile.getSessionProperty(DUMMY_PROP));
Assert.assertTrue("Map should contain the property", sfile.getSessionProperties().containsKey(DUMMY_PROP));
Assert.assertFalse("Map should not contain the property", sfile.getSessionProperties().containsKey(DUMMY_PROP2));
sfile.setSessionProperty(DUMMY_PROP2, SOME_OTHER_VALUE);
Assert.assertTrue("Map should contain the property", sfile.getSessionProperties().containsKey(DUMMY_PROP2));
sfile.setSessionProperty(DUMMY_PROP2, null);
Assert.assertFalse("Map should not contain the property", sfile.getSessionProperties().containsKey(DUMMY_PROP2));
sfile.setSessionProperty(DUMMY_PROP, null);
Assert.assertFalse("Map should not contain the property", sfile.getSessionProperties().containsKey(DUMMY_PROP));
sfile.setSessionProperty(DUMMY_PROP, null);
Assert.assertNull("Property should be null", sfile.getSessionProperty(DUMMY_PROP));
}
};
workspace.run(runnable, workspace.getRuleFactory().modifyRule(file), 0, new NullProgressMonitor());
// TODO project close/open should drop session props
// runnable = new IWorkspaceRunnable() {
//
// @Override
// public void run(IProgressMonitor monitor) throws CoreException {
// ISemanticFile sfile = (ISemanticFile)
// file.getAdapter(ISemanticFile.class);
// sfile.setSessionProperty(DUMMY_PROP, "Some Value");
// Assert.assertNotNull("Property should not be null",
// sfile.getSessionProperty(DUMMY_PROP));
//
// TestsContentProviderBase.this.testProject.close(monitor);
//
// TestsContentProviderBase.this.testProject.open(monitor);
//
// Assert.assertNull("Property should be null",
// sfile.getSessionProperty(DUMMY_PROP));
//
// }
// };
//
// workspace.run(runnable, new
// NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, file.exists());
file.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, file.exists());
}
};
workspace.run(runnable, workspace.getRuleFactory().deleteRule(file), 0, new NullProgressMonitor());
Assert.assertFalse("File should not exist", file.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testTimestamp() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse(file.exists());
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
sf.addFile("File1", TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
}
};
workspace.run(runnable, workspace.getRuleFactory().refreshRule(parent), 0, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
ISemanticFileStore store = (ISemanticFileStore) EFS.getStore(file.getLocationURI());
long stamp = store.fetchInfo().getLastModified();
Assert.assertEquals("Wrong date", getRemoteFile().getTimestamp(), stamp);
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
sf.getResource("File1").remove(TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, file.exists());
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, file.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testSetTimestamp() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse(file.exists());
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile rfile = sf.addFile("File1", TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
long localTime = rfile.getAdaptedFile().getLocalTimeStamp();
RemoteStoreTransient rstore = (RemoteStoreTransient) TestsContentProviderBase.this.testProject
.getAdapter(RemoteStoreTransient.class);
long newTime = rstore.newTime();
rfile.getAdaptedFile().setLocalTimeStamp(newTime);
if (!TestsContentProviderBase.this.autoRefresh) {
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
ISemanticFileStore store = (ISemanticFileStore) EFS.getStore(file.getLocationURI());
long stamp = store.fetchInfo().getLastModified();
Assert.assertFalse("Timestamps should differ", localTime == newTime);
Assert.assertEquals("Timstamps should not differ", stamp, newTime);
}
};
workspace.run(runnable, new NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
sf.getResource("File1").remove(TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, file.exists());
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, file.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testExistence() throws Exception {
IFolder root = this.testProject.getFolder("root");
IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse(file.exists());
final IFile nofile = parent.getFile("NoFile");
Assert.assertFalse(file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
Assert.assertTrue("Should exist remotely", sf.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_EXISTS_REMOTELY, monitor)
.existsRemotely());
sf = (ISemanticFile) nofile.getAdapter(ISemanticFile.class);
Assert.assertFalse("Should not exist remotely",
sf.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_EXISTS_REMOTELY, monitor).existsRemotely());
}
};
workspace.run(runnable, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testLockAndUnlock() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = sf.addFile("File1", TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
ISemanticResourceInfo info = sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKING_SUPPORTED, monitor);
if (!info.isLockingSupported()) {
return;
}
Assert.assertFalse("Should not be locked", sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, monitor)
.isLocked());
sfile.lockResource(TestsContentProviderBase.this.options, monitor);
Assert.assertTrue("Should be locked", sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, monitor).isLocked());
sfile.unlockResource(TestsContentProviderBase.this.options, monitor);
Assert.assertFalse("Should not be locked", sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, monitor)
.isLocked());
}
};
ISchedulingRule rule = workspace.getRuleFactory().refreshRule(parent);
workspace.run(runnable, rule, IWorkspace.AVOID_UPDATE, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testAddResourceFromRemoteAndAddMarker() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
// Assert.assertTrue("Folder should exist", parent.exists());
Assert.assertFalse("File should not exist", file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfolder = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
ISemanticResource filres = sfolder.addResource("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue(filres instanceof ISemanticFile);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("File existence", true, file.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
IMarker marker = file.createMarker(IMarker.PROBLEM);
marker.setAttribute(IMarker.MESSAGE, "Some message");
}
};
workspace.run(runnable, new NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, file.exists());
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, file.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("File existence", false, file.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testAddFolderFromRemote() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFolder folder = parent.getFolder("Folder11");
// Assert.assertTrue("Folder should exist", parent.exists());
Assert.assertEquals("Folder existence", false, folder.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfolder = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
sfolder.addFolder("Folder11", TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", false, folder.exists());
folder.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, folder.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("Folder existence", true, folder.exists());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sf = (ISemanticFolder) folder.getAdapter(ISemanticFolder.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
Assert.assertEquals("File existence", true, folder.exists());
folder.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", false, folder.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("Folder existence", false, folder.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testChangeFileContentLocalAndRevert() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse("File should not exist", file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
Assert.assertEquals("File existence", true, file.exists());
}
};
workspace.run(runnable, new NullProgressMonitor());
assertContentsEqual(file, "Hello");
long oldStamp = file.getModificationStamp();
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
try {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
IStatus stat = sf.validateEdit(null);
Assert.assertTrue("ValidateEdit should have returned OK", stat.isOK());
file.setContents(new ByteArrayInputStream("NewString".getBytes("UTF-8")), IResource.KEEP_HISTORY, monitor);
} catch (UnsupportedEncodingException e) {
// $JL-EXC$
Assert.fail(e.getMessage());
}
}
};
workspace.run(runnable, new NullProgressMonitor());
assertContentsEqual(file, "NewString");
long newStamp = file.getModificationStamp();
Assert.assertFalse("Timestamp should differ", oldStamp == newStamp);
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
try {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
IStatus stat = sf.validateEdit(null);
Assert.assertTrue("ValidateEdit should have returned OK", stat.isOK());
file.appendContents(new ByteArrayInputStream("Appended".getBytes("UTF-8")), IResource.KEEP_HISTORY, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
} catch (UnsupportedEncodingException e) {
// $JL-EXC$
Assert.fail(e.getMessage());
}
}
};
workspace.run(runnable, new NullProgressMonitor());
assertContentsEqual(file, "NewStringAppended");
workspace.run(runnable, new NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.revertChanges(TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
assertContentsEqual(file, "Hello");
long revertedStamp = file.getModificationStamp();
Assert.assertFalse("Timestamp should have been reverted", oldStamp == revertedStamp);
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("File existence", false, file.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testChangeFileContentRemote() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse("File should not exist", file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertTrue("File should exist", file.exists());
assertContentsEqual(file, "Hello");
Assert.assertEquals("Wrong remote content", "Hello", new String(getRemoteFile().getContent(), "UTF-8"));
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
IStatus stat = sf.validateEdit(null);
Assert.assertTrue("ValidateEdit should have returned OK", stat.isOK());
try {
file.setContents(new ByteArrayInputStream("NewString".getBytes("UTF-8")), IResource.KEEP_HISTORY,
new NullProgressMonitor());
sf.synchronizeContentWithRemote(SyncDirection.OUTGOING, TestsContentProviderBase.this.options, monitor);
if (getRemoteFile().getStore() instanceof RemoteStore) {
((RemoteStore) getRemoteFile().getStore()).serialize(monitor);
}
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
} catch (UnsupportedEncodingException e) {
// $JL-EXC$
throw new RuntimeException(e.getMessage());
}
}
};
workspace.run(runnable, new NullProgressMonitor());
assertContentsEqual(file, "NewString");
Assert.assertEquals("Wrong remote content", "NewString", new String(getRemoteFile().getContent(), "UTF-8"));
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.synchronizeContentWithRemote(SyncDirection.OUTGOING, TestsContentProviderBase.this.options, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertFalse("File should not exist", file.exists());
}
/**
* TODO should this call synchronizeStateWithRemoate?
*
* @throws Exception
*/
@Test
public void testChangeFileStateRemote() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
Assert.assertFalse("File should not exist", file.exists());
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFolder sfr = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
sfr.addFile("File1", TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertTrue("File should exist", file.exists());
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
if (!sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKING_SUPPORTED, null).isLockingSupported()) {
return;
}
Assert.assertEquals("Wrong lock state", false, sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, null).isLocked());
getRemoteFile().setLocked(true);
Assert.assertEquals("Wrong lock state", false, sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, null).isLocked());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.synchronizeContentWithRemote(SyncDirection.INCOMING, ISemanticFileSystem.NONE, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("Wrong lock state", true, sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, null).isLocked());
getRemoteFile().setLocked(false);
Assert.assertEquals("Wrong lock state", true, sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, null).isLocked());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.synchronizeContentWithRemote(SyncDirection.INCOMING, ISemanticFileSystem.NONE, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertEquals("Wrong lock state", false, sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_LOCKED, null).isLocked());
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sf = (ISemanticFile) file.getAdapter(ISemanticFile.class);
sf.remove(TestsContentProviderBase.this.options, null);
if (!TestsContentProviderBase.this.autoRefresh) {
file.getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertFalse("File should not exist", file.exists());
}
/**
*
* @throws Exception
*/
@Test
public void testCreateAndDeleteRemote() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
try {
sf.createFileRemotely("NewFromClient", new ByteArrayInputStream("RemoteContent".getBytes("UTF-8")), null,
TestsContentProviderBase.this.options, monitor);
sf.createResourceRemotely("NewFromClient2", null, TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
sf.getAdaptedContainer().refreshLocal(0, monitor);
}
} catch (UnsupportedEncodingException e) {
// $JL-EXC$
throw new CoreException(new Status(IStatus.ERROR, TestPlugin.PLUGIN_ID, e.getMessage(), e));
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertTrue("Child should be available", sf.hasResource("NewFromClient"));
final ISemanticResource res = sf.getResource("NewFromClient");
final ISemanticResource res2 = sf.getResource("NewFromClient2");
runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
res.deleteRemotely(TestsContentProviderBase.this.options, monitor);
res2.deleteRemotely(TestsContentProviderBase.this.options, monitor);
if (!TestsContentProviderBase.this.autoRefresh) {
sf.getAdaptedContainer().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
};
workspace.run(runnable, new NullProgressMonitor());
Assert.assertFalse("Child should not be available", sf.hasResource("NewFromClient"));
}
/**
*
* @throws Exception
*/
@Test
public void testSetReadOnly() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
final IFile file = parent.getFile("File1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = sf.addFile("File1", TestsContentProviderBase.this.options, monitor);
Assert.assertTrue("File should be read-only", sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_READ_ONLY, null)
.isReadOnly());
ISemanticFileStore store = (ISemanticFileStore) EFS.getStore(file.getLocationURI());
IFileInfo info = new FileInfo();
info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, false);
store.putInfo(info, EFS.SET_ATTRIBUTES, null);
Assert.assertFalse("File should not be read-only",
sfile.fetchResourceInfo(ISemanticFileSystem.RESOURCE_INFO_READ_ONLY, null).isReadOnly());
}
};
workspace.run(runnable, new NullProgressMonitor());
}
/**
*
* @throws Exception
*/
@Test
public void testValidateEdit() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
IFile file = parent.getFile("File1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
final IStatus[] result = new IStatus[1];
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = sf.addFile("File1", TestsContentProviderBase.this.options, monitor);
result[0] = sfile.validateEdit(monitor);
sfile.remove(TestsContentProviderBase.this.options, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
IStatus stat = result[0];
Assert.assertTrue("ValidateEdit should be ok", stat.getSeverity() == IStatus.OK);
file = parent.getFile("File2");
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
stat = sfile.validateRemoteDelete(null);
Assert.assertFalse("ValidateEdit should not be ok", stat.getSeverity() == IStatus.OK);
}
/**
*
* @throws Exception
*/
@Test
public void testValidateRemoteDelete() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
IFile file = parent.getFile("File1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
final IStatus[] result = new IStatus[1];
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = sf.addFile("File1", TestsContentProviderBase.this.options, monitor);
result[0] = sfile.validateRemoteDelete(monitor);
sfile.remove(TestsContentProviderBase.this.options, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
IStatus stat = result[0];
Assert.assertTrue("ValidateRemoteDelete should be ok", stat.getSeverity() == IStatus.OK);
file = parent.getFile("File2");
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
stat = sfile.validateRemoteDelete(null);
Assert.assertFalse("ValidateRemoteDelete should not be ok", stat.getSeverity() == IStatus.OK);
}
/**
*
* @throws Exception
*/
@Test
public void testValidateSave() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
IFile file = parent.getFile("File1");
final ISemanticFolder sf = (ISemanticFolder) parent.getAdapter(ISemanticFolder.class);
final IStatus[] result = new IStatus[1];
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
ISemanticFile sfile = sf.addFile("File1", TestsContentProviderBase.this.options, monitor);
sfile.validateEdit(null);
result[0] = sfile.validateSave();
sfile.remove(TestsContentProviderBase.this.options, monitor);
}
};
workspace.run(runnable, new NullProgressMonitor());
IStatus stat = result[0];
Assert.assertTrue("ValidateSave should be ok", stat.getSeverity() == IStatus.OK);
file = parent.getFile("File2");
ISemanticFile sfile = (ISemanticFile) file.getAdapter(ISemanticFile.class);
stat = sfile.validateSave();
Assert.assertFalse("ValidateSave should not be ok", stat.getSeverity() == IStatus.OK);
}
/**
*
* @throws Exception
*/
@Test
public void testSemanticFileStoreToUri() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
URI uri = EFS.getStore(parent.getLocationURI()).toURI();
Assert.assertEquals("URIs should be equal", uri, parent.getLocationURI());
}
/**
*
* @throws Exception
*/
@Test
public void testConcurrentStoreCreation() throws Exception {
final IFolder root = this.testProject.getFolder("root");
final IFolder parent = root.getFolder("Folder1");
ISemanticFileStore parentStore1 = (ISemanticFileStore) EFS.getStore(parent.getLocationURI());
ISemanticFileStore parentStore2 = (ISemanticFileStore) EFS.getStore(parent.getLocationURI());
Assert.assertFalse(parentStore1.isExists());
Assert.assertFalse(parentStore2.isExists());
parentStore1.mkdir(0, null);
Assert.assertTrue(parentStore1.isExists());
Assert.assertTrue(parentStore2.isExists());
IFile file = parent.getFile("File1");
ISemanticFileStore fileStore1 = (ISemanticFileStore) EFS.getStore(file.getLocationURI());
ISemanticFileStore fileStore2 = (ISemanticFileStore) EFS.getStore(file.getLocationURI());
Assert.assertFalse(fileStore1.isExists());
Assert.assertFalse(fileStore2.isExists());
Util.safeClose(fileStore1.openOutputStream(0, null));
Assert.assertTrue(fileStore1.isExists());
Assert.assertTrue(fileStore2.isExists());
}
}