blob: aebbec3e64e9c55ae9ee7f8cd4c29529e276ddd1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 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.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.PersonProposalProvider;
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, false);
assertOptionsProposalProvider(false, false);
assertOptionsProposalProvider(true, true);
}
private void assertOptionsProposalProvider(boolean isMultiSelect, boolean isPerson) {
taskAttribute.getMetaData().setKind(isPerson ? TaskAttribute.KIND_PEOPLE : TaskAttribute.KIND_DEFAULT);
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();
if (isPerson) {
assertTrue(proposalProvider instanceof PersonProposalProvider);
} else {
assertTrue(proposalProvider instanceof OptionsProposalProvider);
assertEquals(isMultiSelect, ((OptionsProposalProvider) proposalProvider).isMultiSelect());
}
assertNull(toolkit.commandAdapter.getAutoActivationCharacters());
}
}