blob: ce88497a442b2e6ec0aa79e8c8003c8b09365c53 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* 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());
}
}