blob: 1ff7ac11b289e90aee61e1cb9f36cb1f2579f308 [file] [log] [blame]
/*******************************************************************************
* 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());
}
}