funcTests: stability fixes

This commit is contained in:
Kirill Kalishev
2011-08-22 14:19:31 +04:00
parent f4a6bea924
commit 1c18f1b35d
4 changed files with 107 additions and 42 deletions
@@ -1,2 +1,3 @@
%cd ../community/platform/funcTests/project1/module1/scripts
%include selectIn/projectView.ijs
@@ -22,9 +22,11 @@ import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ProjectManagerAdapter;
import com.intellij.openapi.util.BusyObject;
import com.intellij.util.containers.HashSet;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -59,34 +61,50 @@ public class UiActivityMonitor implements ApplicationComponent {
}
public void addActivity(@NotNull Project project, Object activity) {
if (!hasObjectFor(project)) {
Project[] open = ProjectManager.getInstance().getOpenProjects();
for (Project each : open) {
if (each == project) {
initBusyObjectFor(project);
break;
public void addActivity(@NotNull final Project project, final Object activity) {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
if (!hasObjectFor(project)) {
Project[] open = ProjectManager.getInstance().getOpenProjects();
for (Project each : open) {
if (each == project) {
initBusyObjectFor(project);
break;
}
}
}
_getBusy(project).addActivity(activity);
}
}
_getBusy(project).addActivity(activity);
});
}
boolean hasObjectFor(Project project) {
return myObjects.containsKey(project);
public void removeActivity(@NotNull final Project project, final Object activity) {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
_getBusy(project).removeActivity(activity);
}
});
}
public void removeActivity(@NotNull Project project, Object activity) {
_getBusy(project).removeActivity(activity);
public void addActivity(final Object activity) {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
_getBusy(null).addActivity(activity);
}
});
}
public void addActivity(Object activity) {
_getBusy(null).addActivity(activity);
}
public void removeActivity(Object activity) {
_getBusy(null).removeActivity(activity);
public void removeActivity(final Object activity) {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
_getBusy(null).removeActivity(activity);
}
});
}
private BusyImpl _getBusy(@Nullable Object key) {
@@ -99,6 +117,10 @@ public class UiActivityMonitor implements ApplicationComponent {
myObjects.put(key, object);
}
boolean hasObjectFor(Project project) {
return myObjects.containsKey(project);
}
private BusyObjectGlobalImpl getGlobalBusy() {
return (BusyObjectGlobalImpl)myObjects.get(null);
}
@@ -138,8 +160,16 @@ public class UiActivityMonitor implements ApplicationComponent {
}
public void removeActivity(Object activity) {
if (!myActivities.contains(activity)) return;
myActivities.remove(activity);
onReady();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
onReady();
}
});
}
}
@@ -15,17 +15,20 @@
*/
package com.intellij.openapi.ui.playback;
import com.intellij.ide.RecentProjectsManagerBase;
import com.intellij.ide.UiActivityMonitor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ProjectManagerAdapter;
import com.intellij.openapi.project.ProjectManagerListener;
import com.intellij.openapi.project.*;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.ui.Queryable;
import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.AsyncResult;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
@@ -46,7 +49,7 @@ public class PlaybackCallFacade {
File parentDir = FileUtil.createTempDirectory("funcTest", "");
File sourceDir = getFile(context.getCurrentCmd().getBaseDir(), path);
FileUtil.copyDir(sourceDir, parentDir);
FileUtil.copyDir(sourceDir, parentDir);
File projectDir = new File(parentDir, sourceDir.getName());
return openProject(context, projectDir.getAbsolutePath());
}
@@ -55,12 +58,8 @@ public class PlaybackCallFacade {
}
}
public static File getFile(File baseDir, String path) {
File sourceDir = new File(path);
if (!sourceDir.isAbsolute()) {
sourceDir = new File(baseDir, path);
}
return sourceDir;
public static AsyncResult<String> openLastProject(final PlaybackContext context) {
return openProject(context, RecentProjectsManagerBase.getInstance().getLastProjectPath());
}
public static AsyncResult<String> openProject(final PlaybackContext context, String path) {
@@ -74,7 +73,12 @@ public class PlaybackCallFacade {
@Override
public void run() {
pm.removeProjectManagerListener(listener.get());
result.setDone("opened successfully: " + project.getProjectFilePath());
DumbService.getInstance(project).runWhenSmart(new Runnable() {
@Override
public void run() {
result.setDone("opened successfully: " + project.getProjectFilePath());
}
});
}
});
}
@@ -92,10 +96,16 @@ public class PlaybackCallFacade {
return result;
}
public static AsyncResult<String> flushUiActivity(PlaybackContext context) {
AsyncResult<String> result = new AsyncResult<String>();
getActivityReady(context).notify(result);
return result;
}
public static AsyncResult<String> printFocus(final PlaybackContext context) {
final AsyncResult result = new AsyncResult<String>();
UiActivityMonitor.getInstance().getBusy().getReady(context).doWhenProcessed(new Runnable() {
getActivityReady(context).doWhenProcessed(new Runnable() {
@Override
public void run() {
final LinkedHashMap<String, String> focusInfo = getFocusInfo();
@@ -136,7 +146,7 @@ public class PlaybackCallFacade {
}
}
UiActivityMonitor.getInstance().getBusy().getReady(context).doWhenDone(new Runnable() {
getActivityReady(context).doWhenDone(new Runnable() {
@Override
public void run() {
try {
@@ -151,6 +161,10 @@ public class PlaybackCallFacade {
return result;
}
private static ActionCallback getActivityReady(PlaybackContext context) {
return UiActivityMonitor.getInstance().getBusy().getReady(context);
}
private static void doAssert(Map<String, String> expected, AsyncResult<String> result, PlaybackContext context) throws AssertionError {
final LinkedHashMap<String, String> actual = getFocusInfo();
@@ -211,4 +225,13 @@ public class PlaybackCallFacade {
}
return actual;
}
public static File getFile(File baseDir, String path) {
File sourceDir = new File(path);
if (!sourceDir.isAbsolute()) {
sourceDir = new File(baseDir, path);
}
return sourceDir;
}
}
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.wm.impl;
import com.intellij.ide.UiActivityMonitor;
import com.intellij.ide.impl.ContentManagerWatcher;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.application.ApplicationManager;
@@ -119,15 +120,25 @@ public final class ToolWindowImpl implements ToolWindowEx {
public void activate(@Nullable final Runnable runnable, boolean autoFocusContents, boolean forced) {
ApplicationManager.getApplication().assertIsDispatchThread();
final String activity = "toolWindow:" + getId();
UiActivityMonitor.getInstance().addActivity(myToolWindowManager.getProject(), activity);
myToolWindowManager.activateToolWindow(myId, forced, autoFocusContents);
if (runnable != null) {
getActivation().doWhenDone(new Runnable() {
public void run() {
myToolWindowManager.invokeLater(runnable);
}
});
}
getActivation().doWhenDone(new Runnable() {
public void run() {
myToolWindowManager.invokeLater(new Runnable() {
@Override
public void run() {
if (runnable != null) {
runnable.run();
}
UiActivityMonitor.getInstance().removeActivity(myToolWindowManager.getProject(), activity);
}
});
}
});
}
public final boolean isActive() {