mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
funcTests: stability fixes
This commit is contained in:
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
-14
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user