mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[gui-test] improve getBoundedLabel() method
This commit is contained in:
+57
-34
@@ -24,8 +24,10 @@ import com.intellij.openapi.actionSystem.impl.ActionMenuItem
|
||||
import com.intellij.openapi.editor.impl.EditorComponentImpl
|
||||
import com.intellij.openapi.ui.DialogWrapper
|
||||
import com.intellij.openapi.ui.JBPopupMenu
|
||||
import com.intellij.openapi.ui.LabeledComponent
|
||||
import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.openapi.wm.impl.IdeFrameImpl
|
||||
import com.intellij.openapi.wm.impl.ToolWindowImpl
|
||||
import com.intellij.openapi.wm.impl.ToolWindowManagerImpl
|
||||
@@ -38,10 +40,10 @@ import com.intellij.testGuiFramework.fixtures.SettingsTreeFixture
|
||||
import com.intellij.testGuiFramework.framework.GuiTestUtil
|
||||
import com.intellij.testGuiFramework.generators.Utils.clicks
|
||||
import com.intellij.testGuiFramework.generators.Utils.convertSimpleTreeItemToPath
|
||||
import com.intellij.testGuiFramework.generators.Utils.getBoundedLabelForComboBox
|
||||
import com.intellij.testGuiFramework.generators.Utils.getBoundedLabel
|
||||
import com.intellij.testGuiFramework.generators.Utils.getCellText
|
||||
import com.intellij.testGuiFramework.generators.Utils.getJTreePath
|
||||
import com.intellij.testGuiFramework.generators.Utils.getLabel
|
||||
import com.intellij.testGuiFramework.generators.Utils.getJTreePathItemsString
|
||||
import com.intellij.ui.CheckboxTree
|
||||
import com.intellij.ui.components.JBCheckBox
|
||||
import com.intellij.ui.components.JBList
|
||||
@@ -99,7 +101,7 @@ class ActionLinkGenerator : ComponentCodeGenerator<ActionLink> {
|
||||
|
||||
class JTextFieldGenerator : ComponentCodeGenerator<JTextField> {
|
||||
override fun accept(cmp: Component) = cmp is JTextField
|
||||
override fun generate(cmp: JTextField, me: MouseEvent, cp: Point) = "textfield(\"${getLabel(cmp)?.text.orEmpty()}\").${clicks(
|
||||
override fun generate(cmp: JTextField, me: MouseEvent, cp: Point) = "textfield(\"${getBoundedLabel(3, cmp).text.orEmpty()}\").${clicks(
|
||||
me)}"
|
||||
}
|
||||
|
||||
@@ -153,7 +155,7 @@ class JCheckBoxGenerator : ComponentCodeGenerator<JCheckBox> {
|
||||
|
||||
class JComboBoxGenerator : ComponentCodeGenerator<JComboBox<*>> {
|
||||
override fun accept(cmp: Component) = cmp is JComboBox<*>
|
||||
override fun generate(cmp: JComboBox<*>, me: MouseEvent, cp: Point) = "combobox(\"${getBoundedLabelForComboBox(cmp).text}\")"
|
||||
override fun generate(cmp: JComboBox<*>, me: MouseEvent, cp: Point) = "combobox(\"${getBoundedLabel(3, cmp).text}\")"
|
||||
}
|
||||
|
||||
class BasicArrowButtonDelegatedGenerator : ComponentCodeGenerator<BasicArrowButton> {
|
||||
@@ -188,10 +190,10 @@ class ProjectViewTreeGenerator : ComponentCodeGenerator<ProjectViewTree> {
|
||||
override fun accept(cmp: Component) = cmp is ProjectViewTree
|
||||
private fun JTree.getPath(cp: Point) = this.getClosestPathForLocation(cp.x, cp.y)
|
||||
override fun generate(cmp: ProjectViewTree, me: MouseEvent, cp: Point): String {
|
||||
val path = getJTreePath(cmp, cmp.getPath(cp))
|
||||
if (me.isRightButton()) return "path(\"$path\").rightClick()"
|
||||
if (me.clickCount == 2) return "path(\"$path\").doubleClick()"
|
||||
return "path(\"$path\").click()"
|
||||
val path = getJTreePathItemsString(cmp, cmp.getPath(cp))
|
||||
if (me.isRightButton()) return "path($path).rightClick()"
|
||||
if (me.clickCount == 2) return "path($path).doubleClick()"
|
||||
return "path($path).click()"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -573,46 +575,67 @@ object Utils {
|
||||
return (0..path.pathCount - 1).map { path.getPathComponent(it).toString() }.filter(String::isNotEmpty).joinToString("/")
|
||||
}
|
||||
|
||||
fun getBoundedLabelForComboBox(cb: JComboBox<*>): JLabel {
|
||||
val robot = BasicRobot.robotWithCurrentAwtHierarchyWithoutScreenLock()
|
||||
/**
|
||||
* @hierarchyLevel: started from 1 to see bounded label for a component itself
|
||||
*/
|
||||
fun getBoundedLabel(hierarchyLevel: Int, component: Component): JLabel {
|
||||
|
||||
val findBoundedLabel: (Component) -> JLabel? = { component ->
|
||||
try {
|
||||
robot.finder().find(component.parent as Container, object : GenericTypeMatcher<JLabel>(JLabel::class.java) {
|
||||
override fun isMatching(label: JLabel): Boolean {
|
||||
return label.labelFor != null && label.labelFor == component
|
||||
}
|
||||
})
|
||||
}
|
||||
catch(e: ComponentLookupException) {
|
||||
null
|
||||
var currentComponent = component
|
||||
if (hierarchyLevel < 1) throw Exception("Hierarchy level (actual is $hierarchyLevel) should starts from 1 to see bounded label for a component itself")
|
||||
|
||||
for (i in 1..hierarchyLevel) {
|
||||
val boundedLabel = findBoundedLabel(currentComponent)
|
||||
if (boundedLabel != null) return boundedLabel
|
||||
else {
|
||||
if (currentComponent.parent == null) break
|
||||
currentComponent = currentComponent.parent
|
||||
}
|
||||
}
|
||||
|
||||
val bounded1 = findBoundedLabel(cb)
|
||||
if (bounded1 !== null) return bounded1
|
||||
|
||||
val bounded2 = findBoundedLabel(cb.parent)
|
||||
if (bounded2 !== null) return bounded2
|
||||
|
||||
val bounded3 = findBoundedLabel(cb.parent!!.parent)
|
||||
if (bounded3 !== null) return bounded3
|
||||
|
||||
throw ComponentLookupException("Unable to find bounded label in 2 levels from JComboBox")
|
||||
throw ComponentLookupException("Unable to find bounded label in ${hierarchyLevel - 1} level(s) from ${component.toString()}")
|
||||
|
||||
}
|
||||
|
||||
private fun findBoundedLabel(component: Component): JLabel? {
|
||||
val robot = BasicRobot.robotWithCurrentAwtHierarchyWithoutScreenLock()
|
||||
var resultLabel: JLabel? = null
|
||||
|
||||
if (component is LabeledComponent<*>) return component.label
|
||||
try {
|
||||
resultLabel = robot.finder().find(component.parent as Container, object : GenericTypeMatcher<JLabel>(JLabel::class.java) {
|
||||
override fun isMatching(label: JLabel): Boolean {
|
||||
return label.labelFor != null && label.labelFor == component
|
||||
}
|
||||
})
|
||||
}
|
||||
catch(e: ComponentLookupException) {
|
||||
resultLabel = null
|
||||
}
|
||||
return resultLabel
|
||||
}
|
||||
|
||||
fun getJTreePath(cmp: JTree, path: TreePath): String {
|
||||
val stringBuilder = getJTreePathArray(cmp, path)
|
||||
return StringUtil.join(stringBuilder, "/")
|
||||
}
|
||||
|
||||
fun getJTreePathItemsString(cmp: JTree, path: TreePath): String {
|
||||
return getJTreePathArray(cmp, path)
|
||||
.map { StringUtil.wrapWithDoubleQuote(it) }
|
||||
.reduceRight({ s, s1 -> "$s, $s1" })
|
||||
}
|
||||
|
||||
private fun getJTreePathArray(cmp: JTree, path: TreePath): ArrayList<String> {
|
||||
var treePath = path
|
||||
val result = StringBuilder()
|
||||
val result = ArrayList<String>()
|
||||
val bcr = org.fest.swing.driver.BasicJTreeCellReader()
|
||||
while (treePath.pathCount != 1 || (cmp.isRootVisible && treePath.pathCount == 1)) {
|
||||
val valueAt = bcr.valueAt(cmp, treePath.lastPathComponent)
|
||||
result.insert(0, "$valueAt${if (!result.isEmpty()) "/" else ""}")
|
||||
val valueAt = bcr.valueAt(cmp, treePath.lastPathComponent) ?: "null"
|
||||
result.add(0, valueAt)
|
||||
if (treePath.pathCount == 1) break
|
||||
else treePath = treePath.parentPath
|
||||
}
|
||||
return result.toString()
|
||||
return result
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user