Change total kotlin tests architecture
This commit is contained in:
committed by
Mikhail Glukhikh
parent
45faf76b4a
commit
0e8bbab925
+46
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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.kotlin.fir.lightTree.totalKotlin
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
|
import com.intellij.openapi.vfs.CharsetToolkit
|
||||||
|
import com.intellij.testFramework.TestDataPath
|
||||||
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.system.measureNanoTime
|
||||||
|
|
||||||
|
@TestDataPath("/")
|
||||||
|
@RunWith(JUnit3RunnerWithInners::class)
|
||||||
|
abstract class AbstractTotalKotlinTest(private val treeName: String) : AbstractRawFirBuilderTestCase() {
|
||||||
|
protected abstract fun generateTree(onlyBaseTree: Boolean, text: String, file: File)
|
||||||
|
|
||||||
|
fun totalKotlinTest(onlyBaseTree: Boolean) {
|
||||||
|
val path = System.getProperty("user.dir")
|
||||||
|
val root = File(path)
|
||||||
|
var counter = 0
|
||||||
|
var time = 0L
|
||||||
|
|
||||||
|
if (onlyBaseTree) println("$treeName generation") else println("Fir from $treeName converter")
|
||||||
|
println("BASE PATH: $path")
|
||||||
|
for (file in root.walkTopDown()) {
|
||||||
|
if (file.isDirectory) continue
|
||||||
|
if (file.path.contains("testData") || file.path.contains("resources")) continue
|
||||||
|
if (file.extension != "kt") continue
|
||||||
|
|
||||||
|
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
||||||
|
time += measureNanoTime {
|
||||||
|
generateTree(onlyBaseTree, text, file)
|
||||||
|
}
|
||||||
|
|
||||||
|
counter++
|
||||||
|
}
|
||||||
|
println("SUCCESS!")
|
||||||
|
println("TIME PER FILE: ${(time / counter) * 1e-6} ms, COUNTER: $counter")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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.kotlin.fir.lightTree.totalKotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.impl.DebugUtil
|
||||||
|
import com.intellij.testFramework.TestDataPath
|
||||||
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
@TestDataPath("/")
|
||||||
|
@RunWith(JUnit3RunnerWithInners::class)
|
||||||
|
class LightTree2FirConverterTotalTest : AbstractTotalKotlinTest("LightTree") {
|
||||||
|
private var lightTreeConverter: LightTree2Fir? = null
|
||||||
|
|
||||||
|
override fun generateTree(onlyBaseTree: Boolean, text: String, file: File) {
|
||||||
|
if (onlyBaseTree) {
|
||||||
|
val lightTree = lightTreeConverter!!.buildLightTree(text)
|
||||||
|
DebugUtil.lightTreeToString(lightTree, false)
|
||||||
|
} else {
|
||||||
|
val firFile = lightTreeConverter!!.buildFirFile(text, file.name)
|
||||||
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createConverter() {
|
||||||
|
val parserDefinition = KotlinParserDefinition()
|
||||||
|
val lexer = parserDefinition.createLexer(myProject)
|
||||||
|
lightTreeConverter = LightTree2Fir(true, parserDefinition, lexer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testTotalKotlinOnlyLightTree() {
|
||||||
|
createConverter()
|
||||||
|
totalKotlinTest(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testTotalKotlinFirFromLightTree() {
|
||||||
|
createConverter()
|
||||||
|
totalKotlinTest(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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.kotlin.fir.lightTree.totalKotlin
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
|
import com.intellij.psi.impl.DebugUtil
|
||||||
|
import com.intellij.testFramework.TestDataPath
|
||||||
|
import com.intellij.util.PathUtil
|
||||||
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
@TestDataPath("/")
|
||||||
|
@RunWith(JUnit3RunnerWithInners::class)
|
||||||
|
class Psi2FirConverterTotalTest : AbstractTotalKotlinTest("Psi") {
|
||||||
|
override fun generateTree(onlyBaseTree: Boolean, text: String, file: File) {
|
||||||
|
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
||||||
|
if (onlyBaseTree) {
|
||||||
|
DebugUtil.psiTreeToString(ktFile, false)
|
||||||
|
} else {
|
||||||
|
val firFile = ktFile.toFirFile(stubMode = true)
|
||||||
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testTotalKotlinOnlyPsi() {
|
||||||
|
totalKotlinTest(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testTotalKotlinFirFromPsi() {
|
||||||
|
totalKotlinTest(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
+26
-17
@@ -3,7 +3,7 @@
|
|||||||
* that can be found in the license/LICENSE.txt file.
|
* that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree
|
package org.jetbrains.kotlin.fir.lightTree.totalKotlin
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
import com.intellij.openapi.vfs.CharsetToolkit
|
import com.intellij.openapi.vfs.CharsetToolkit
|
||||||
@@ -12,6 +12,7 @@ import com.intellij.testFramework.TestDataPath
|
|||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
|
||||||
@@ -19,9 +20,29 @@ import org.junit.runner.RunWith
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.system.measureNanoTime
|
import kotlin.system.measureNanoTime
|
||||||
|
|
||||||
@TestDataPath("\$PROJECT_ROOT")
|
@TestDataPath("/")
|
||||||
@RunWith(JUnit3RunnerWithInners::class)
|
@RunWith(JUnit3RunnerWithInners::class)
|
||||||
class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() {
|
class TotalKotlinTest : AbstractRawFirBuilderTestCase() {
|
||||||
|
private fun generateFirFromPsi(onlyPsi: Boolean, text: String, path: String) {
|
||||||
|
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(path)), text) as KtFile
|
||||||
|
if (onlyPsi) {
|
||||||
|
DebugUtil.psiTreeToString(ktFile, false)
|
||||||
|
} else {
|
||||||
|
val firFile = ktFile.toFirFile(stubMode = true)
|
||||||
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun generateFirFromLightTree(onlyLightTree: Boolean, converter: LightTree2Fir, text: String, fileName: String) {
|
||||||
|
if (onlyLightTree) {
|
||||||
|
val lightTree = converter.buildLightTree(text)
|
||||||
|
DebugUtil.lightTreeToString(lightTree, false)
|
||||||
|
} else {
|
||||||
|
val firFile = converter.buildFirFile(text, fileName)
|
||||||
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun totalKotlinLight(onlyLightTree: Boolean) {
|
private fun totalKotlinLight(onlyLightTree: Boolean) {
|
||||||
val path = System.getProperty("user.dir")
|
val path = System.getProperty("user.dir")
|
||||||
val root = File(path)
|
val root = File(path)
|
||||||
@@ -41,13 +62,7 @@ class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() {
|
|||||||
|
|
||||||
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
||||||
time += measureNanoTime {
|
time += measureNanoTime {
|
||||||
if (onlyLightTree) {
|
generateFirFromLightTree(onlyLightTree, lightTreeConverter, text, file.name)
|
||||||
val lightTree = lightTreeConverter.buildLightTree(text)
|
|
||||||
DebugUtil.lightTreeToString(lightTree, false)
|
|
||||||
} else {
|
|
||||||
val firFile = lightTreeConverter.buildFirFile(text, file.name)
|
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
counter++
|
counter++
|
||||||
@@ -72,13 +87,7 @@ class LightTree2FirConverterTotalKotlin : AbstractRawFirBuilderTestCase() {
|
|||||||
|
|
||||||
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
||||||
time += measureNanoTime {
|
time += measureNanoTime {
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
generateFirFromPsi(onlyPsi, text, file.path)
|
||||||
if (onlyPsi) {
|
|
||||||
DebugUtil.psiTreeToString(ktFile, false)
|
|
||||||
} else {
|
|
||||||
val firFile = ktFile.toFirFile(stubMode = true)
|
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
counter++
|
counter++
|
||||||
Reference in New Issue
Block a user