Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Green2012-03-14 19:20:52 +0000
committerDavid Green2012-03-14 19:20:52 +0000
commit43a1f32f2ef4bab9623fbf70651fcf36bc138782 (patch)
tree80449ee1d3b3d8d18eb96d253bb3d92fb8448ffd /org.eclipse.mylyn.tasks.index.tests
parent3f028a97da934953415e71e2781deb73917859ce (diff)
downloadorg.eclipse.mylyn.tasks-43a1f32f2ef4bab9623fbf70651fcf36bc138782.tar.gz
org.eclipse.mylyn.tasks-43a1f32f2ef4bab9623fbf70651fcf36bc138782.tar.xz
org.eclipse.mylyn.tasks-43a1f32f2ef4bab9623fbf70651fcf36bc138782.zip
bug 373178: content assist for search index does not handle completions with spaces properly
https://bugs.eclipse.org/bugs/show_bug.cgi?id=373178 Change-Id: Iebf157c5534477e3bcfdb0f963b3025b691fd43a
Diffstat (limited to 'org.eclipse.mylyn.tasks.index.tests')
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/.classpath1
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/META-INF/MANIFEST.MF6
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/AbstractTaskListIndexTest.java75
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexTest.java77
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/ui/ContentProposalProviderTest.java184
-rw-r--r--org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/util/MockTestContext.java14
6 files changed, 282 insertions, 75 deletions
diff --git a/org.eclipse.mylyn.tasks.index.tests/.classpath b/org.eclipse.mylyn.tasks.index.tests/.classpath
index e3b5ced49..10fbec0c3 100644
--- a/org.eclipse.mylyn.tasks.index.tests/.classpath
+++ b/org.eclipse.mylyn.tasks.index.tests/.classpath
@@ -5,6 +5,7 @@
<accessrules>
<accessrule kind="accessible" pattern="org/eclipse/mylyn/internal/**"/>
<accessrule kind="accessible" pattern="org/eclipse/mylyn/tasks/tests/**"/>
+ <accessrule kind="accessible" pattern="org/eclipse/mylyn/commons/sdk/**"/>
</accessrules>
</classpathentry>
<classpathentry kind="src" path="src"/>
diff --git a/org.eclipse.mylyn.tasks.index.tests/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.index.tests/META-INF/MANIFEST.MF
index 2f3faa0ba..2d84fbcfa 100644
--- a/org.eclipse.mylyn.tasks.index.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.tasks.index.tests/META-INF/MANIFEST.MF
@@ -5,13 +5,15 @@ Bundle-SymbolicName: org.eclipse.mylyn.tasks.index.tests
Bundle-Version: 3.7.0.qualifier
Bundle-Vendor: Eclipse.org
Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.junit;bundle-version="4.5.0",
+Require-Bundle: org.junit;bundle-version="4.5.0",
org.eclipse.core.runtime,
org.eclipse.mylyn.commons.core,
+ org.eclipse.mylyn.commons.sdk.util,
org.eclipse.mylyn.tasks.core,
org.eclipse.mylyn.tasks.index.core,
org.eclipse.mylyn.tasks.index.ui,
- org.eclipse.mylyn.tasks.tests
+ org.eclipse.mylyn.tasks.tests,
+ org.eclipse.jface
Export-Package: org.eclipse.mylyn.internal.tasks.index.tests;x-internal:=true,
org.eclipse.mylyn.internal.tasks.index.tests.util;x-internal:=true
diff --git a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/AbstractTaskListIndexTest.java b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/AbstractTaskListIndexTest.java
new file mode 100644
index 000000000..8e4973604
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/AbstractTaskListIndexTest.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.index.tests;
+
+import static org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.createTempFolder;
+import static org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.deleteFolderRecursively;
+import static org.junit.Assert.assertFalse;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex;
+import org.eclipse.mylyn.internal.tasks.index.tests.util.MockTestContext;
+import org.eclipse.mylyn.tasks.core.IRepositoryManager;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+
+@Ignore
+public abstract class AbstractTaskListIndexTest {
+
+ protected MockTestContext context;
+
+ protected TaskListIndex index;
+
+ protected File tempDir;
+
+ @Before
+ public void setup() throws IOException {
+ tempDir = createTempFolder(getClass().getSimpleName());
+
+ context = new MockTestContext();
+ }
+
+ @After
+ public void tearDown() {
+ disposeIndex();
+ if (tempDir != null) {
+ deleteFolderRecursively(tempDir);
+ assertFalse(tempDir.exists());
+ }
+ if (context != null) {
+ context.dispose();
+ context = null;
+ }
+ }
+
+ protected void disposeIndex() {
+ if (index != null) {
+ try {
+ index.waitUntilIdle();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ index.close();
+ index = null;
+ }
+ }
+
+ protected void setupIndex() {
+ index = new TaskListIndex(context.getTaskList(), context.getDataManager(),
+ (IRepositoryManager) context.getRepositoryManager(), tempDir, 0L);
+ index.setDefaultField(TaskListIndex.FIELD_CONTENT);
+ index.setReindexDelay(0L);
+ }
+}
diff --git a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexTest.java b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexTest.java
index c647c3d59..dfe671b9e 100644
--- a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexTest.java
+++ b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/TaskListIndexTest.java
@@ -12,6 +12,8 @@
package org.eclipse.mylyn.internal.tasks.index.tests;
import static junit.framework.Assert.assertEquals;
+import static org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.createTempFolder;
+import static org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.deleteFolderRecursively;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -30,7 +32,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import java.util.logging.Logger;
import junit.framework.Assert;
@@ -40,21 +41,17 @@ import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
import org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex;
import org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex.TaskCollector;
-import org.eclipse.mylyn.internal.tasks.index.tests.util.MockTestContext;
-import org.eclipse.mylyn.tasks.core.IRepositoryManager;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.data.DefaultTaskSchema;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.core.data.TaskMapper;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Test;
/**
* @author David Green
*/
-public class TaskListIndexTest {
+public class TaskListIndexTest extends AbstractTaskListIndexTest {
private static final org.eclipse.mylyn.tasks.core.data.AbstractTaskSchema.Field FIELD_SUMMARY = DefaultTaskSchema.getInstance().SUMMARY;
@@ -74,70 +71,6 @@ public class TaskListIndexTest {
}
}
- private MockTestContext context;
-
- private TaskListIndex index;
-
- private File tempDir;
-
- @Before
- public void setup() throws IOException {
- tempDir = createTmpDir();
-
- context = new MockTestContext();
- }
-
- private File createTmpDir() throws IOException {
- File tempDir = File.createTempFile(TaskListIndexTest.class.getSimpleName(), ".tmp");
- tempDir.delete();
- tempDir.mkdirs();
-
- assertTrue(tempDir.exists() && tempDir.isDirectory());
- return tempDir;
- }
-
- @After
- public void tearDown() {
- disposeIndex();
- if (tempDir != null) {
- delete(tempDir);
- assertFalse(tempDir.exists());
- }
- }
-
- private void disposeIndex() {
- if (index != null) {
- try {
- index.waitUntilIdle();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- index.close();
- index = null;
- }
- }
-
- private void delete(File file) {
- if (file.isDirectory()) {
- File[] children = file.listFiles();
- if (children != null) {
- for (File child : children) {
- delete(child);
- }
- }
- }
- if (!file.delete()) {
- Logger.getLogger(TaskListIndexTest.class.getName()).severe("Cannot delete: " + file);
- }
- }
-
- private void setupIndex() {
- index = new TaskListIndex(context.getTaskList(), context.getDataManager(),
- (IRepositoryManager) context.getRepositoryManager(), tempDir, 0L);
- index.setDefaultField(TaskListIndex.FIELD_CONTENT);
- index.setReindexDelay(0L);
- }
-
@Test
public void testMatchesLocalTaskOnSummary() throws InterruptedException {
setupIndex();
@@ -428,7 +361,7 @@ public class TaskListIndexTest {
assertCanFindTask(task);
- File newLocation = createTmpDir();
+ File newLocation = createTempFolder(TaskListIndexTest.class.getSimpleName());
try {
assertEquals(0, newLocation.list().length);
@@ -440,7 +373,7 @@ public class TaskListIndexTest {
assertFalse(newLocation.list().length == 0);
} finally {
disposeIndex();
- delete(newLocation);
+ deleteFolderRecursively(newLocation);
assertFalse(newLocation.exists());
}
}
diff --git a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/ui/ContentProposalProviderTest.java b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/ui/ContentProposalProviderTest.java
new file mode 100644
index 000000000..6215edfb2
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/ui/ContentProposalProviderTest.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.index.tests.ui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Collections;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.mylyn.commons.core.DelegatingProgressMonitor;
+import org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex;
+import org.eclipse.mylyn.internal.tasks.index.tests.AbstractTaskListIndexTest;
+import org.eclipse.mylyn.internal.tasks.index.ui.AbstractIndexReference;
+import org.eclipse.mylyn.internal.tasks.index.ui.ContentProposalProvider;
+import org.eclipse.mylyn.internal.tasks.index.ui.ContentProposalProvider.ProposalContentState;
+import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link ContentProposalProvider}
+ *
+ * @author David Green
+ */
+public class ContentProposalProviderTest extends AbstractTaskListIndexTest {
+
+ private ContentProposalProvider proposalProvider;
+
+ @Override
+ @Before
+ public void setup() throws IOException {
+ super.setup();
+
+ setupIndex();
+
+ proposalProvider = new ContentProposalProvider(context.getTaskList(), new AbstractIndexReference() {
+
+ @Override
+ public TaskListIndex index() {
+ return index;
+ }
+ });
+ }
+
+ @Test
+ public void testComputeProposalContentState_SimpleProposal() {
+ ProposalContentState state = proposalProvider.computeProposalContentState("one tw", 6);
+ assertNotNull(state);
+ assertEquals("one ", state.beforePrefixContent);
+ assertEquals("", state.fieldPrefix);
+ assertEquals("tw", state.prefix);
+ assertEquals("", state.suffix);
+ }
+
+ @Test
+ public void testComputeProposalContentState_FieldValueProposal() {
+ String content = "one person:";
+ ProposalContentState state = proposalProvider.computeProposalContentState(content, content.length());
+ assertNotNull(state);
+ assertEquals("one person:", state.beforePrefixContent);
+ assertEquals("person", state.fieldPrefix);
+ assertEquals("", state.prefix);
+ assertEquals("", state.suffix);
+ }
+
+ @Test
+ public void testComputeProposalContentState_FieldValueProposalMidRange() {
+ String content = "one person:";
+ String content2 = " foo";
+ ProposalContentState state = proposalProvider.computeProposalContentState(content + content2, content.length());
+ assertNotNull(state);
+ assertEquals("one person:", state.beforePrefixContent);
+ assertEquals("person", state.fieldPrefix);
+ assertEquals("", state.prefix);
+ assertEquals(" foo", state.suffix);
+ }
+
+ @Test
+ public void testComputeProposalContentState_SimpleProposalMidRange() {
+ String content = "one tw";
+ String content2 = " foo";
+ ProposalContentState state = proposalProvider.computeProposalContentState(content + content2, content.length());
+ assertNotNull(state);
+ assertEquals("one ", state.beforePrefixContent);
+ assertEquals("", state.fieldPrefix);
+ assertEquals("tw", state.prefix);
+ assertEquals(" foo", state.suffix);
+ }
+
+ @Test
+ public void testGetProposals_FieldName() {
+ IContentProposal[] proposals = proposalProvider.getProposals("per", 3);
+ assertNotNull(proposals);
+ assertEquals(1, proposals.length);
+ assertEquals("person:", proposals[0].getContent());
+ assertEquals(7, proposals[0].getCursorPosition());
+ }
+
+ @Test
+ public void testGetProposals_PersonSuggest() throws CoreException {
+ ITask task = context.createRepositoryTask();
+ String owner = task.getOwner();
+ assertNotNull(owner);
+ assertTrue(owner.trim().length() > 0);
+ assertEquals(owner.trim(), owner);
+
+ IContentProposal[] proposals = proposalProvider.getProposals("person:", 7);
+ assertNotNull(proposals);
+ assertEquals(1, proposals.length);
+ final String expectedValue = "person:" + owner;
+ assertEquals(expectedValue, proposals[0].getContent());
+ assertEquals(expectedValue.length(), proposals[0].getCursorPosition());
+ assertEquals(owner, proposals[0].getLabel());
+ }
+
+ @Test
+ public void testGetProposals_PersonSuggestWithSpace() throws CoreException, InterruptedException {
+ ITask task = context.createRepositoryTask();
+
+ TaskData taskData = context.getDataManager().getTaskData(task);
+
+ // sanity
+ assertNotNull(taskData);
+ assertNotNull(taskData.getRepositoryUrl());
+
+ // setup owner with space
+ final String ownerName = "Jane Doe";
+ taskData.getRoot().getMappedAttribute(TaskAttribute.USER_ASSIGNED).setValue(ownerName);
+
+ context.getDataManager().putSubmittedTaskData(task, taskData, new DelegatingProgressMonitor());
+
+ context.getTaskList().notifyElementsChanged(Collections.singleton(task));
+
+ index.waitUntilIdle();
+
+ String owner = task.getOwner();
+ assertNotNull(owner);
+ assertTrue(owner.trim().length() > 0);
+ assertEquals(owner.trim(), owner);
+ assertEquals(ownerName, owner);
+
+ IContentProposal[] proposals = proposalProvider.getProposals("person:", 7);
+ assertNotNull(proposals);
+ assertEquals(1, proposals.length);
+ final String expectedValue = "person:\"" + owner + "\"";
+ assertEquals(expectedValue, proposals[0].getContent());
+ assertEquals(expectedValue.length(), proposals[0].getCursorPosition());
+ assertEquals(owner, proposals[0].getLabel());
+ }
+
+ @Test
+ public void testGetProposals_PersonSuggest_MidStream() throws CoreException {
+ ITask task = context.createRepositoryTask();
+ String owner = task.getOwner();
+ assertNotNull(owner);
+ assertTrue(owner.trim().length() > 0);
+ assertEquals(owner.trim(), owner);
+
+ final String content = "person:";
+ String content2 = " after";
+ IContentProposal[] proposals = proposalProvider.getProposals(content + content2, content.length());
+ assertNotNull(proposals);
+ assertEquals(1, proposals.length);
+ final String expectedValue = content + owner + content2;
+ assertEquals(expectedValue, proposals[0].getContent());
+ assertEquals((content + owner).length(), proposals[0].getCursorPosition());
+ assertEquals(owner, proposals[0].getLabel());
+ }
+}
diff --git a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/util/MockTestContext.java b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/util/MockTestContext.java
index 8921cb045..d183ab944 100644
--- a/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/util/MockTestContext.java
+++ b/org.eclipse.mylyn.tasks.index.tests/src/org/eclipse/mylyn/internal/tasks/index/tests/util/MockTestContext.java
@@ -11,12 +11,15 @@
package org.eclipse.mylyn.internal.tasks.index.tests.util;
+import java.io.File;
+import java.io.IOException;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.commons.core.DelegatingProgressMonitor;
+import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector;
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
@@ -63,7 +66,9 @@ public class MockTestContext {
private final FullMockRepositoryConnector mockRepositoryConnector;
- public MockTestContext() {
+ private final File dataDir;
+
+ public MockTestContext() throws IOException {
taskList = new TaskList();
repositoryManager = new TaskRepositoryManager();
@@ -79,12 +84,15 @@ public class MockTestContext {
repositoryManager.addRepository(localRepository);
dataStore = new TaskDataStore(repositoryManager);
+
activityManager = new TaskActivityManager(repositoryManager, taskList);
repositoryModel = new RepositoryModel(taskList, repositoryManager);
synchronizationManger = new SynchronizationManger(repositoryModel);
dataManager = new TaskDataManager(dataStore, repositoryManager, taskList, activityManager,
synchronizationManger);
+ dataDir = CommonTestUtil.createTempFolder(MockTestContext.class.getSimpleName());
+ dataManager.setDataPath(dataDir.getAbsolutePath());
}
public TaskList getTaskList() {
@@ -174,4 +182,8 @@ public class MockTestContext {
getMockRepository().setRepositoryUrl(newUrl);
getRepositoryManager().notifyRepositoryUrlChanged(getMockRepository(), oldUrl);
}
+
+ public void dispose() {
+ CommonTestUtil.deleteFolderRecursively(dataDir);
+ }
}

Back to the top