diff --git a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestHost.kt b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestHost.kt
index 89a79d21cd3f..56c3020edf69 100644
--- a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestHost.kt
+++ b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestHost.kt
@@ -38,6 +38,7 @@ import kotlinx.coroutines.*
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.TestOnly
import java.awt.Component
+import java.awt.Frame
import java.awt.Window
import java.awt.image.BufferedImage
import java.io.File
@@ -201,6 +202,23 @@ open class DistributedTestHost(coroutineScope: CoroutineScope) {
true
}
+ // actually doesn't really preserve clientId, not really important here
+ // https://youtrack.jetbrains.com/issue/RDCT-653/setSuspendPreserveClientId-with-custom-dispatcher-doesnt-preserve-ClientId
+ session.visibleFrameNames.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, _ ->
+ Window.getWindows().filter { it.isShowing }.filterIsInstance().map { it.title }.also {
+ LOG.info("Visible frame names: ${it.joinToString(", ", "[", "]")}")
+ }
+ }
+
+ // actually doesn't really preserve clientId, not really important here
+ // https://youtrack.jetbrains.com/issue/RDCT-653/setSuspendPreserveClientId-with-custom-dispatcher-doesnt-preserve-ClientId
+ session.projectsNames.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, _ ->
+ ProjectManagerEx.getOpenProjects().map { it.name }.also {
+ LOG.info("Projects: ${it.joinToString(", ", "[", "]")}")
+ }
+ }
+
+ // causes problems if not scheduled on ui thread
session.closeProjectIfOpened.setSuspendPreserveClientId { _, _ ->
runLogged("Close project if it is opened") {
ProjectManagerEx.getOpenProjects().forEach {
@@ -235,6 +253,12 @@ open class DistributedTestHost(coroutineScope: CoroutineScope) {
makeScreenshot(fileName)
}
+ // actually doesn't really preserve clientId, not really important here
+ // https://youtrack.jetbrains.com/issue/RDCT-653/setSuspendPreserveClientId-with-custom-dispatcher-doesnt-preserve-ClientId
+ session.projectsAreInitialised.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, _ ->
+ ProjectManagerEx.getOpenProjects().map { it.isInitialized }.all { true }
+ }
+
session.showNotification.advise(lifetime) { actionTitle ->
showNotification("${session.agentInfo.id}: $actionTitle")
}
diff --git a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelGenerated/DistributedTestModel.Generated.kt b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelGenerated/DistributedTestModel.Generated.kt
index da7d205f1f5b..ebb2368b4cec 100644
--- a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelGenerated/DistributedTestModel.Generated.kt
+++ b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelGenerated/DistributedTestModel.Generated.kt
@@ -55,7 +55,7 @@ class DistributedTestModel private constructor(
private val __RdTestSessionNullableSerializer = RdTestSession.nullable()
- const val serializationHash = 5203196433846444594L
+ const val serializationHash = 6176834208377331615L
}
override val serializersOwner: ISerializersOwner get() = DistributedTestModel
@@ -238,14 +238,17 @@ class RdTestSession private constructor(
val debugCategories: List,
private val _ready: RdProperty,
private val _sendException: RdSignal,
- private val _shutdown: RdSignal,
+ private val _exitApp: RdSignal,
private val _showNotification: RdSignal,
private val _closeProject: RdCall,
private val _closeProjectIfOpened: RdCall,
private val _runNextAction: RdCall,
private val _requestFocus: RdCall,
+ private val _visibleFrameNames: RdCall>,
+ private val _projectsNames: RdCall>,
private val _makeScreenshot: RdCall,
- private val _isResponding: RdCall
+ private val _isResponding: RdCall,
+ private val _projectsAreInitialised: RdCall
) : RdBindableBase() {
//companion
@@ -263,15 +266,18 @@ class RdTestSession private constructor(
val debugCategories = buffer.readList { buffer.readString() }
val _ready = RdProperty.read(ctx, buffer, __BoolNullableSerializer)
val _sendException = RdSignal.read(ctx, buffer, RdTestSessionException)
- val _shutdown = RdSignal.read(ctx, buffer, FrameworkMarshallers.Void)
+ val _exitApp = RdSignal.read(ctx, buffer, FrameworkMarshallers.Void)
val _showNotification = RdSignal.read(ctx, buffer, FrameworkMarshallers.String)
val _closeProject = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
val _closeProjectIfOpened = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
val _runNextAction = RdCall.read(ctx, buffer, FrameworkMarshallers.String, __StringNullableSerializer)
val _requestFocus = RdCall.read(ctx, buffer, FrameworkMarshallers.String, FrameworkMarshallers.Bool)
+ val _visibleFrameNames = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, __StringListSerializer)
+ val _projectsNames = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, __StringListSerializer)
val _makeScreenshot = RdCall.read(ctx, buffer, FrameworkMarshallers.String, FrameworkMarshallers.Bool)
val _isResponding = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
- return RdTestSession(agentInfo, testClassName, testMethodName, traceCategories, debugCategories, _ready, _sendException, _shutdown, _showNotification, _closeProject, _closeProjectIfOpened, _runNextAction, _requestFocus, _makeScreenshot, _isResponding).withId(_id)
+ val _projectsAreInitialised = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
+ return RdTestSession(agentInfo, testClassName, testMethodName, traceCategories, debugCategories, _ready, _sendException, _exitApp, _showNotification, _closeProject, _closeProjectIfOpened, _runNextAction, _requestFocus, _visibleFrameNames, _projectsNames, _makeScreenshot, _isResponding, _projectsAreInitialised).withId(_id)
}
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: RdTestSession) {
@@ -283,31 +289,38 @@ class RdTestSession private constructor(
buffer.writeList(value.debugCategories) { v -> buffer.writeString(v) }
RdProperty.write(ctx, buffer, value._ready)
RdSignal.write(ctx, buffer, value._sendException)
- RdSignal.write(ctx, buffer, value._shutdown)
+ RdSignal.write(ctx, buffer, value._exitApp)
RdSignal.write(ctx, buffer, value._showNotification)
RdCall.write(ctx, buffer, value._closeProject)
RdCall.write(ctx, buffer, value._closeProjectIfOpened)
RdCall.write(ctx, buffer, value._runNextAction)
RdCall.write(ctx, buffer, value._requestFocus)
+ RdCall.write(ctx, buffer, value._visibleFrameNames)
+ RdCall.write(ctx, buffer, value._projectsNames)
RdCall.write(ctx, buffer, value._makeScreenshot)
RdCall.write(ctx, buffer, value._isResponding)
+ RdCall.write(ctx, buffer, value._projectsAreInitialised)
}
private val __BoolNullableSerializer = FrameworkMarshallers.Bool.nullable()
private val __StringNullableSerializer = FrameworkMarshallers.String.nullable()
+ private val __StringListSerializer = FrameworkMarshallers.String.list()
}
//fields
val ready: IProperty get() = _ready
val sendException: IAsyncSignal get() = _sendException
- val shutdown: IAsyncSignal get() = _shutdown
+ val exitApp: IAsyncSignal get() = _exitApp
val showNotification: ISignal get() = _showNotification
val closeProject: RdCall get() = _closeProject
val closeProjectIfOpened: RdCall get() = _closeProjectIfOpened
val runNextAction: RdCall get() = _runNextAction
val requestFocus: RdCall get() = _requestFocus
+ val visibleFrameNames: RdCall> get() = _visibleFrameNames
+ val projectsNames: RdCall> get() = _projectsNames
val makeScreenshot: RdCall get() = _makeScreenshot
val isResponding: RdCall get() = _isResponding
+ val projectsAreInitialised: RdCall get() = _projectsAreInitialised
//methods
//initializer
init {
@@ -316,26 +329,32 @@ class RdTestSession private constructor(
init {
_sendException.async = true
- _shutdown.async = true
+ _exitApp.async = true
_closeProject.async = true
_closeProjectIfOpened.async = true
_runNextAction.async = true
_requestFocus.async = true
+ _visibleFrameNames.async = true
+ _projectsNames.async = true
_makeScreenshot.async = true
_isResponding.async = true
+ _projectsAreInitialised.async = true
}
init {
bindableChildren.add("ready" to _ready)
bindableChildren.add("sendException" to _sendException)
- bindableChildren.add("shutdown" to _shutdown)
+ bindableChildren.add("exitApp" to _exitApp)
bindableChildren.add("showNotification" to _showNotification)
bindableChildren.add("closeProject" to _closeProject)
bindableChildren.add("closeProjectIfOpened" to _closeProjectIfOpened)
bindableChildren.add("runNextAction" to _runNextAction)
bindableChildren.add("requestFocus" to _requestFocus)
+ bindableChildren.add("visibleFrameNames" to _visibleFrameNames)
+ bindableChildren.add("projectsNames" to _projectsNames)
bindableChildren.add("makeScreenshot" to _makeScreenshot)
bindableChildren.add("isResponding" to _isResponding)
+ bindableChildren.add("projectsAreInitialised" to _projectsAreInitialised)
}
//secondary constructor
@@ -359,7 +378,10 @@ class RdTestSession private constructor(
RdCall(FrameworkMarshallers.Void, FrameworkMarshallers.Bool),
RdCall(FrameworkMarshallers.String, __StringNullableSerializer),
RdCall(FrameworkMarshallers.String, FrameworkMarshallers.Bool),
+ RdCall>(FrameworkMarshallers.Void, __StringListSerializer),
+ RdCall>(FrameworkMarshallers.Void, __StringListSerializer),
RdCall(FrameworkMarshallers.String, FrameworkMarshallers.Bool),
+ RdCall(FrameworkMarshallers.Void, FrameworkMarshallers.Bool),
RdCall(FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
)
@@ -376,14 +398,17 @@ class RdTestSession private constructor(
print("debugCategories = "); debugCategories.print(printer); println()
print("ready = "); _ready.print(printer); println()
print("sendException = "); _sendException.print(printer); println()
- print("shutdown = "); _shutdown.print(printer); println()
+ print("exitApp = "); _exitApp.print(printer); println()
print("showNotification = "); _showNotification.print(printer); println()
print("closeProject = "); _closeProject.print(printer); println()
print("closeProjectIfOpened = "); _closeProjectIfOpened.print(printer); println()
print("runNextAction = "); _runNextAction.print(printer); println()
print("requestFocus = "); _requestFocus.print(printer); println()
+ print("visibleFrameNames = "); _visibleFrameNames.print(printer); println()
+ print("projectsNames = "); _projectsNames.print(printer); println()
print("makeScreenshot = "); _makeScreenshot.print(printer); println()
print("isResponding = "); _isResponding.print(printer); println()
+ print("projectsAreInitialised = "); _projectsAreInitialised.print(printer); println()
}
printer.print(")")
}
@@ -397,14 +422,17 @@ class RdTestSession private constructor(
debugCategories,
_ready.deepClonePolymorphic(),
_sendException.deepClonePolymorphic(),
- _shutdown.deepClonePolymorphic(),
+ _exitApp.deepClonePolymorphic(),
_showNotification.deepClonePolymorphic(),
_closeProject.deepClonePolymorphic(),
_closeProjectIfOpened.deepClonePolymorphic(),
_runNextAction.deepClonePolymorphic(),
_requestFocus.deepClonePolymorphic(),
+ _visibleFrameNames.deepClonePolymorphic(),
+ _projectsNames.deepClonePolymorphic(),
_makeScreenshot.deepClonePolymorphic(),
- _isResponding.deepClonePolymorphic()
+ _isResponding.deepClonePolymorphic(),
+ _projectsAreInitialised.deepClonePolymorphic()
)
}
//contexts
diff --git a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelSources/DistributedTestModel.kt b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelSources/DistributedTestModel.kt
index d824c99f3571..0dcadb32a4fe 100644
--- a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelSources/DistributedTestModel.kt
+++ b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/modelSources/DistributedTestModel.kt
@@ -64,8 +64,11 @@ object DistributedTestModel : Ext(TestRoot) {
call("closeProjectIfOpened", void, bool).async
call("runNextAction", string, string.nullable).async
call("requestFocus", string, bool).async
+ call("visibleFrameNames", void, immutableList(string)).async
+ call("projectsNames", void, immutableList(string)).async
call("makeScreenshot", string, bool).async
call("isResponding", void, bool).async
+ call("projectsAreInitialised", void, bool).async
}
init {