Bug 376601 - [sfs] Implement additional unit tests
diff --git a/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestCacheService.java b/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestCacheService.java
index 39c9cc3..ac04743 100644
--- a/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestCacheService.java
+++ b/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestCacheService.java
@@ -445,6 +445,28 @@
 	}
 
 	/**
+	 * @throws Exception
+	 */
+	@Test
+	public void testEmptyContentFile() throws Exception {
+		ICacheService service = new FileCacheServiceFactory().getCacheService();
+
+		IPath path = new Path("/test4/file.txt");
+		String content = "test";
+		InputStream input = new ByteArrayInputStream(content.getBytes("UTF-8"));
+
+		writeToCache(service, path, input);
+
+		readFromCache(service, path, content);
+
+		InputStream input2 = new ByteArrayInputStream(new byte[0]);
+
+		writeToCache(service, path, input2);
+
+		readFromCache(service, path, "");
+	}
+
+	/**
 	 * @param service
 	 * @param path
 	 * @throws CoreException
@@ -633,6 +655,9 @@
 		byte b[] = new byte[content.length() + 2];
 		int size = is.read(b);
 
+		if (size == -1 && content.length() == 0) {
+			return;
+		}
 		Assert.assertEquals(content.length(), size);
 
 		for (int i = 0; i < size; i++) {
diff --git a/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestsLinkedResources.java b/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestsLinkedResources.java
index 6180648..b5118a0 100644
--- a/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestsLinkedResources.java
+++ b/tests/org.eclipse.core.resources.semantic.test/src/org/eclipse/core/resources/semantic/test/TestsLinkedResources.java
@@ -17,6 +17,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLEncoder;
+import java.util.Map;
 
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
@@ -39,7 +40,9 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.team.core.RepositoryProvider;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -293,6 +296,50 @@
 	}
 
 	@Test
+	public void testAddProjectQueryLinkWithProviderToSFS() throws Exception {
+		final IProject project = workspace.getRoot().getProject("LinkedProject");
+
+		if (project.exists()) {
+			throw new IllegalStateException("Project exists");
+		}
+
+		IWorkspaceRunnable myRunnable = new IWorkspaceRunnable() {
+			public void run(IProgressMonitor monitor) throws CoreException {
+				IProject project = workspace.getRoot().getProject("LinkedProject");
+
+				IProjectDescription description = workspace.newProjectDescription("LinkedProject");
+
+				try {
+					URI uri = new URI(ISemanticFileSystem.SCHEME, null, "/LinkedProject", "type=project;create=true;provider="
+							+ "org.eclipse.core.resources.semantic.test.provider.MemoryCachingTestContentProvider", null);
+					description.setLocationURI(uri);
+				} 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);
+
+				Map<QualifiedName, String> props = spr.getPersistentProperties();
+
+				props.size();
+
+				project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+
+			}
+
+		};
+
+		workspace.run(myRunnable, workspace.getRoot(), IWorkspace.AVOID_UPDATE, null);
+
+	}
+
+	@Test
 	public void testAddQueryLinkWithProviderToSFS() throws Exception {
 		final IFolder folder = this.testProject.getFolder("querytest2");