mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[gui-test] big forest fix
Get rid of varargs in functions, replace them with lists. Add NodeRenderer to ExtendedCellReaders. ExtendedJTreePathFinder fix case with no visible root.
This commit is contained in:
+10
-4
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.testGuiFramework.cellReader
|
||||
|
||||
import com.intellij.ide.util.treeView.NodeRenderer
|
||||
import com.intellij.testGuiFramework.framework.GuiTestUtil
|
||||
import com.intellij.testGuiFramework.impl.GuiTestUtilKt.findAllWithBFS
|
||||
import com.intellij.ui.MultilineTreeCellRenderer
|
||||
@@ -95,7 +96,8 @@ class ExtendedJComboboxCellReader : BasicJComboBoxCellReader(), JComboBoxCellRea
|
||||
private fun getValueWithCellRenderer(cellRendererComponent: Component): String? {
|
||||
val result = when (cellRendererComponent) {
|
||||
is JLabel -> cellRendererComponent.text
|
||||
is SimpleColoredComponent -> cellRendererComponent.getText()
|
||||
is NodeRenderer -> cellRendererComponent.getFirstText() //should stands before SimpleColoredComponent because it is more specific
|
||||
is SimpleColoredComponent -> cellRendererComponent.getFullText()
|
||||
is MultilineTreeCellRenderer -> cellRendererComponent.text
|
||||
else -> cellRendererComponent.findText()
|
||||
}
|
||||
@@ -103,9 +105,13 @@ private fun getValueWithCellRenderer(cellRendererComponent: Component): String?
|
||||
}
|
||||
|
||||
|
||||
private fun SimpleColoredComponent.getText(): String?
|
||||
private fun SimpleColoredComponent.getFullText(): String?
|
||||
= this.iterator().asSequence().joinToString()
|
||||
|
||||
private fun SimpleColoredComponent.getFirstText(): String?
|
||||
= this.iterator().next()
|
||||
|
||||
|
||||
private fun Component.findText(): String? {
|
||||
try {
|
||||
assert(this is Container)
|
||||
@@ -118,8 +124,8 @@ private fun Component.findText(): String? {
|
||||
)
|
||||
resultList.addAll(
|
||||
findAllWithBFS(container, SimpleColoredComponent::class.java)
|
||||
.filter { !it.getText().isNullOrEmpty() }
|
||||
.map { it.getText()!! }
|
||||
.filter { !it.getFullText().isNullOrEmpty() }
|
||||
.map { it.getFullText()!! }
|
||||
)
|
||||
return resultList.firstOrNull { !it.isEmpty() }
|
||||
}
|
||||
|
||||
+1
-1
@@ -228,7 +228,7 @@ open class ExtendedJTreeDriver(robot: Robot = GuiRobotHolder.robot) : JTreeDrive
|
||||
stringPath
|
||||
.list2tree()
|
||||
.forEach {
|
||||
path = ExtendedJTreePathFinder(tree).findMatchingPathByPredicate(predicate, *it.toTypedArray())
|
||||
path = ExtendedJTreePathFinder(tree).findMatchingPathByPredicate(predicate, it)
|
||||
expandPath(tree, path)
|
||||
}
|
||||
return path
|
||||
|
||||
+32
-27
@@ -17,47 +17,52 @@ class ExtendedJTreePathFinder(val jTree: JTree) {
|
||||
|
||||
private val cellReader: JTreeCellReader = ExtendedJTreeCellReader()
|
||||
|
||||
fun findMatchingPath(vararg pathStrings: String): TreePath =
|
||||
findMatchingPathByPredicate(Predicate.equality, *pathStrings)
|
||||
fun findMatchingPath(pathStrings: List<String>): TreePath =
|
||||
findMatchingPathByPredicate(Predicate.equality, pathStrings)
|
||||
|
||||
fun findMatchingPathWithVersion(vararg pathStrings: String): TreePath =
|
||||
findMatchingPathByPredicate(Predicate.withVersion, *pathStrings)
|
||||
fun findMatchingPathWithVersion(pathStrings: List<String>): TreePath =
|
||||
findMatchingPathByPredicate(Predicate.withVersion, pathStrings)
|
||||
|
||||
// this is ex-XPath version
|
||||
fun findMatchingPathByPredicate(predicate: FinderPredicate, vararg pathStrings: String): TreePath {
|
||||
fun findMatchingPathByPredicate(predicate: FinderPredicate, pathStrings: List<String>): TreePath {
|
||||
val model = jTree.model
|
||||
if (jTree.isRootVisible) {
|
||||
val childValue = jTree.value(model.root) ?: ""
|
||||
if (!predicate(pathStrings[0], childValue)) pathNotFound(*pathStrings)
|
||||
if (pathStrings.size == 1) return TreePath(arrayOf<Any>(model.root))
|
||||
if (predicate(pathStrings[0], childValue)) {
|
||||
if (pathStrings.size == 1) return TreePath(arrayOf<Any>(model.root))
|
||||
return traverseChildren(jTree, model.root, TreePath(model.root), predicate, pathStrings.drop(1)) ?: throw pathNotFound(pathStrings)
|
||||
}
|
||||
else {
|
||||
pathNotFound(pathStrings)
|
||||
}
|
||||
}
|
||||
return traverseChildren(jTree, model.root, TreePath(model.root), predicate, *pathStrings) ?: throw pathNotFound(*pathStrings)
|
||||
return traverseChildren(jTree, model.root, TreePath(model.root), predicate, pathStrings) ?: throw pathNotFound(pathStrings)
|
||||
}
|
||||
|
||||
fun exists(vararg pathStrings: String) =
|
||||
existsByPredicate(Predicate.equality, *pathStrings)
|
||||
fun exists(pathStrings: List<String>) =
|
||||
existsByPredicate(Predicate.equality, pathStrings)
|
||||
|
||||
fun existsWithVersion(vararg pathStrings: String) =
|
||||
existsByPredicate(Predicate.withVersion, *pathStrings)
|
||||
fun existsWithVersion(pathStrings: List<String>) =
|
||||
existsByPredicate(Predicate.withVersion, pathStrings)
|
||||
|
||||
fun existsByPredicate(predicate: FinderPredicate, vararg pathStrings: String): Boolean {
|
||||
return try{
|
||||
fun existsByPredicate(predicate: FinderPredicate, pathStrings: List<String>): Boolean {
|
||||
return try {
|
||||
findMatchingPathByPredicate(
|
||||
pathStrings = *pathStrings,
|
||||
pathStrings = pathStrings,
|
||||
predicate = predicate
|
||||
)
|
||||
true
|
||||
}
|
||||
catch (e: Exception){
|
||||
catch (e: Exception) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fun traverseChildren(jTree: JTree,
|
||||
node: Any,
|
||||
pathTree: TreePath,
|
||||
predicate: FinderPredicate,
|
||||
vararg pathStrings: String): TreePath? {
|
||||
node: Any,
|
||||
pathTree: TreePath,
|
||||
predicate: FinderPredicate,
|
||||
pathStrings: List<String>): TreePath? {
|
||||
val childCount = jTree.model.getChildCount(node)
|
||||
|
||||
val order = pathStrings[0].getOrder() ?: 0
|
||||
@@ -76,7 +81,7 @@ class ExtendedJTreePathFinder(val jTree: JTree) {
|
||||
newPath
|
||||
}
|
||||
else {
|
||||
traverseChildren(jTree, child, newPath, predicate, *pathStrings.toList().subList(1, pathStrings.size).toTypedArray())
|
||||
traverseChildren(jTree, child, newPath, predicate, pathStrings.subList(1, pathStrings.size))
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -118,8 +123,8 @@ class ExtendedJTreePathFinder(val jTree: JTree) {
|
||||
}
|
||||
|
||||
// exception wrappers
|
||||
private fun pathNotFound(vararg path: String): LocationUnavailableException {
|
||||
throw LocationUnavailableException("Unable to find path \"${path.toList()}\"")
|
||||
private fun pathNotFound(path: List<String>): LocationUnavailableException {
|
||||
throw LocationUnavailableException("Unable to find path \"$path\"")
|
||||
}
|
||||
|
||||
private fun multipleMatchingNodes(pathString: String, parentText: Any): LocationUnavailableException {
|
||||
@@ -131,9 +136,9 @@ class ExtendedJTreePathFinder(val jTree: JTree) {
|
||||
|
||||
fun findPathToNodeWithVersion(node: String) = findPathToNodeByPredicate(node, Predicate.withVersion)
|
||||
|
||||
fun findPathToNodeByPredicate(node: String, predicate: FinderPredicate): TreePath{
|
||||
// expandNodes()
|
||||
// Pause.pause(1000) //Wait for EDT thread to finish expanding
|
||||
fun findPathToNodeByPredicate(node: String, predicate: FinderPredicate): TreePath {
|
||||
// expandNodes()
|
||||
// Pause.pause(1000) //Wait for EDT thread to finish expanding
|
||||
val result: MutableList<String> = mutableListOf()
|
||||
var currentNode = jTree.model.root as DefaultMutableTreeNode
|
||||
val e = currentNode.preorderEnumeration()
|
||||
@@ -148,6 +153,6 @@ class ExtendedJTreePathFinder(val jTree: JTree) {
|
||||
currentNode = currentNode.parent as DefaultMutableTreeNode
|
||||
result.add(0, currentNode.toString())
|
||||
}
|
||||
return findMatchingPathByPredicate(predicate, *result.toTypedArray())
|
||||
return findMatchingPathByPredicate(predicate, result)
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.testGuiFramework.fixtures
|
||||
|
||||
import com.intellij.testGuiFramework.driver.ExtendedJTreeDriver
|
||||
import com.intellij.testGuiFramework.driver.ExtendedJTreePathFinder
|
||||
import com.intellij.ui.treeStructure.treetable.TreeTable
|
||||
import org.fest.swing.core.MouseButton
|
||||
@@ -20,7 +19,7 @@ class TreeTableFixture(val robot: Robot, val target: TreeTable) :
|
||||
ComponentPreconditions.checkEnabledAndShowing(target)
|
||||
|
||||
val tree = target.tree
|
||||
val path = ExtendedJTreePathFinder(tree).findMatchingPath(*pathStrings)
|
||||
val path = ExtendedJTreePathFinder(tree).findMatchingPath(pathStrings.toList())
|
||||
|
||||
var x = target.location.x + (0 until column).sumBy { target.columnModel.getColumn(it).width }
|
||||
x += target.columnModel.getColumn(column).width / 3
|
||||
|
||||
+2
-2
@@ -102,7 +102,7 @@ import javax.swing.tree.TreePath
|
||||
GuiTestUtilKt.waitUntil(condition = "correct path to click is found", timeout = Timeouts.seconds02) {
|
||||
try {
|
||||
partialPath = ExtendedJTreePathFinder(tree)
|
||||
.findMatchingPathByPredicate(predicate = predicate, pathStrings = *partialList.toTypedArray())
|
||||
.findMatchingPathByPredicate(predicate = predicate, pathStrings = partialList)
|
||||
partialPath != null
|
||||
}
|
||||
catch (e: Exception) {
|
||||
@@ -176,5 +176,5 @@ import javax.swing.tree.TreePath
|
||||
fun TreePath.getPathStrings(jTree: JTree): List<String> {
|
||||
val cellReader = ExtendedJTreeCellReader()
|
||||
val pathStrings = this.path.map { cellReader.valueAt(jTree, it) ?: throw Exception("Unable to read value (value is null) for a tree")}
|
||||
return if (pathStrings.first().isEmpty()) pathStrings.drop(1) else pathStrings
|
||||
return if (pathStrings.first().isEmpty() || !jTree.isRootVisible) pathStrings.drop(1) else pathStrings
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user