diff options
author | chris.poon | 2015-09-01 00:23:54 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2015-09-02 22:16:54 +0000 |
commit | 304393bd6fde6b648d93870a825377a3b7eb6872 (patch) | |
tree | 91b1632c7c38edf4e02bcd7e716dd0050c45d8e0 /org.eclipse.mylyn.tasks.ui.tests | |
parent | 9f4de2dba03de7b00c4db82f7e14ede218697447 (diff) | |
download | org.eclipse.mylyn.tasks-304393bd6fde6b648d93870a825377a3b7eb6872.tar.gz org.eclipse.mylyn.tasks-304393bd6fde6b648d93870a825377a3b7eb6872.tar.xz org.eclipse.mylyn.tasks-304393bd6fde6b648d93870a825377a3b7eb6872.zip |
476383: add an attribute editor for label fields
Add a text attribute editor that supports single and multi values and
has content assist
Change-Id: I9e53666e713abb1affbb7b6376c5af7192174ddb
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=476383
Signed-off-by: chris.poon <chris.poon@tasktop.com>
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui.tests')
2 files changed, 267 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/editors/LabelsAttributeEditorTest.java b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/editors/LabelsAttributeEditorTest.java new file mode 100644 index 000000000..36c73ac3e --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/editors/LabelsAttributeEditorTest.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2015 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.ui.editors; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.eclipse.mylyn.internal.tasks.core.data.TaskDataState; +import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; +import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; +import org.eclipse.mylyn.tasks.core.data.TaskData; +import org.eclipse.mylyn.tasks.core.data.TaskDataModel; +import org.eclipse.mylyn.tasks.tests.TaskTestUtil; +import org.eclipse.mylyn.tasks.tests.connector.MockTask; +import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.ColumnSpan; +import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.RowSpan; +import org.junit.Before; +import org.junit.Test; + +import com.google.common.collect.ImmutableList; + +public class LabelsAttributeEditorTest { + + private TaskData taskData; + + private TaskDataModel model; + + private LabelsAttributeEditor editor; + + private TaskAttribute singleSelectAttribute; + + private TaskAttribute multiSelectAttribute; + + @Before + public void setUp() { + TaskRepository repository = TaskTestUtil.createMockRepository(); + taskData = new TaskData(new TaskAttributeMapper(repository), "kind", "url", "id"); + MockTask task = new MockTask("taskId"); + TaskDataState state = new TaskDataState("kind", "url", "taskId"); + state.setEditsData(taskData); + state.setLocalTaskData(taskData); + model = new TaskDataModel(repository, task, state); + } + + @Test + public void testSingleSelectEmpty() { + createSingleSelect(""); + assertSingleSelectValue(""); + editor.setValue("test"); + assertSingleSelectValue("test"); + editor.setValue(""); + assertSingleSelectValue(""); + } + + @Test + public void testSingleSelect() { + createSingleSelect("test option"); + assertSingleSelectValue("test option"); + editor.setValue("testing option"); + assertSingleSelectValue("testing option"); + } + + @Test + public void testSingleSelectWithSeparator() { + createSingleSelect("one,two , three, four"); + assertSingleSelectValue("one,two , three, four"); + editor.setValue("one,two , three, four ,five ,"); + assertSingleSelectValue("one,two , three, four ,five ,"); + } + + @Test + public void testMultiSelectEmpty() { + createMultiSelect(ImmutableList.<String> of()); + assertMultiSelectValue("", ImmutableList.<String> of()); + editor.setValue("one,two"); + assertMultiSelectValue("one, two", ImmutableList.of("one", "two")); + editor.setValue(""); + assertMultiSelectValue("", ImmutableList.<String> of()); + } + + @Test + public void testMultiSelect() { + createMultiSelect(ImmutableList.of("one", "two")); + assertMultiSelectValue("one, two", ImmutableList.of("one", "two")); + editor.setValue("one,two,three,four"); + assertMultiSelectValue("one, two, three, four", ImmutableList.of("one", "two", "three", "four")); + editor.setValue("one"); + assertMultiSelectValue("one", ImmutableList.of("one")); + editor.setValue("one,two , three, four ,five ,, ,"); + assertMultiSelectValue("one, two, three, four, five", ImmutableList.of("one", "two", "three", "four", "five")); + } + + private void createSingleSelect(String value) { + singleSelectAttribute = taskData.getRoot().createAttribute("singleSelect"); + singleSelectAttribute.getMetaData().setType(TaskAttribute.TYPE_SINGLE_SELECT); + singleSelectAttribute.setValue(value); + editor = new LabelsAttributeEditor(model, singleSelectAttribute); + assertLayoutHint(false); + } + + private void createMultiSelect(List<String> values) { + multiSelectAttribute = taskData.getRoot().createAttribute("multiSelect"); + multiSelectAttribute.getMetaData().setType(TaskAttribute.TYPE_MULTI_SELECT); + multiSelectAttribute.setValues(ImmutableList.copyOf(values)); + editor = new LabelsAttributeEditor(model, multiSelectAttribute); + assertLayoutHint(true); + } + + private void assertSingleSelectValue(String value) { + assertEquals(value, editor.getValue()); + assertEquals(value, singleSelectAttribute.getValue()); + } + + private void assertLayoutHint(boolean isMultiSelect) { + assertEquals(ColumnSpan.SINGLE, editor.getLayoutHint().columnSpan); + assertEquals((isMultiSelect ? RowSpan.MULTIPLE : RowSpan.SINGLE), editor.getLayoutHint().rowSpan); + } + + private void assertMultiSelectValue(String stringValue, List<String> values) { + assertEquals(stringValue, editor.getValue()); + assertEquals(values, multiSelectAttribute.getValues()); + } + +} diff --git a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorToolkitTest.java b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorToolkitTest.java new file mode 100644 index 000000000..1ff7ac11b --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorToolkitTest.java @@ -0,0 +1,132 @@ +/******************************************************************************* + * Copyright (c) 2015 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.tasks.ui.editors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.eclipse.jface.fieldassist.IContentProposalProvider; +import org.eclipse.mylyn.commons.workbench.WorkbenchUtil; +import org.eclipse.mylyn.commons.workbench.editors.CommonTextSupport; +import org.eclipse.mylyn.internal.tasks.ui.OptionsProposalProvider; +import org.eclipse.mylyn.internal.tasks.ui.editors.LabelsAttributeEditor; +import org.eclipse.mylyn.internal.tasks.ui.editors.MultiSelectionAttributeEditor; +import org.eclipse.mylyn.internal.tasks.ui.editors.SingleSelectionAttributeEditor; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; +import org.eclipse.mylyn.tasks.core.data.TaskData; +import org.eclipse.mylyn.tasks.core.data.TaskDataModel; +import org.eclipse.mylyn.tasks.tests.TaskTestUtil; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +public class AttributeEditorToolkitTest { + public class TestAttributeEditorToolkit extends AttributeEditorToolkit { + + private ContentAssistCommandAdapter commandAdapter; + + TestAttributeEditorToolkit(CommonTextSupport textSupport) { + super(textSupport); + } + + @Override + public ContentAssistCommandAdapter createContentAssistCommandAdapter(Control control, + IContentProposalProvider proposalProvider) { + commandAdapter = super.createContentAssistCommandAdapter(control, proposalProvider); + return commandAdapter; + } + + @Override + public IContentProposalProvider createContentProposalProvider(AbstractAttributeEditor editor) { + return super.createContentProposalProvider(editor); + } + } + + private TestAttributeEditorToolkit toolkit; + + private TaskAttribute taskAttribute; + + private final FormToolkit formToolkit = new FormToolkit(Display.getCurrent()); + + private final TaskDataModel taskDataModel = mock(TaskDataModel.class); + + @SuppressWarnings("restriction") + @Before + public void setUp() { + CommonTextSupport textSupport = mock(CommonTextSupport.class); + toolkit = spy(new TestAttributeEditorToolkit(textSupport)); + TaskData taskData = TaskTestUtil.createMockTaskData("1"); + taskAttribute = taskData.getRoot(); + when(taskDataModel.getTaskData()).thenReturn(taskData); + } + + @After + public void tearDown() { + formToolkit.dispose(); + } + + @Test + public void testAdaptSingleSelectionAttributeEditor() { + SingleSelectionAttributeEditor editor = new SingleSelectionAttributeEditor(taskDataModel, taskAttribute); + assertNoOptionsProposalProvider(editor); + } + + @Test + public void testAdaptMultiSelectionAttributeEditor() { + MultiSelectionAttributeEditor editor = new MultiSelectionAttributeEditor(taskDataModel, taskAttribute); + assertNoOptionsProposalProvider(editor); + } + + private void assertNoOptionsProposalProvider(AbstractAttributeEditor editor) { + editor.createControl(WorkbenchUtil.getShell(), formToolkit); + toolkit.adapt(editor); + verify(toolkit, never()).createContentProposalProvider(any(AbstractAttributeEditor.class)); + verify(toolkit, never()).createContentAssistCommandAdapter(any(Control.class), + any(IContentProposalProvider.class)); + } + + @Test + public void testAdaptLabelsAttributeEditor() { + assertOptionsProposalProvider(true); + assertOptionsProposalProvider(false); + } + + private void assertOptionsProposalProvider(boolean isMultiSelect) { + taskAttribute.getMetaData().setType( + isMultiSelect ? TaskAttribute.TYPE_MULTI_SELECT : TaskAttribute.TYPE_SINGLE_SELECT); + LabelsAttributeEditor editor = new LabelsAttributeEditor(taskDataModel, taskAttribute); + editor.createControl(WorkbenchUtil.getShell(), formToolkit); + toolkit.adapt(editor); + + verify(toolkit).createContentProposalProvider(editor); + ArgumentCaptor<IContentProposalProvider> providerCaptor = ArgumentCaptor.forClass(IContentProposalProvider.class); + verify(toolkit).createContentAssistCommandAdapter(eq(editor.getControl()), providerCaptor.capture()); + IContentProposalProvider proposalProvider = providerCaptor.getValue(); + assertTrue(proposalProvider instanceof OptionsProposalProvider); + assertEquals(isMultiSelect, ((OptionsProposalProvider) proposalProvider).isMultiSelect()); + assertNull(toolkit.commandAdapter.getAutoActivationCharacters()); + } + +} |