diff --git a/platform/remote-driver/test-sdk/intellij.driver.sdk.iml b/platform/remote-driver/test-sdk/intellij.driver.sdk.iml
index f36d063beaf0..ff59374849d9 100644
--- a/platform/remote-driver/test-sdk/intellij.driver.sdk.iml
+++ b/platform/remote-driver/test-sdk/intellij.driver.sdk.iml
@@ -38,5 +38,6 @@
+
\ No newline at end of file
diff --git a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/JEditorUi.kt b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/JEditorUi.kt
index 282176ed3034..476d7a9e0760 100644
--- a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/JEditorUi.kt
+++ b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/JEditorUi.kt
@@ -66,6 +66,8 @@ open class JEditorUiComponent(data: ComponentData) : UiComponent(data) {
fun getLineNumber(text: String): Int = document.getLineNumber(this.text.indexOf(text)) + 1
+ fun getLastLineNumber(text: String): Int = document.getLineNumber(this.text.lastIndexOf(text)) + 1
+
fun expandAllFoldings() {
driver.invokeAction("ExpandAllRegions", component = component)
}
diff --git a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/TerminalDialogUI.kt b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/TerminalDialogUI.kt
index 9a2a58aec45a..98a4c4be80c6 100644
--- a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/TerminalDialogUI.kt
+++ b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/TerminalDialogUI.kt
@@ -1,6 +1,7 @@
package com.intellij.driver.sdk.ui.components.common.dialogs
import com.intellij.driver.client.Driver
+import com.intellij.driver.client.Remote
import com.intellij.driver.sdk.ui.Finder
import com.intellij.driver.sdk.ui.components.ComponentData
import com.intellij.driver.sdk.ui.components.UiComponent
@@ -9,11 +10,12 @@ import com.intellij.driver.sdk.ui.ui
import com.intellij.driver.sdk.waitFor
import org.intellij.lang.annotations.Language
-fun Finder.terminal(@Language("xpath") xpath: String = "//div[contains(@class, 'TerminalToolWindow') or contains(@class, 'ConsoleTerminalWidget')]") =
+
+fun Finder.terminal(@Language("xpath") xpath: String = "//div[contains(@class, 'TerminalPanel') or contains(@class, 'ConsoleTerminalWidget')]") =
x(xpath, TerminalDialogUI::class.java)
fun Finder.terminal(action: TerminalDialogUI.() -> Unit) {
- x("//div[contains(@class, 'TerminalToolWindow') or contains(@class, 'ConsoleTerminalWidget')]", TerminalDialogUI::class.java).action()
+ x("//div[contains(@class, 'TerminalPanel') or contains(@class, 'ConsoleTerminalWidget')]", TerminalDialogUI::class.java).action()
}
fun Driver.terminal(action: TerminalDialogUI.() -> Unit) {
@@ -28,6 +30,14 @@ class TerminalDialogUI(data: ComponentData) : UiComponent(data) {
waitFound()
}
+ val terminalView: TerminalView
+ get() = driver.cast(component, TerminalView::class)
+ val terminalOutputModel: TerminalOutputModel get() = terminalView.outputModels.active.value
+ val cursorOffset: Long get() = terminalOutputModel.cursorOffset.toAbsolute()
+
+
+
+
val rdPortForwardingPanelWidget: RdPortForwardingPanelWidget
get() = x(RdPortForwardingPanelWidget::class.java) { byJavaClass("com.jetbrains.thinclient.portForwarding.ThinClientPortForwardingPanelWidget") }
@@ -47,3 +57,29 @@ class RdPortForwardingPanelWidget(data: ComponentData) : UiComponent(data) {
val forwardedPortDropDown: UiComponent
get() = x { byJavaClass("com.jetbrains.thinclient.portForwarding.ui.ForwardedPortDropDownLink") }
}
+
+@Remote("com.intellij.terminal.frontend.view.TerminalView", plugin = "org.jetbrains.plugins.terminal/intellij.terminal.frontend")
+interface TerminalView {
+ fun getActiveOutputModel(): TerminalOutputModel
+ val outputModels: TerminalOutputModelsSet
+}
+
+@Remote("org.jetbrains.plugins.terminal.view.TerminalOutputModelsSet", plugin = "org.jetbrains.plugins.terminal")
+interface TerminalOutputModelsSet {
+ val active: StateFlow
+}
+
+@Remote("kotlinx.coroutines.flow.StateFlow")
+interface StateFlow {
+ val value: T
+}
+
+@Remote("org.jetbrains.plugins.terminal.block.reworked.TerminalOutputModel")
+interface TerminalOutputModel {
+ val cursorOffset: TerminalOffset
+}
+
+@Remote("org.jetbrains.plugins.terminal.block.reworked.TerminalOffset", plugin = "org.jetbrains.plugins.terminal")
+interface TerminalOffset {
+ fun toAbsolute(): Long
+}
\ No newline at end of file
diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/TerminalView.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/TerminalView.kt
index 778d400f6011..48714e3f8b84 100644
--- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/TerminalView.kt
+++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/TerminalView.kt
@@ -6,6 +6,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.flow.StateFlow
import org.jetbrains.annotations.ApiStatus
+import org.jetbrains.plugins.terminal.block.reworked.TerminalOutputModel
import org.jetbrains.plugins.terminal.session.TerminalGridSize
import org.jetbrains.plugins.terminal.session.TerminalStartupOptions
import org.jetbrains.plugins.terminal.view.TerminalOutputModel
@@ -124,6 +125,10 @@ interface TerminalView {
*/
fun createSendTextBuilder(): TerminalSendTextBuilder
+ // todo
+
+ fun getActiveOutputModel(): TerminalOutputModel
+
companion object {
/**
* The data context key for accessing the Terminal View from actions.
diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt
index 2dfc7f6ddefe..d92c3f119cd9 100644
--- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt
+++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt
@@ -123,6 +123,10 @@ class TerminalViewImpl(
get() = getCurEditor().calculateTerminalSize()
override val title: TerminalTitle = TerminalTitle()
+ //@VisibleForTesting
+ override fun getActiveOutputModel(): TerminalOutputModel{
+ return outputModels.active.value
+ }
private val mutableOutputModels: TerminalOutputModelsSetImpl
override val outputModels: TerminalOutputModelsSet