From cf2f36fa495523baf00f68afdc82baeb8d152dee Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 24 May 2021 23:01:33 -0700 Subject: [PATCH] UAST: utilize values test base --- .../uast/test/common/kotlin/ValueLogger.kt | 45 +++++++++++++++++ .../test/common/kotlin/valuesTestUtils.kt | 19 +++++++ .../uast/test/common/kotlin/ValuesTestBase.kt | 50 +------------------ 3 files changed, 66 insertions(+), 48 deletions(-) create mode 100644 plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/ValueLogger.kt create mode 100644 plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/valuesTestUtils.kt diff --git a/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/ValueLogger.kt b/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/ValueLogger.kt new file mode 100644 index 00000000000..1d574d8e69b --- /dev/null +++ b/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/ValueLogger.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.test.common.kotlin + +import org.jetbrains.uast.UElement +import org.jetbrains.uast.UExpression +import org.jetbrains.uast.evaluation.UEvaluationContext +import org.jetbrains.uast.visitor.UastVisitor + +class ValueLogger(val evaluationContext: UEvaluationContext) : UastVisitor { + + val builder = StringBuilder() + + var level = 0 + + override fun visitElement(node: UElement): Boolean { + val initialLine = node.asLogString() + " [" + run { + val renderString = node.asRenderString().lines() + if (renderString.size == 1) { + renderString.single() + } else { + renderString.first() + "..." + renderString.last() + } + } + "]" + + (1..level).forEach { builder.append(" ") } + builder.append(initialLine) + if (node is UExpression) { + val value = evaluationContext.valueOf(node) + builder.append(" = ").append(value) + } + builder.appendLine() + level++ + return false + } + + override fun afterVisitElement(node: UElement) { + level-- + } + + override fun toString() = builder.toString() +} diff --git a/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/valuesTestUtils.kt b/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/valuesTestUtils.kt new file mode 100644 index 00000000000..61dcbed62e3 --- /dev/null +++ b/plugins/uast-kotlin-base/tests/org/jetbrains/uast/test/common/kotlin/valuesTestUtils.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.test.common.kotlin + +import org.jetbrains.uast.UFile +import org.jetbrains.uast.evaluation.UEvaluatorExtension +import org.jetbrains.uast.evaluation.analyzeAll + +fun UFile.asLogValues( + uEvaluatorExtension: UEvaluatorExtension? = null +): String { + val evaluationContext = analyzeAll(extensions = uEvaluatorExtension?.let { listOf(it) } ?: emptyList()) + return ValueLogger(evaluationContext).apply { + this@asLogValues.accept(this) + }.toString() +} diff --git a/plugins/uast-kotlin/tests/org/jetbrains/uast/test/common/kotlin/ValuesTestBase.kt b/plugins/uast-kotlin/tests/org/jetbrains/uast/test/common/kotlin/ValuesTestBase.kt index 9f73243603a..8712d9f73e2 100644 --- a/plugins/uast-kotlin/tests/org/jetbrains/uast/test/common/kotlin/ValuesTestBase.kt +++ b/plugins/uast-kotlin/tests/org/jetbrains/uast/test/common/kotlin/ValuesTestBase.kt @@ -5,64 +5,18 @@ package org.jetbrains.uast.test.common.kotlin -import org.jetbrains.uast.UElement -import org.jetbrains.uast.UExpression import org.jetbrains.uast.UFile -import org.jetbrains.uast.evaluation.UEvaluationContext import org.jetbrains.uast.evaluation.UEvaluatorExtension -import org.jetbrains.uast.evaluation.analyzeAll import org.jetbrains.uast.test.env.kotlin.assertEqualsToFile -import org.jetbrains.uast.visitor.UastVisitor import java.io.File interface ValuesTestBase { fun getValuesFile(testName: String): File fun getEvaluatorExtension(): UEvaluatorExtension? = null - private fun UFile.asLogValues(): String { - val evaluationContext = analyzeAll(extensions = getEvaluatorExtension()?.let { listOf(it) } ?: emptyList()) - return ValueLogger(evaluationContext).apply { - this@asLogValues.accept(this) - }.toString() - } - fun check(testName: String, file: UFile) { val valuesFile = getValuesFile(testName) - assertEqualsToFile("Log values", valuesFile, file.asLogValues()) + assertEqualsToFile("Log values", valuesFile, file.asLogValues(getEvaluatorExtension())) } - - class ValueLogger(val evaluationContext: UEvaluationContext) : UastVisitor { - - val builder = StringBuilder() - - var level = 0 - - override fun visitElement(node: UElement): Boolean { - val initialLine = node.asLogString() + " [" + run { - val renderString = node.asRenderString().lines() - if (renderString.size == 1) { - renderString.single() - } else { - renderString.first() + "..." + renderString.last() - } - } + "]" - - (1..level).forEach { builder.append(" ") } - builder.append(initialLine) - if (node is UExpression) { - val value = evaluationContext.valueOf(node) - builder.append(" = ").append(value) - } - builder.appendLine() - level++ - return false - } - - override fun afterVisitElement(node: UElement) { - level-- - } - - override fun toString() = builder.toString() - } -} \ No newline at end of file +}