tests for comparison of changes in classes
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
+185
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Vendored
+20
@@ -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 {}
|
||||
}
|
||||
Vendored
+21
@@ -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 {}
|
||||
}
|
||||
|
||||
Vendored
+12
@@ -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]
|
||||
+25
@@ -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() {}
|
||||
}
|
||||
|
||||
+24
@@ -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() {}
|
||||
}
|
||||
Vendored
+10
@@ -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>]
|
||||
+31
@@ -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() {}
|
||||
}
|
||||
+33
@@ -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() {}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+12
@@ -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]
|
||||
Vendored
+15
@@ -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() {}
|
||||
}
|
||||
|
||||
Vendored
+14
@@ -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() {}
|
||||
}
|
||||
|
||||
Vendored
+9
@@ -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]
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
enum class EnumClassWithChanges {
|
||||
CONST_1,
|
||||
CONST_3,
|
||||
CONST_4
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
enum class EnumClassWithChanges {
|
||||
CONST_1,
|
||||
CONST_2
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
changes in test/EnumClassWithChanges: MEMBERS
|
||||
[CONST_2, CONST_3, CONST_4]
|
||||
+11
@@ -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) {}
|
||||
+11
@@ -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) {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
changes in test/MainKt: MEMBERS
|
||||
[addedFun, addedVal, changedFun, changedVal, removedFun, removedVal]
|
||||
changes in test/TestPackage: NONE
|
||||
+15
@@ -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() {}
|
||||
}
|
||||
+15
@@ -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() {}
|
||||
}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
changes in test/ClassWithPrivateFunAdded: NONE
|
||||
changes in test/ClassWithPrivateFunRemoved: NONE
|
||||
changes in test/ClassWithPrivateFunSignatureChanged: NONE
|
||||
+12
@@ -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) {
|
||||
}
|
||||
+12
@@ -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() {
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
changes in test/ClassWithPrivatePrimaryConstructorAdded: NONE
|
||||
changes in test/ClassWithPrivatePrimaryConstructorChanged: NONE
|
||||
changes in test/ClassWithPrivatePrimaryConstructorRemoved: NONE
|
||||
+15
@@ -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() {
|
||||
}
|
||||
+13
@@ -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() {}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
changes in test/ClassWithPrivateSecondaryConstructorsAdded: NONE
|
||||
changes in test/ClassWithPrivateSecondaryConstructorsAdded2: NONE
|
||||
changes in test/ClassWithPrivateSecondaryConstructorsRemoved: NONE
|
||||
+21
@@ -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() {}
|
||||
}
|
||||
+20
@@ -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() {}
|
||||
}
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
changes in test/ClassWithGetterForPrivateValChanged: NONE
|
||||
changes in test/ClassWithPrivateValAdded: NONE
|
||||
changes in test/ClassWithPrivateValRemoved: NONE
|
||||
changes in test/ClassWithPrivateValSignatureChanged: NONE
|
||||
+22
@@ -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() {}
|
||||
}
|
||||
+20
@@ -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() {}
|
||||
}
|
||||
Vendored
+4
@@ -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 {
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
changes in test/ClassWithFlagsChanged: CLASS_SIGNATURE
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
public fun main() {}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
public class TestPackage {
|
||||
public fun main() {}
|
||||
}
|
||||
|
||||
public class MainKt {
|
||||
companion object {
|
||||
@JvmStatic
|
||||
public fun main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
REMOVED: class MainKt$Companion.class
|
||||
changes in test/MainKt: CLASS_SIGNATURE
|
||||
changes in test/TestPackage: CLASS_SIGNATURE
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
import kotlin.annotation.*
|
||||
|
||||
class ClassWithTypeParameterListChanged<U> {
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
class ClassWithTypeParameterListChanged<U, V> {
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
changes in test/ClassWithTypeParameterListChanged: CLASS_SIGNATURE
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
import kotlin.annotation.*
|
||||
|
||||
annotation class ClassWithClassAnnotationListChanged
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
@Deprecated("") class ClassWithClassAnnotationListChanged
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
changes in test/ClassWithClassAnnotationListChanged: CLASS_SIGNATURE
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
class ClassWithSuperTypeListChanged : java.io.Serializable {
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
class ClassWithSuperTypeListChanged {
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
changes in test/ClassWithSuperTypeListChanged: CLASS_SIGNATURE
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
public class TestPackage {
|
||||
public fun main() {}
|
||||
}
|
||||
|
||||
public class MainKt {
|
||||
companion object {
|
||||
@JvmStatic
|
||||
public fun main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
public fun main() {}
|
||||
+3
@@ -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
|
||||
Reference in New Issue
Block a user