diff options
author | David Green | 2012-03-14 19:20:52 +0000 |
---|---|---|
committer | David Green | 2012-03-14 19:20:52 +0000 |
commit | 43a1f32f2ef4bab9623fbf70651fcf36bc138782 (patch) | |
tree | 80449ee1d3b3d8d18eb96d253bb3d92fb8448ffd /org.eclipse.mylyn.tasks.index.tests | |
parent | 3f028a97da934953415e71e2781deb73917859ce (diff) | |
download | org.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')
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); + } } |