New J2K: Add nullability analyser tests

This commit is contained in:
Ilya Kirillov
2019-03-21 23:02:11 +03:00
committed by Ilya Kirillov
parent f3b6c880d4
commit bdd773f806
19 changed files with 247 additions and 2 deletions
@@ -973,8 +973,9 @@ fun main(args: Array<String>) {
}
}
testClass<AbstractNewJavaToKotlinConverterNewSingleFileTest> {
model("newFileOrElement", extension = "java")
testGroup("nj2k/tests", "nj2k/testData/") {
testClass<AbstractNullabilityAnalysisTest> {
model("fileOrElement")
}
}
+13
View File
@@ -0,0 +1,13 @@
fun a(): Int {
return 42
}
val b: Int = 2
fun c(p: Int) {
if (p == null);
}
fun check() {
if (a() == null || b == null);
}
+13
View File
@@ -0,0 +1,13 @@
fun a(): Int? {
return 42
}
val b: Int? = 2
fun c(p: Int?) {
if (p == null);
}
fun check() {
if (a() == null || b == null);
}
@@ -0,0 +1,6 @@
fun <T, E, S> foo (x: T, y: List<E>, z: S) {}
fun bar() {
val lst: List<Int> = listOf<Int>(null)
foo<Int, Int, String>(null, lst, "nya")
}
@@ -0,0 +1,6 @@
fun <T, E, S> foo (x: T?, y: List<E?>, z: S) {}
fun bar() {
val lst: List<Int?> = listOf<Int?>(null)
foo<Int, Int, String>(null, lst, "nya")
}
+11
View File
@@ -0,0 +1,11 @@
fun test() {
var x: Int = 1
x = null
var y: Int = 5
y = nullableFun()
}
fun nullableFun(): Int {
return null
}
+11
View File
@@ -0,0 +1,11 @@
fun test() {
var x: Int? = 1
x = null
var y: Int? = 5
y = nullableFun()
}
fun nullableFun(): Int? {
return null
}
+2
View File
@@ -0,0 +1,2 @@
val x: Int = null
fun foo(p: Int = null) {}
@@ -0,0 +1,2 @@
val x: Int? = null
fun foo(p: Int? = null) {}
+4
View File
@@ -0,0 +1,4 @@
fun foo(o: Int) {
if (o == null) return
val a: Int = o
}
+4
View File
@@ -0,0 +1,4 @@
fun foo(o: Int?) {
if (o == null) return
val a: Int = o
}
+12
View File
@@ -0,0 +1,12 @@
open class A () {
open fun foo(x: Int): Int {
if (x == null);
return null
}
}
class B : A() {
override fun foo(x: Int): Int {
return 1
}
}
+12
View File
@@ -0,0 +1,12 @@
open class A () {
open fun foo(x: Int?): Int? {
if (x == null);
return null
}
}
class B : A() {
override fun foo(x: Int?): Int? {
return 1
}
}
+7
View File
@@ -0,0 +1,7 @@
fun foo() {
val cast1: Int = 1 as Int
val cast2: Int = null as Int
val cast3: Float = (1 as Int).toFloat()
val nya: Int = null
val cast4: Int = nya as Int
}
+7
View File
@@ -0,0 +1,7 @@
fun foo() {
val cast1: Int = 1 as Int
val cast2: Int? = null as Int?
val cast3: Float = (1 as Int).toFloat()
val nya: Int? = null
val cast4: Int? = nya as Int?
}
+13
View File
@@ -0,0 +1,13 @@
fun foo() {
val l: List<Int> = List<Int>(1, {1})
val a: Array<Int> = arrayOfNulls<Int>(42)
val b: Array<Int> = arrayOf<Int>(1,2,3)
val c: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOfNulls<Int>(42))
val d: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOf<Int>(42))
val e: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOf<Int>(42, null))
val f: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOf<Int>(42, null), null)
val g: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOf<Int>(42), null)
val h: Array<IntArray> = arrayOfNulls(5)
val i: Array<Array<IntArray>> = Array<Array<IntArray>>(5, { arrayOfNulls<IntArray>(5) })
val k: Array<Int> = arrayOf<Int>(null)
}
+13
View File
@@ -0,0 +1,13 @@
fun foo() {
val l: List<Int> = List<Int>(1, {1})
val a: Array<Int?> = arrayOfNulls<Int>(42)
val b: Array<Int> = arrayOf<Int>(1,2,3)
val c: Array<Array<Int?>> = arrayOf<Array<Int?>>(arrayOfNulls<Int>(42))
val d: Array<Array<Int>> = arrayOf<Array<Int>>(arrayOf<Int>(42))
val e: Array<Array<Int?>> = arrayOf<Array<Int?>>(arrayOf<Int?>(42, null))
val f: Array<Array<Int?>?> = arrayOf<Array<Int?>?>(arrayOf<Int?>(42, null), null)
val g: Array<Array<Int>?> = arrayOf<Array<Int>?>(arrayOf<Int>(42), null)
val h: Array<IntArray?> = arrayOfNulls(5)
val i: Array<Array<IntArray>> = Array<Array<IntArray>>(5, { arrayOfNulls<IntArray>(5) })
val k: Array<Int?> = arrayOf<Int?>(null)
}
@@ -0,0 +1,37 @@
/*
* 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.nj2k
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.AnalysisScope
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.Nullability
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.NullabilityAnalysisFacade
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.preapareTypeElementByMakingAllTypesNullable
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
abstract class AbstractNullabilityAnalysisTest : KotlinLightCodeInsightFixtureTestCase() {
fun doTest(path: String) {
val file = File(path)
val text = FileUtil.loadFile(file, true)
val ktFile = myFixture.configureByText("converterTestFile.kt", text) as KtFile
NullabilityAnalysisFacade(
getTypeElementNullability = { Nullability.UNKNOWN },
prepareTypeElement = ::preapareTypeElementByMakingAllTypesNullable,
debugPrint = false
)
.fixNullability(AnalysisScope(ktFile))
val expectedFile = File(path.replace(".kt", ".kt.after"))
KotlinTestUtils.assertEqualsToFile(expectedFile, ktFile.text)
}
override fun getProjectDescriptor() =
KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
}
@@ -0,0 +1,71 @@
/*
* 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.nj2k;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TargetBackend;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("nj2k/testData/fileOrElement")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public class NullabilityAnalysisTestGenerated extends AbstractNullabilityAnalysisTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
}
public void testAllFilesPresentInFileOrElement() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("nj2k/testData/fileOrElement"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("compareWithNull.kt")
public void testCompareWithNull() throws Exception {
runTest("nj2k/testData/fileOrElement/compareWithNull.kt");
}
@TestMetadata("functionTypeParameterNullability.kt")
public void testFunctionTypeParameterNullability() throws Exception {
runTest("nj2k/testData/fileOrElement/functionTypeParameterNullability.kt");
}
@TestMetadata("nullAsAssignment.kt")
public void testNullAsAssignment() throws Exception {
runTest("nj2k/testData/fileOrElement/nullAsAssignment.kt");
}
@TestMetadata("nullAsInitializer.kt")
public void testNullAsInitializer() throws Exception {
runTest("nj2k/testData/fileOrElement/nullAsInitializer.kt");
}
@TestMetadata("smartCast.kt")
public void testSmartCast() throws Exception {
runTest("nj2k/testData/fileOrElement/smartCast.kt");
}
@TestMetadata("superMethod.kt")
public void testSuperMethod() throws Exception {
runTest("nj2k/testData/fileOrElement/superMethod.kt");
}
@TestMetadata("typeCast.kt")
public void testTypeCast() throws Exception {
runTest("nj2k/testData/fileOrElement/typeCast.kt");
}
@TestMetadata("typeParameters.kt")
public void testTypeParameters() throws Exception {
runTest("nj2k/testData/fileOrElement/typeParameters.kt");
}
}