diff options
author | Sam Davis | 2015-03-11 18:44:07 +0000 |
---|---|---|
committer | Sam Davis | 2015-03-16 18:10:12 +0000 |
commit | 67d10aa9c62014237358980d65be8c5f7b4ec8f0 (patch) | |
tree | faf3da4fc17140cfe2ef15eac56a0004d4d7dc54 | |
parent | dd62414dd526d7a08da6f8f3ecd85dd52d049e2f (diff) | |
download | org.eclipse.mylyn.tasks-e_4_4_m_3_15_x.tar.gz org.eclipse.mylyn.tasks-e_4_4_m_3_15_x.tar.xz org.eclipse.mylyn.tasks-e_4_4_m_3_15_x.zip |
378032: BooleanAttributeEditor should initialize attribute to falseR_3_15_0e_4_4_m_3_15_x
Change-Id: I29c92306b8055e6d9867f77ef222f1d301020443
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=378032
2 files changed, 48 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/AttributeEditorTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/AttributeEditorTest.java index 17e46b94b..73a398106 100644 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/AttributeEditorTest.java +++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/AttributeEditorTest.java @@ -11,6 +11,8 @@ package org.eclipse.mylyn.tasks.tests.ui; +import java.util.concurrent.atomic.AtomicBoolean; + import junit.framework.TestCase; import org.eclipse.core.runtime.CoreException; @@ -23,12 +25,15 @@ 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.core.data.TaskDataModelEvent; +import org.eclipse.mylyn.tasks.core.data.TaskDataModelListener; import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector; import org.eclipse.mylyn.tasks.tests.connector.MockTask; import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.forms.widgets.FormToolkit; @@ -212,12 +217,43 @@ public class AttributeEditorTest extends TestCase { } public void testBooleanAttribute() throws Exception { + FormToolkit toolkit = new FormToolkit(Display.getDefault()); TaskAttribute attribute = new TaskAttribute(taskData.getRoot(), "a.required.boolean"); attribute.getMetaData().setType(TaskAttribute.TYPE_BOOLEAN); attribute.getMetaData().setRequired(true); + final AtomicBoolean firedAttributeChanged = new AtomicBoolean(); + manager.addModelListener(new TaskDataModelListener() { + @Override + public void attributeChanged(TaskDataModelEvent event) { + firedAttributeChanged.set(true); + } + }); MockBooleanAttributeEditor editor = new MockBooleanAttributeEditor(manager, attribute); assertFalse(editor.needsValue()); + assertFalse(editor.getValue()); + assertFalse(attribute.hasValue()); + editor.createControl(WorkbenchUtil.getShell(), toolkit); + assertFalse(attribute.hasValue()); + processAllEvents(); + assertTrue(attribute.hasValue()); + assertEquals(Boolean.toString(false), attribute.getValue()); + assertFalse(firedAttributeChanged.get()); + + attribute.setValue(Boolean.toString(true)); + editor = new MockBooleanAttributeEditor(manager, attribute); + editor.createControl(WorkbenchUtil.getShell(), toolkit); + processAllEvents(); + assertEquals(Boolean.toString(true), attribute.getValue()); + assertFalse(firedAttributeChanged.get()); + } + + /** + * wait for the async call in BooleanAttributeEditor to run + */ + private void processAllEvents() { + while (Display.getDefault().readAndDispatch()) { + } } private TaskDataModel createManager() throws Exception { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/BooleanAttributeEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/BooleanAttributeEditor.java index 4e2df2ffc..4b7d0606d 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/BooleanAttributeEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/BooleanAttributeEditor.java @@ -19,6 +19,7 @@ import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.FormToolkit; /** @@ -56,6 +57,17 @@ public class BooleanAttributeEditor extends AbstractAttributeEditor { button.setToolTipText(getDescription()); refresh(); setControl(button); + if (!getTaskAttribute().hasValue()) { + // set initial value to false to match what the editor shows + // use asyncExec to ensure this happens after decorating, otherwise this appears as an incoming change + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + if (!getTaskAttribute().hasValue()) { + getAttributeMapper().setBooleanValue(getTaskAttribute(), false); + } + } + }); + } } @Override |