diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertion.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertion.kt index 3d719b428cdf..8f6449ed6a58 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertion.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertion.kt @@ -53,6 +53,6 @@ interface TreeAssertion { companion object { fun assertTree(actualTree: Tree, isUnordered: Boolean = false, assert: TreeAssertion.() -> Unit) = - AbstractTreeAssertion.assertTree(actualTree, isUnordered, assert) + TreeAssertionImpl.assertTree(actualTree, isUnordered, assert) } } \ No newline at end of file diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/AbstractTreeAssertion.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertionImpl.kt similarity index 82% rename from plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/AbstractTreeAssertion.kt rename to plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertionImpl.kt index 78fa707e5475..f00805810a9f 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/AbstractTreeAssertion.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/util/tree/assertion/TreeAssertionImpl.kt @@ -4,9 +4,15 @@ package org.jetbrains.plugins.gradle.testFramework.util.tree.assertion import org.jetbrains.plugins.gradle.testFramework.util.tree.* import org.junit.jupiter.api.AssertionFailureBuilder -internal abstract class AbstractTreeAssertion private constructor( +internal class TreeAssertionImpl private constructor( private val expectedChildren: MutableList>> -) : TreeAssertion { +) : TreeAssertion.Node { + + private var valueAssertion: (T) -> Unit = {} + + override fun assertValue(assert: (T) -> Unit) { + valueAssertion = assert + } // @formatter:off override fun assertNode(name: String, flattenIf: Boolean, skipIf: Boolean, isUnordered: Boolean, assert: TreeAssertion.Node.() -> Unit) = @@ -20,35 +26,13 @@ internal abstract class AbstractTreeAssertion private constructor( return } if (options.flattenIf) { - val assertion = FlattenedNodeAssertionImpl(this) - assertion.assert() + addAssertionNodes(expectedChildren, assert) return } val displayName = options.matcher.displayName val expectedChild = SimpleTree.Node(displayName, options) + addAssertionNodes(expectedChild.children, assert) expectedChildren.add(expectedChild) - val assertion = NodeAssertionImpl(expectedChild) - assertion.assert() - } - - private class TreeAssertionImpl( - expectedTree: MutableTree> - ) : AbstractTreeAssertion(expectedTree.roots) - - private class NodeAssertionImpl( - private val expectedNode: MutableTree.Node> - ) : AbstractTreeAssertion(expectedNode.children), TreeAssertion.Node { - - override fun assertValue(assert: (T) -> Unit) { - expectedNode.value.valueAssertion = assert - } - } - - private class FlattenedNodeAssertionImpl( - parentAssertion: AbstractTreeAssertion - ) : AbstractTreeAssertion(parentAssertion.expectedChildren), TreeAssertion.Node { - - override fun assertValue(assert: (T) -> Unit) {} } private class NodeAssertionOptions( @@ -64,12 +48,19 @@ internal abstract class AbstractTreeAssertion private constructor( fun assertTree(actualTree: Tree, isUnordered: Boolean, assert: TreeAssertion.() -> Unit) { val actualMutableTree = actualTree.toMutableTree() val expectedMutableTree = SimpleTree>() - val assertion = TreeAssertionImpl(expectedMutableTree) - assertion.assert() + addAssertionNodes(expectedMutableTree.roots, assert) sortTree(expectedMutableTree, actualMutableTree, isUnordered) assertTree(expectedMutableTree, actualMutableTree) } + private fun addAssertionNodes( + assertionNodes: MutableList>>, + assert: TreeAssertion.Node.() -> Unit + ) { + val assertion = TreeAssertionImpl(assertionNodes) + assertion.assert() + } + private fun assertTree(expectedTree: Tree>, actualTree: Tree) { val queue = ArrayDeque>>, List>>>() queue.add(expectedTree.roots to actualTree.roots)