diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java index 3c943299f0d6..1cc9733569d3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java @@ -25,7 +25,6 @@ import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.actionSystem.ex.AnActionListener; import com.intellij.openapi.actionSystem.ex.CustomComponentAction; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.keymap.ex.KeymapManagerEx; import com.intellij.openapi.project.DumbAwareRunnable; @@ -47,6 +46,7 @@ import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.update.UiNotifyConnector; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -1273,4 +1273,9 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar { myAddSeparatorFirst = addSeparatorFirst; myUpdater.updateActions(false, true); } + + @TestOnly + public Presentation getPresentation(AnAction action) { + return myPresentationFactory.getPresentation(action); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ToolbarUpdater.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ToolbarUpdater.java index e9a35a33b6e6..e5574d6a18c9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ToolbarUpdater.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ToolbarUpdater.java @@ -95,15 +95,15 @@ public abstract class ToolbarUpdater implements Activatable { private void updateActions(boolean now, final boolean transparentOnly, final boolean forced) { final Runnable updateRunnable = new MyUpdateRunnable(this, transparentOnly, forced); + final Application app = ApplicationManager.getApplication(); - if (now) { + if (now || app.isUnitTestMode()) { updateRunnable.run(); } else { - final Application app = ApplicationManager.getApplication(); final IdeFocusManager fm = IdeFocusManager.getInstance(null); - if (!app.isUnitTestMode() && !app.isHeadlessEnvironment()) { + if (!app.isHeadlessEnvironment()) { if (app.isDispatchThread()) { fm.doWhenFocusSettlesDown(updateRunnable); } diff --git a/platform/testFramework/src/com/intellij/testFramework/TestActionEvent.java b/platform/testFramework/src/com/intellij/testFramework/TestActionEvent.java index 0f5ab8b3c8ae..23dc823dcd2d 100644 --- a/platform/testFramework/src/com/intellij/testFramework/TestActionEvent.java +++ b/platform/testFramework/src/com/intellij/testFramework/TestActionEvent.java @@ -33,6 +33,10 @@ public class TestActionEvent extends AnActionEvent { this(DataManager.getInstance().getDataContext(), action); } + public TestActionEvent(Presentation presentation) { + super(null, DataManager.getInstance().getDataContext(), "", presentation, ActionManager.getInstance(), 0); + } + public TestActionEvent() { super(null, DataManager.getInstance().getDataContext(), "", new Presentation(), ActionManager.getInstance(), 0); } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskUiTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskUiTest.java index b63382fbb36a..25e844cc9efa 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskUiTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskUiTest.java @@ -15,8 +15,9 @@ */ package com.intellij.tasks; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.ide.ui.customization.CustomActionsSchema; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl; import com.intellij.tasks.actions.SwitchTaskCombo; import com.intellij.tasks.config.TaskSettings; import com.intellij.testFramework.IdeaTestCase; @@ -31,19 +32,32 @@ public class TaskUiTest extends CodeInsightFixtureTestCase { public void testTaskComboVisible() throws Exception { - TaskManager manager = TaskManager.getManager(getProject()); - SwitchTaskCombo combo = new SwitchTaskCombo(); + SwitchTaskCombo combo = null; + ActionGroup group = (ActionGroup)CustomActionsSchema.getInstance().getCorrectedAction(IdeActions.GROUP_MAIN_TOOLBAR); + ActionToolbarImpl toolbar = (ActionToolbarImpl)ActionManager.getInstance().createActionToolbar(ActionPlaces.MAIN_TOOLBAR, group, true); + AnAction[] children = group.getChildren(new TestActionEvent()); + for (AnAction child : children) { + if (child instanceof ActionGroup) { + AnAction[] actions = ((ActionGroup)child).getChildren(new TestActionEvent()); + for (AnAction action : actions) { + if (action instanceof SwitchTaskCombo) { + combo = (SwitchTaskCombo)action; + } + } + } + } + TaskManager manager = TaskManager.getManager(getProject()); LocalTask defaultTask = manager.getActiveTask(); assertTrue(defaultTask.isDefault()); assertEquals(defaultTask.getCreated(), defaultTask.getUpdated()); - Presentation presentation = doTest(combo); + Presentation presentation = doTest(combo, toolbar); assertFalse(presentation.isVisible()); try { TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO = true; - presentation = doTest(combo); + presentation = doTest(combo, toolbar); assertTrue(presentation.isVisible()); } finally { @@ -53,14 +67,14 @@ public class TaskUiTest extends CodeInsightFixtureTestCase { LocalTask task = manager.createLocalTask("test"); manager.activateTask(task, false); - presentation = doTest(combo); + presentation = doTest(combo, toolbar); assertTrue(presentation.isVisible()); manager.activateTask(defaultTask, false); task = manager.getActiveTask(); assertTrue(task.isDefault()); - presentation = doTest(combo); + presentation = doTest(combo, toolbar); if (!presentation.isVisible()) { LocalTask activeTask = manager.getActiveTask(); System.out.println(activeTask); @@ -70,8 +84,8 @@ public class TaskUiTest extends CodeInsightFixtureTestCase { } } - private static Presentation doTest(AnAction action) { - TestActionEvent event = new TestActionEvent(action); + private static Presentation doTest(AnAction action, ActionToolbarImpl toolbar) { + TestActionEvent event = new TestActionEvent(toolbar.getPresentation(action)); action.update(event); return event.getPresentation(); }