tests for comparison of changes in classes

This commit is contained in:
Michael Nedzelsky
2015-08-05 16:38:19 +03:00
parent df283c8f02
commit ae7cc8e430
60 changed files with 953 additions and 0 deletions
@@ -97,6 +97,7 @@ import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterSingleFileTest
import org.jetbrains.kotlin.jps.build.AbstractIncrementalJpsTest
import org.jetbrains.kotlin.jps.build.AbstractLookupTrackerTest
import org.jetbrains.kotlin.jps.build.android.AbstractAndroidJpsTestCase
import org.jetbrains.kotlin.jps.incremental.AbstractProtoComparisonTest
import org.jetbrains.kotlin.js.test.semantics.*
import org.jetbrains.kotlin.jvm.compiler.*
import org.jetbrains.kotlin.jvm.runtime.AbstractJvmRuntimeDescriptorLoaderTest
@@ -832,6 +833,15 @@ fun main(args: Array<String>) {
}
}
testGroup("jps-plugin/test", "jps-plugin/testData") {
testClass(javaClass<AbstractProtoComparisonTest>()) {
model("comparison/classSignatureChange", extension = null, excludeParentDirs = true)
model("comparison/classPrivateOnlyChange", extension = null, excludeParentDirs = true)
model("comparison/classMembersOnlyChanged", extension = null, excludeParentDirs = true)
model("comparison/unchanged", extension = null, excludeParentDirs = true)
}
}
testGroup("plugins/android-compiler-plugin/tests", "plugins/android-compiler-plugin/testData") {
testClass(javaClass<AbstractAndroidXml2KConversionTest>()) {
model("android/converter/simple", recursive = false, extension = null)
@@ -0,0 +1,117 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.jps.incremental
import com.intellij.openapi.util.io.FileUtil
import com.intellij.testFramework.UsefulTestCase
import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind
import org.jetbrains.kotlin.load.kotlin.header.isCompatibleFileFacadeKind
import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind
import org.jetbrains.kotlin.serialization.jvm.BitEncoding
import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.test.MockLibraryUtil
import org.jetbrains.kotlin.utils.Printer
import java.io.File
import kotlin.test.assertEquals
public abstract class AbstractProtoComparisonTest : UsefulTestCase() {
public fun doTest(testDataPath: String) {
val testDir = JetTestUtils.tmpDir("testDirectory")
val oldClassFiles = compileFileAndGetClasses(testDataPath, testDir, "old.kt")
val newClassFiles = compileFileAndGetClasses(testDataPath, testDir, "new.kt")
val oldClassMap = oldClassFiles.toMap { it.name }
val newClassMap = newClassFiles.toMap { it.name }
val sb = StringBuilder()
val p = Printer(sb)
val oldSetOfNames = oldClassFiles.map { it.name }.toSet()
val newSetOfNames = newClassFiles.map { it.name }.toSet()
val removedNames = (oldSetOfNames - newSetOfNames).sorted()
removedNames.forEach {
p.println("REMOVED: class $it")
}
val addedNames = (newSetOfNames - oldSetOfNames).sorted()
addedNames.forEach {
p.println("ADDED: class $it")
}
val commonNames = oldSetOfNames.intersect(newSetOfNames).sorted()
for(name in commonNames) {
p.printDifference(oldClassMap[name]!!, newClassMap[name]!!)
}
JetTestUtils.assertEqualsToFile(File(testDataPath + File.separator + "result.out"), sb.toString());
}
private fun compileFileAndGetClasses(testPath: String, testDir: File, fileName: String): List<File> {
val sourcesDirectory = testDir.createSubDirectory("sources")
val classesDirectory = testDir.createSubDirectory("$fileName.src")
FileUtil.copy(File(testPath, fileName), File(sourcesDirectory, "main.kt"))
MockLibraryUtil.compileKotlin(sourcesDirectory.path, classesDirectory)
return File(classesDirectory, "test").listFiles() { it.name.endsWith(".class") }?.sortedBy { it.name }!!
}
private fun Printer.printDifference(oldClassFile: File, newClassFile: File) {
val oldLocalFileKotlinClass = LocalFileKotlinClass.create(oldClassFile)!!
val newLocalFileKotlinClass = LocalFileKotlinClass.create(newClassFile)!!
val oldClassHeader = oldLocalFileKotlinClass.classHeader
val newClassHeader = newLocalFileKotlinClass.classHeader
val oldProtoBytes = BitEncoding.decodeBytes(oldClassHeader.annotationData!!)
val newProtoBytes = BitEncoding.decodeBytes(newClassHeader.annotationData!!)
val oldProto = ProtoMapValue(oldClassHeader.isCompatiblePackageFacadeKind() || oldClassHeader.isCompatibleFileFacadeKind(), oldProtoBytes)
val newProto = ProtoMapValue(newClassHeader.isCompatiblePackageFacadeKind() || newClassHeader.isCompatibleFileFacadeKind(), newProtoBytes)
val diff = when {
newClassHeader.isCompatiblePackageFacadeKind(), newClassHeader.isCompatibleClassKind(), newClassHeader.isCompatibleFileFacadeKind() ->
difference(oldProto, newProto)
else -> {
println("ignore ${oldLocalFileKotlinClass.classId}")
return
}
}
val changes = when (diff) {
is DifferenceKind.NONE ->
"NONE"
is DifferenceKind.CLASS_SIGNATURE ->
"CLASS_SIGNATURE"
is DifferenceKind.MEMBERS ->
"MEMBERS\n ${diff.names.sorted()}"
}
println("changes in ${oldLocalFileKotlinClass.classId}: $changes")
}
private fun File.createSubDirectory(relativePath: String): File {
val directory = File(this, relativePath)
FileUtil.createDirectory(directory)
return directory
}
}
@@ -0,0 +1,185 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.jps.incremental;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.kotlin.test.JetTestUtils;
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")
@RunWith(JUnit3RunnerWithInners.class)
public class ProtoComparisonTestGenerated extends AbstractProtoComparisonTest {
@TestMetadata("jps-plugin/testData/comparison/classSignatureChange")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ClassSignatureChange extends AbstractProtoComparisonTest {
public void testAllFilesPresentInClassSignatureChange() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/comparison/classSignatureChange"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("classFlagsChanged")
public void testClassFlagsChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classFlagsChanged/");
doTest(fileName);
}
@TestMetadata("classToPackageFacade")
public void testClassToPackageFacade() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classToPackageFacade/");
doTest(fileName);
}
@TestMetadata("classTypeParameterListChanged")
public void testClassTypeParameterListChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classTypeParameterListChanged/");
doTest(fileName);
}
@TestMetadata("classWithClassAnnotationListChanged")
public void testClassWithClassAnnotationListChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classWithClassAnnotationListChanged/");
doTest(fileName);
}
@TestMetadata("classWithSuperTypeListChanged")
public void testClassWithSuperTypeListChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classWithSuperTypeListChanged/");
doTest(fileName);
}
@TestMetadata("packageFacadeToClass")
public void testPackageFacadeToClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/packageFacadeToClass/");
doTest(fileName);
}
}
@TestMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ClassPrivateOnlyChange extends AbstractProtoComparisonTest {
public void testAllFilesPresentInClassPrivateOnlyChange() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/comparison/classPrivateOnlyChange"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("classWithPrivateFunChanged")
public void testClassWithPrivateFunChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/classWithPrivateFunChanged/");
doTest(fileName);
}
@TestMetadata("classWithPrivatePrimaryConstructorChanged")
public void testClassWithPrivatePrimaryConstructorChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/classWithPrivatePrimaryConstructorChanged/");
doTest(fileName);
}
@TestMetadata("classWithPrivateSecondaryConstructorChanged")
public void testClassWithPrivateSecondaryConstructorChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/classWithPrivateSecondaryConstructorChanged/");
doTest(fileName);
}
@TestMetadata("classWithPrivateValChanged")
public void testClassWithPrivateValChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/classWithPrivateValChanged/");
doTest(fileName);
}
@TestMetadata("classWithPrivateVarChanged")
public void testClassWithPrivateVarChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/classWithPrivateVarChanged/");
doTest(fileName);
}
}
@TestMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ClassMembersOnlyChanged extends AbstractProtoComparisonTest {
public void testAllFilesPresentInClassMembersOnlyChanged() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/comparison/classMembersOnlyChanged"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("classWithCompanionObjectChanged")
public void testClassWithCompanionObjectChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/classWithCompanionObjectChanged/");
doTest(fileName);
}
@TestMetadata("classWithConstructorChanged")
public void testClassWithConstructorChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/classWithConstructorChanged/");
doTest(fileName);
}
@TestMetadata("classWithFunAndValChanged")
public void testClassWithFunAndValChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/classWithFunAndValChanged/");
doTest(fileName);
}
@TestMetadata("classWithNestedClassesChanged")
public void testClassWithNestedClassesChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/classWithNestedClassesChanged/");
doTest(fileName);
}
@TestMetadata("classWitnEnumChanged")
public void testClassWitnEnumChanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/classWitnEnumChanged/");
doTest(fileName);
}
@TestMetadata("packageFacadeDifference")
public void testPackageFacadeDifference() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/");
doTest(fileName);
}
}
@TestMetadata("jps-plugin/testData/comparison/unchanged")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Unchanged extends AbstractProtoComparisonTest {
public void testAllFilesPresentInUnchanged() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/comparison/unchanged"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("unchangedClass")
public void testUnchangedClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/unchanged/unchangedClass/");
doTest(fileName);
}
@TestMetadata("unchangedPackageFacade")
public void testUnchangedPackageFacade() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/unchanged/unchangedPackageFacade/");
doTest(fileName);
}
}
}
@@ -0,0 +1,20 @@
package test
class ClassWithAddedCompanionObject {
public fun unchangedFun() {}
companion object {}
}
class ClassWithRemovedCompanionObject {
public fun unchangedFun() {}
}
class ClassWithChangedCompanionObject {
public fun unchangedFun() {}
companion object SecondName {}
}
class ClassWithChangedVisibilityForCompanionObject {
public fun unchangedFun() {}
private companion object {}
}
@@ -0,0 +1,21 @@
package test
class ClassWithAddedCompanionObject {
public fun unchangedFun() {}
}
class ClassWithRemovedCompanionObject {
public fun unchangedFun() {}
companion object {}
}
class ClassWithChangedCompanionObject {
public fun unchangedFun() {}
companion object FirstName {}
}
class ClassWithChangedVisibilityForCompanionObject {
public fun unchangedFun() {}
public companion object {}
}
@@ -0,0 +1,12 @@
REMOVED: class ClassWithChangedCompanionObject$FirstName.class
REMOVED: class ClassWithRemovedCompanionObject$Companion.class
ADDED: class ClassWithAddedCompanionObject$Companion.class
ADDED: class ClassWithChangedCompanionObject$SecondName.class
changes in test/ClassWithAddedCompanionObject: MEMBERS
[Companion]
changes in test/ClassWithChangedCompanionObject: MEMBERS
[FirstName, SecondName]
changes in test/ClassWithChangedVisibilityForCompanionObject.Companion: CLASS_SIGNATURE
changes in test/ClassWithChangedVisibilityForCompanionObject: NONE
changes in test/ClassWithRemovedCompanionObject: MEMBERS
[Companion]
@@ -0,0 +1,25 @@
package test
class ClassWithPrimaryConstructorChanged constructor(arg: String) {
public fun unchangedFun() {}
}
class ClassWithPrimaryConstructorVisibilityChanged private constructor() {
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorsAdded() {
constructor(arg: Int): this() {}
constructor(arg: String): this() {}
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorsRemoved() {
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorVisibilityChanged() {
private constructor(arg: Int): this() {}
public fun unchangedFun() {}
}
@@ -0,0 +1,24 @@
package test
class ClassWithPrimaryConstructorChanged constructor() {
public fun unchangedFun() {}
}
class ClassWithPrimaryConstructorVisibilityChanged constructor() {
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorsAdded {
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorsRemoved() {
public constructor(arg: Int): this() {}
constructor(arg: String): this() {}
public fun unchangedFun() {}
}
class ClassWithSecondaryConstructorVisibilityChanged() {
protected constructor(arg: Int): this() {}
public fun unchangedFun() {}
}
@@ -0,0 +1,10 @@
changes in test/ClassWithPrimaryConstructorChanged: MEMBERS
[<init>]
changes in test/ClassWithPrimaryConstructorVisibilityChanged: MEMBERS
[<init>]
changes in test/ClassWithSecondaryConstructorVisibilityChanged: MEMBERS
[<init>]
changes in test/ClassWithSecondaryConstructorsAdded: MEMBERS
[<init>]
changes in test/ClassWithSecondaryConstructorsRemoved: MEMBERS
[<init>]
@@ -0,0 +1,31 @@
package test
class ClassWithFunAdded {
fun added() {}
public fun unchangedFun() {}
}
class ClassWithFunRemoved {
public fun unchangedFun() {}
}
class ClassWithValAndFunAddedAndRemoved {
public val valAdded: String = ""
fun funAdded() {}
public fun unchangedFun() {}
}
class ClassWithValConvertedToVar {
public var value: Int = 10
public fun unchangedFun() {}
}
class ClassWithChangedVisiblityForFun1 {
private fun foo() {}
public fun unchangedFun() {}
}
class ClassWithChangedVisiblityForFun2 {
protected fun foo() {}
public fun unchangedFun() {}
}
@@ -0,0 +1,33 @@
package test
class ClassWithFunAdded {
public fun unchangedFun() {}
}
class ClassWithFunRemoved {
fun removed() {}
public fun unchangedFun() {}
}
class ClassWithValAndFunAddedAndRemoved {
public val valRemoved: Int = 10
fun funRemoved() {}
public fun unchangedFun() {}
}
class ClassWithValConvertedToVar {
public val value: Int = 10
public fun unchangedFun() {}
}
class ClassWithChangedVisiblityForFun1 {
protected fun foo() {}
public fun unchangedFun() {}
}
class ClassWithChangedVisiblityForFun2 {
private fun foo() {}
public fun unchangedFun() {}
}
@@ -0,0 +1,12 @@
changes in test/ClassWithChangedVisiblityForFun1: MEMBERS
[foo]
changes in test/ClassWithChangedVisiblityForFun2: MEMBERS
[foo]
changes in test/ClassWithFunAdded: MEMBERS
[added]
changes in test/ClassWithFunRemoved: MEMBERS
[removed]
changes in test/ClassWithValAndFunAddedAndRemoved: MEMBERS
[funAdded, funRemoved, valAdded, valRemoved]
changes in test/ClassWithValConvertedToVar: MEMBERS
[value]
@@ -0,0 +1,15 @@
package test
class ClassWithNestedClasses {
class NestedClassAdded {}
inner class InnerClass {}
inner class InnerClassAdded {}
public fun unchangedFun() {}
}
class ClassWithChangedVisibilityForNestedClasses {
private class NestedClass {}
protected inner class InnerClass {}
public fun unchangedFun() {}
}
@@ -0,0 +1,14 @@
package test
class ClassWithNestedClasses {
class NestedClassRemoved {}
inner class InnerClass {}
public fun unchangedFun() {}
}
class ClassWithChangedVisibilityForNestedClasses {
class NestedClass {}
inner class InnerClass {}
public fun unchangedFun() {}
}
@@ -0,0 +1,9 @@
REMOVED: class ClassWithNestedClasses$NestedClassRemoved.class
ADDED: class ClassWithNestedClasses$InnerClassAdded.class
ADDED: class ClassWithNestedClasses$NestedClassAdded.class
changes in test/ClassWithChangedVisibilityForNestedClasses.InnerClass: CLASS_SIGNATURE
changes in test/ClassWithChangedVisibilityForNestedClasses.NestedClass: CLASS_SIGNATURE
changes in test/ClassWithChangedVisibilityForNestedClasses: NONE
changes in test/ClassWithNestedClasses.InnerClass: NONE
changes in test/ClassWithNestedClasses: MEMBERS
[InnerClassAdded, NestedClassAdded, NestedClassRemoved]
@@ -0,0 +1,7 @@
package test
enum class EnumClassWithChanges {
CONST_1,
CONST_3,
CONST_4
}
@@ -0,0 +1,6 @@
package test
enum class EnumClassWithChanges {
CONST_1,
CONST_2
}
@@ -0,0 +1,2 @@
changes in test/EnumClassWithChanges: MEMBERS
[CONST_2, CONST_3, CONST_4]
@@ -0,0 +1,11 @@
package test
public fun unchangedFun() {}
private fun addedFun(): Int = 10
private val addedVal: String = "A"
private val changedVal: String = ""
private fun changedFun(arg: String) {}
@@ -0,0 +1,11 @@
package test
public fun unchangedFun() {}
private fun removedFun(): Int = 10
private val removedVal: String = "A"
private val changedVal: Int = 20
private fun changedFun(arg: Int) {}
@@ -0,0 +1,3 @@
changes in test/MainKt: MEMBERS
[addedFun, addedVal, changedFun, changedVal, removedFun, removedVal]
changes in test/TestPackage: NONE
@@ -0,0 +1,15 @@
package test
class ClassWithPrivateFunAdded {
private fun privateFun() {}
val s = "20"
}
class ClassWithPrivateFunRemoved {
public fun unchangedFun() {}
}
class ClassWithPrivateFunSignatureChanged {
private fun privateFun(arg: Int) {}
public fun unchangedFun() {}
}
@@ -0,0 +1,15 @@
package test
class ClassWithPrivateFunAdded {
val s = "20"
}
class ClassWithPrivateFunRemoved {
private fun privateFun() {}
public fun unchangedFun() {}
}
class ClassWithPrivateFunSignatureChanged {
private fun privateFun(arg: String) {}
public fun unchangedFun() {}
}
@@ -0,0 +1,3 @@
changes in test/ClassWithPrivateFunAdded: NONE
changes in test/ClassWithPrivateFunRemoved: NONE
changes in test/ClassWithPrivateFunSignatureChanged: NONE
@@ -0,0 +1,12 @@
package test
class ClassWithPrivatePrimaryConstructorAdded private constructor() {
private constructor(arg: Int) : this() {}
}
class ClassWithPrivatePrimaryConstructorRemoved {
private constructor(arg: Int) {}
}
class ClassWithPrivatePrimaryConstructorChanged private constructor(arg: String) {
}
@@ -0,0 +1,12 @@
package test
class ClassWithPrivatePrimaryConstructorAdded {
private constructor(arg: Int) {}
}
class ClassWithPrivatePrimaryConstructorRemoved private constructor() {
private constructor(arg: Int) : this() {}
}
class ClassWithPrivatePrimaryConstructorChanged private constructor() {
}
@@ -0,0 +1,3 @@
changes in test/ClassWithPrivatePrimaryConstructorAdded: NONE
changes in test/ClassWithPrivatePrimaryConstructorChanged: NONE
changes in test/ClassWithPrivatePrimaryConstructorRemoved: NONE
@@ -0,0 +1,15 @@
package test
class ClassWithPrivateSecondaryConstructorsAdded() {
private constructor(arg: Int) : this() {}
private constructor(arg: String) : this() {}
}
class ClassWithPrivateSecondaryConstructorsAdded2() {
private constructor(arg: Int) : this() {}
private constructor(arg: String) : this() {}
constructor(arg: Float) : this() {}
}
class ClassWithPrivateSecondaryConstructorsRemoved() {
}
@@ -0,0 +1,13 @@
package test
class ClassWithPrivateSecondaryConstructorsAdded {
}
class ClassWithPrivateSecondaryConstructorsAdded2() {
constructor(arg: Float) : this() {}
}
class ClassWithPrivateSecondaryConstructorsRemoved() {
private constructor(arg: Int): this() {}
private constructor(arg: String): this() {}
}
@@ -0,0 +1,3 @@
changes in test/ClassWithPrivateSecondaryConstructorsAdded: NONE
changes in test/ClassWithPrivateSecondaryConstructorsAdded2: NONE
changes in test/ClassWithPrivateSecondaryConstructorsRemoved: NONE
@@ -0,0 +1,21 @@
package test
class ClassWithPrivateValAdded {
private val x: Int = 100
public fun unchangedFun() {}
}
class ClassWithPrivateValRemoved {
public fun unchangedFun() {}
}
class ClassWithPrivateValSignatureChanged {
private val x: String = "X"
public fun unchangedFun() {}
}
class ClassWithGetterForPrivateValChanged {
private val x: Int
get() = 200
public fun unchangedFun() {}
}
@@ -0,0 +1,20 @@
package test
class ClassWithPrivateValAdded {
public fun unchangedFun() {}
}
class ClassWithPrivateValRemoved {
private val x: Int = 100
public fun unchangedFun() {}
}
class ClassWithPrivateValSignatureChanged {
private val x: Int = 100
public fun unchangedFun() {}
}
class ClassWithGetterForPrivateValChanged {
private val x: Int = 100
public fun unchangedFun() {}
}
@@ -0,0 +1,4 @@
changes in test/ClassWithGetterForPrivateValChanged: NONE
changes in test/ClassWithPrivateValAdded: NONE
changes in test/ClassWithPrivateValRemoved: NONE
changes in test/ClassWithPrivateValSignatureChanged: NONE
@@ -0,0 +1,22 @@
package test
class ClassWithPrivateVarAdded {
private var x: Int = 100
public fun unchangedFun() {}
}
class ClassWithPrivateVarRemoved {
public fun unchangedFun() {}
}
class ClassWithPrivateVarSignatureChanged {
private var x: String = "X"
public fun unchangedFun() {}
}
class ClassWithGetterAndSetterForPrivateVarChanged {
private var x: Int
get() = 200
set(value) {}
public fun unchangedFun() {}
}
@@ -0,0 +1,20 @@
package test
class ClassWithPrivateVarAdded {
public fun unchangedFun() {}
}
class ClassWithPrivateVarRemoved {
private var x: Int = 100
public fun unchangedFun() {}
}
class ClassWithPrivateVarSignatureChanged {
private var x: Int = 100
public fun unchangedFun() {}
}
class ClassWithGetterAndSetterForPrivateVarChanged {
private var x: Int = 100
public fun unchangedFun() {}
}
@@ -0,0 +1,4 @@
changes in test/ClassWithGetterAndSetterForPrivateVarChanged: NONE
changes in test/ClassWithPrivateVarAdded: NONE
changes in test/ClassWithPrivateVarRemoved: NONE
changes in test/ClassWithPrivateVarSignatureChanged: NONE
@@ -0,0 +1,6 @@
package test
import kotlin.annotation.*
open class ClassWithFlagsChanged {
}
@@ -0,0 +1,4 @@
package test
class ClassWithFlagsChanged {
}
@@ -0,0 +1 @@
changes in test/ClassWithFlagsChanged: CLASS_SIGNATURE
@@ -0,0 +1,3 @@
package test
public fun main() {}
@@ -0,0 +1,13 @@
package test
public class TestPackage {
public fun main() {}
}
public class MainKt {
companion object {
@JvmStatic
public fun main() {
}
}
}
@@ -0,0 +1,3 @@
REMOVED: class MainKt$Companion.class
changes in test/MainKt: CLASS_SIGNATURE
changes in test/TestPackage: CLASS_SIGNATURE
@@ -0,0 +1,6 @@
package test
import kotlin.annotation.*
class ClassWithTypeParameterListChanged<U> {
}
@@ -0,0 +1,4 @@
package test
class ClassWithTypeParameterListChanged<U, V> {
}
@@ -0,0 +1 @@
changes in test/ClassWithTypeParameterListChanged: CLASS_SIGNATURE
@@ -0,0 +1,5 @@
package test
import kotlin.annotation.*
annotation class ClassWithClassAnnotationListChanged
@@ -0,0 +1,4 @@
package test
@Deprecated("") class ClassWithClassAnnotationListChanged
@@ -0,0 +1 @@
changes in test/ClassWithClassAnnotationListChanged: CLASS_SIGNATURE
@@ -0,0 +1,4 @@
package test
class ClassWithSuperTypeListChanged : java.io.Serializable {
}
@@ -0,0 +1,6 @@
package test
class ClassWithSuperTypeListChanged {
}
@@ -0,0 +1 @@
changes in test/ClassWithSuperTypeListChanged: CLASS_SIGNATURE
@@ -0,0 +1,13 @@
package test
public class TestPackage {
public fun main() {}
}
public class MainKt {
companion object {
@JvmStatic
public fun main() {
}
}
}
@@ -0,0 +1,3 @@
package test
public fun main() {}
@@ -0,0 +1,3 @@
ADDED: class MainKt$Companion.class
changes in test/MainKt: CLASS_SIGNATURE
changes in test/TestPackage: CLASS_SIGNATURE
@@ -0,0 +1,40 @@
package test
class UnchangedClassWithFunOnly {
public fun unchangedPublicFun() {}
protected fun unchangedProtectedFun() {}
internal fun unchangedInternalFun() {}
private fun unchangedPrivateFun() {}
}
class UnchangedClassWithValOnly {
public val unchangedPublicVal = 10
protected val unchangedProtectedVal = 10
internal val unchangedInternalVal = 10
private val unchangedPrivateVal = 10
}
class UnchangedClassWithVarOnly {
public var unchangedPublicVar = 20
protected var unchangedProtectedVar = 20
internal var unchangedInternalVar = 20
private var unchangedPrivateVar = 20
}
class UnchangedClass {
public val unchangedPublicVal = 10
protected val unchangedProtectedVal = 10
internal val unchangedInternalVal = 10
private val unchangedPrivateVal = 10
public var unchangedPublicVar = 20
protected var unchangedProtectedVar = 20
internal var unchangedInternalVar = 20
private var unchangedPrivateVar = 20
public fun unchangedPublicFun() {}
protected fun unchangedProtectedFun() {}
internal fun unchangedInternalFun() {}
private fun unchangedPrivateFun() {}
}
@@ -0,0 +1,40 @@
package test
class UnchangedClassWithFunOnly {
public fun unchangedPublicFun() {}
protected fun unchangedProtectedFun() {}
internal fun unchangedInternalFun() {}
private fun unchangedPrivateFun() {}
}
class UnchangedClassWithValOnly {
public val unchangedPublicVal = 10
protected val unchangedProtectedVal = 10
internal val unchangedInternalVal = 10
private val unchangedPrivateVal = 10
}
class UnchangedClassWithVarOnly {
public var unchangedPublicVar = 20
protected var unchangedProtectedVar = 20
internal var unchangedInternalVar = 20
private var unchangedPrivateVar = 20
}
class UnchangedClass {
public val unchangedPublicVal = 10
protected val unchangedProtectedVal = 10
internal val unchangedInternalVal = 10
private val unchangedPrivateVal = 10
public var unchangedPublicVar = 20
protected var unchangedProtectedVar = 20
internal var unchangedInternalVar = 20
private var unchangedPrivateVar = 20
public fun unchangedPublicFun() {}
protected fun unchangedProtectedFun() {}
internal fun unchangedInternalFun() {}
private fun unchangedPrivateFun() {}
}
@@ -0,0 +1,4 @@
changes in test/UnchangedClass: NONE
changes in test/UnchangedClassWithFunOnly: NONE
changes in test/UnchangedClassWithValOnly: NONE
changes in test/UnchangedClassWithVarOnly: NONE
@@ -0,0 +1,13 @@
package test
public fun unchangedFun() {}
private fun unchangedPrivateFun(): Int = 10
public val unchangedVal: Int = 10
public var unchangedVar: Int = 20
private val unchangedPrivateVal: Int = 10
private var unchangedPrivateVar: Int = 20
@@ -0,0 +1,13 @@
package test
public fun unchangedFun() {}
private fun unchangedPrivateFun(): Int = 10
public val unchangedVal: Int = 10
public var unchangedVar: Int = 20
private val unchangedPrivateVal: Int = 10
private var unchangedPrivateVar: Int = 20
@@ -0,0 +1,2 @@
changes in test/MainKt: NONE
changes in test/TestPackage: NONE