mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[rdct-tests]: make sure that unexpected modal state on shutdown causes a separate exception and is noticeable
GitOrigin-RevId: 5712491980da2cac2c0e80ded2606389640f5d39
This commit is contained in:
committed by
intellij-monorepo-bot
parent
836f7dfb3b
commit
833da8d490
@@ -56,7 +56,7 @@ class DistributedTestModel private constructor(
|
||||
|
||||
private val __RdTestSessionNullableSerializer = RdTestSession.nullable()
|
||||
|
||||
const val serializationHash = 2117502848923156654L
|
||||
const val serializationHash = 1373418669341890532L
|
||||
|
||||
}
|
||||
override val serializersOwner: ISerializersOwner get() = DistributedTestModel
|
||||
@@ -307,7 +307,7 @@ class RdTestSession private constructor(
|
||||
private val _exitApp: RdSignal<Unit>,
|
||||
private val _showNotification: RdSignal<String>,
|
||||
private val _closeProject: RdCall<Unit, Boolean>,
|
||||
private val _forceLeaveAllModals: RdCall<Unit, Unit>,
|
||||
private val _forceLeaveAllModals: RdCall<Boolean, Unit>,
|
||||
private val _closeProjectIfOpened: RdCall<Unit, Boolean>,
|
||||
private val _runNextAction: RdCall<RdTestActionParameters, String?>,
|
||||
private val _requestFocus: RdCall<String, Boolean>,
|
||||
@@ -336,7 +336,7 @@ class RdTestSession private constructor(
|
||||
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 _forceLeaveAllModals = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Void)
|
||||
val _forceLeaveAllModals = RdCall.read(ctx, buffer, FrameworkMarshallers.Bool, FrameworkMarshallers.Void)
|
||||
val _closeProjectIfOpened = RdCall.read(ctx, buffer, FrameworkMarshallers.Void, FrameworkMarshallers.Bool)
|
||||
val _runNextAction = RdCall.read(ctx, buffer, RdTestActionParameters, __StringNullableSerializer)
|
||||
val _requestFocus = RdCall.read(ctx, buffer, FrameworkMarshallers.String, FrameworkMarshallers.Bool)
|
||||
@@ -382,7 +382,7 @@ class RdTestSession private constructor(
|
||||
val exitApp: IAsyncSignal<Unit> get() = _exitApp
|
||||
val showNotification: ISignal<String> get() = _showNotification
|
||||
val closeProject: RdCall<Unit, Boolean> get() = _closeProject
|
||||
val forceLeaveAllModals: RdCall<Unit, Unit> get() = _forceLeaveAllModals
|
||||
val forceLeaveAllModals: RdCall<Boolean, Unit> get() = _forceLeaveAllModals
|
||||
val closeProjectIfOpened: RdCall<Unit, Boolean> get() = _closeProjectIfOpened
|
||||
val runNextAction: RdCall<RdTestActionParameters, String?> get() = _runNextAction
|
||||
val requestFocus: RdCall<String, Boolean> get() = _requestFocus
|
||||
@@ -447,7 +447,7 @@ class RdTestSession private constructor(
|
||||
RdSignal<Unit>(FrameworkMarshallers.Void),
|
||||
RdSignal<String>(FrameworkMarshallers.String),
|
||||
RdCall<Unit, Boolean>(FrameworkMarshallers.Void, FrameworkMarshallers.Bool),
|
||||
RdCall<Unit, Unit>(FrameworkMarshallers.Void, FrameworkMarshallers.Void),
|
||||
RdCall<Boolean, Unit>(FrameworkMarshallers.Bool, FrameworkMarshallers.Void),
|
||||
RdCall<Unit, Boolean>(FrameworkMarshallers.Void, FrameworkMarshallers.Bool),
|
||||
RdCall<RdTestActionParameters, String?>(RdTestActionParameters, __StringNullableSerializer),
|
||||
RdCall<String, Boolean>(FrameworkMarshallers.String, FrameworkMarshallers.Bool),
|
||||
|
||||
@@ -67,7 +67,7 @@ object DistributedTestModel : Ext(TestRoot) {
|
||||
signal("exitApp", void).async
|
||||
signal("showNotification", string)
|
||||
call("closeProject", void, bool).async
|
||||
call("forceLeaveAllModals", void, void).async
|
||||
call("forceLeaveAllModals", bool, void).async
|
||||
call("closeProjectIfOpened", void, bool).async
|
||||
call("runNextAction", RdTestActionParameters, string.nullable).async
|
||||
call("requestFocus", string, bool).async
|
||||
|
||||
@@ -62,7 +62,8 @@ import kotlin.time.Duration.Companion.seconds
|
||||
open class DistributedTestHost(coroutineScope: CoroutineScope) {
|
||||
companion object {
|
||||
// it is easier to sort out logs from just testFramework
|
||||
private val LOG = Logger.getInstance(RdctTestFrameworkLoggerCategory.category + "Host")
|
||||
private val LOG
|
||||
get() = Logger.getInstance(RdctTestFrameworkLoggerCategory.category + "Host")
|
||||
|
||||
fun getDistributedTestPort(): Int? =
|
||||
System.getProperty(AgentConstants.protocolPortPropertyName)?.toIntOrNull()
|
||||
@@ -236,19 +237,28 @@ open class DistributedTestHost(coroutineScope: CoroutineScope) {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun leaveAllModals() {
|
||||
suspend fun leaveAllModals(throwErrorIfModal: Boolean) {
|
||||
withContext(Dispatchers.EDT + ModalityState.any().asContextElement() + NonCancellable) {
|
||||
repeat(10) {
|
||||
if (ModalityState.current() == ModalityState.nonModal()) {
|
||||
return@withContext
|
||||
}
|
||||
delay(1.seconds)
|
||||
}
|
||||
if (throwErrorIfModal) {
|
||||
LOG.error("Unexpected modality: " + ModalityState.current())
|
||||
}
|
||||
LaterInvocator.forceLeaveAllModals()
|
||||
IdeEventQueue.getInstance().flushQueue()
|
||||
}
|
||||
}
|
||||
|
||||
session.forceLeaveAllModals.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, _ ->
|
||||
leaveAllModals()
|
||||
session.forceLeaveAllModals.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, throwErrorIfModal ->
|
||||
leaveAllModals(throwErrorIfModal)
|
||||
}
|
||||
|
||||
session.closeProjectIfOpened.setSuspendPreserveClientId(handlerScheduler = Dispatchers.Default.asRdScheduler) { _, _ ->
|
||||
leaveAllModals()
|
||||
leaveAllModals(throwErrorIfModal = true)
|
||||
ProjectManagerEx.getOpenProjects().forEach { waitProjectInitialisedOrDisposed(it) }
|
||||
withContext(Dispatchers.EDT + NonCancellable) {
|
||||
ProjectManagerEx.getInstanceEx().closeAndDisposeAllProjects(checkCanClose = false)
|
||||
|
||||
Reference in New Issue
Block a user