blob: bd6d033aba8fe9e27a72c9b10da5163da83d2fc2 [file] [log] [blame] [edit]
/*
* Copyright 2010-2019 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.kotlin
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.uast.DEFAULT_TYPES_LIST
import org.jetbrains.uast.UFile
import org.jetbrains.uast.UastLanguagePlugin
import org.jetbrains.uast.test.env.kotlin.assertEqualsToFile
import java.io.File
class AlternativesRenderLogTest : AbstractKotlinUastTest() {
fun testClassAnnotation() = doTest("ClassAnnotation")
fun testInnerClasses() = doTest("InnerClasses")
fun testLocalDeclarations() = doTest("LocalDeclarations")
fun testParameterPropertyWithAnnotation() = doTest("ParameterPropertyWithAnnotation")
override fun check(testName: String, file: UFile) {
val valuesFile = getTestFile(testName, "altlog.txt")
assertEqualsToFile("alternatives conversion result", valuesFile, file.asMultiplesTargetConversionResult())
}
private fun UFile.asMultiplesTargetConversionResult(): String {
val plugin = UastLanguagePlugin.byLanguage(KotlinLanguage.INSTANCE)!!
val builder = StringBuilder()
var level = 0
(this.psi as KtFile).accept(object : PsiElementVisitor() {
override fun visitElement(element: PsiElement) {
val uElement = plugin.convertToAlternatives(element, DEFAULT_TYPES_LIST).toList()
if (uElement.any()) {
builder.append(" ".repeat(level))
builder.append("[${uElement.size}]:")
builder.append(uElement.joinToString(", ", "[", "]") { it.asLogString() })
builder.appendln()
}
if (uElement.any()) level++
element.acceptChildren(this)
if (uElement.any()) level--
}
})
return builder.toString()
}
private fun getTestFile(testName: String, ext: String) =
File(File(TEST_KOTLIN_MODEL_DIR, testName).canonicalPath + '.' + ext)
}