Rewrite testThirdPartyCopyrights test
This commit is contained in:
@@ -16,7 +16,7 @@ import kotlin.collections.HashSet
|
|||||||
class CodeConformanceTest : TestCase() {
|
class CodeConformanceTest : TestCase() {
|
||||||
companion object {
|
companion object {
|
||||||
private val JAVA_FILE_PATTERN = Pattern.compile(".+\\.java")
|
private val JAVA_FILE_PATTERN = Pattern.compile(".+\\.java")
|
||||||
private val SOURCES_FILE_PATTERN = Pattern.compile("(.+\\.java|.+\\.kt|.+\\.js)")
|
private val SOURCES_FILE_PATTERN = Pattern.compile(".+\\.(java|kt|js)")
|
||||||
private const val MAX_STEPS_COUNT = 100
|
private const val MAX_STEPS_COUNT = 100
|
||||||
private val nonSourcesMatcher = FileMatcher(
|
private val nonSourcesMatcher = FileMatcher(
|
||||||
File("."),
|
File("."),
|
||||||
@@ -61,39 +61,42 @@ class CodeConformanceTest : TestCase() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
private val COPYRIGHT_EXCLUDED_FILES_AND_DIRS = listOf(
|
private val COPYRIGHT_EXCLUDED_FILES_AND_DIRS_MATCHER = FileMatcher(
|
||||||
"build",
|
File("."),
|
||||||
"buildSrc/prepare-deps/build",
|
listOf(
|
||||||
"compiler/ir/serialization.js/build/fullRuntime",
|
"build",
|
||||||
"compiler/ir/serialization.js/build/reducedRuntime/src/libraries/stdlib/js-ir/runtime/longjs.kt",
|
"buildSrc/prepare-deps/build",
|
||||||
"compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt",
|
"compiler/ir/serialization.js/build/fullRuntime",
|
||||||
"dependencies",
|
"compiler/ir/serialization.js/build/reducedRuntime/src/libraries/stdlib/js-ir/runtime/longjs.kt",
|
||||||
"dependencies/android-sdk/build",
|
"compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt",
|
||||||
"dependencies/protobuf/protobuf-relocated/build",
|
"dependencies",
|
||||||
"dist",
|
"dependencies/android-sdk/build",
|
||||||
"idea/idea-jvm/src/org/jetbrains/kotlin/idea/copyright",
|
"dependencies/protobuf/protobuf-relocated/build",
|
||||||
"js/js.tests/.gradle",
|
"dist",
|
||||||
"js/js.translator/testData/node_modules",
|
"idea/idea-jvm/src/org/jetbrains/kotlin/idea/copyright",
|
||||||
"libraries/kotlin.test/js/it/.gradle",
|
"js/js.tests/.gradle",
|
||||||
"libraries/kotlin.test/js/it/node_modules",
|
"js/js.translator/testData/node_modules",
|
||||||
"libraries/stdlib/common/build",
|
"libraries/kotlin.test/js/it/.gradle",
|
||||||
"libraries/stdlib/js-ir/.gradle",
|
"libraries/kotlin.test/js/it/node_modules",
|
||||||
"libraries/stdlib/js-ir/build",
|
"libraries/stdlib/common/build",
|
||||||
"libraries/stdlib/js-ir/build/",
|
"libraries/stdlib/js-ir/.gradle",
|
||||||
"libraries/stdlib/js-ir/runtime/longjs.kt",
|
"libraries/stdlib/js-ir/build",
|
||||||
"libraries/stdlib/js-ir-minimal-for-test/.gradle",
|
"libraries/stdlib/js-ir/build/",
|
||||||
"libraries/stdlib/js-ir-minimal-for-test/build",
|
"libraries/stdlib/js-ir/runtime/longjs.kt",
|
||||||
"libraries/stdlib/js-v1/.gradle",
|
"libraries/stdlib/js-ir-minimal-for-test/.gradle",
|
||||||
"libraries/stdlib/js-v1/build",
|
"libraries/stdlib/js-ir-minimal-for-test/build",
|
||||||
"libraries/stdlib/js-v1/node_modules",
|
"libraries/stdlib/js-v1/.gradle",
|
||||||
"libraries/tools/kotlin-gradle-plugin-integration-tests/build",
|
"libraries/stdlib/js-v1/build",
|
||||||
"libraries/tools/kotlin-maven-plugin-test/target",
|
"libraries/stdlib/js-v1/node_modules",
|
||||||
"libraries/tools/kotlin-test-js-runner/.gradle",
|
"libraries/tools/kotlin-gradle-plugin-integration-tests/build",
|
||||||
"libraries/tools/kotlin-test-js-runner/lib",
|
"libraries/tools/kotlin-maven-plugin-test/target",
|
||||||
"libraries/tools/kotlin-test-js-runner/node_modules",
|
"libraries/tools/kotlin-test-js-runner/.gradle",
|
||||||
"libraries/tools/kotlin-test-nodejs-runner/.gradle",
|
"libraries/tools/kotlin-test-js-runner/lib",
|
||||||
"libraries/tools/kotlin-test-nodejs-runner/node_modules",
|
"libraries/tools/kotlin-test-js-runner/node_modules",
|
||||||
"out"
|
"libraries/tools/kotlin-test-nodejs-runner/.gradle",
|
||||||
|
"libraries/tools/kotlin-test-nodejs-runner/node_modules",
|
||||||
|
"out"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,22 +226,26 @@ class CodeConformanceTest : TestCase() {
|
|||||||
|
|
||||||
fun testThirdPartyCopyrights() {
|
fun testThirdPartyCopyrights() {
|
||||||
val filesWithUnlistedCopyrights = mutableListOf<String>()
|
val filesWithUnlistedCopyrights = mutableListOf<String>()
|
||||||
val root = File(".").absoluteFile
|
|
||||||
val knownThirdPartyCode = loadKnownThirdPartyCodeList()
|
val knownThirdPartyCode = loadKnownThirdPartyCodeList()
|
||||||
val copyrightRegex = Regex("""\bCopyright\b""")
|
val copyrightRegex = Regex("""\bCopyright\b""")
|
||||||
for (sourceFile in FileUtil.findFilesByMask(SOURCES_FILE_PATTERN, root)) {
|
val root = COPYRIGHT_EXCLUDED_FILES_AND_DIRS_MATCHER.root
|
||||||
val relativePath = FileUtil.toSystemIndependentName(sourceFile.toRelativeString(root))
|
|
||||||
if (COPYRIGHT_EXCLUDED_FILES_AND_DIRS.any { relativePath.startsWith(it) } ||
|
|
||||||
knownThirdPartyCode.any { relativePath.startsWith(it) }) continue
|
|
||||||
|
|
||||||
sourceFile.useLines { lineSequence ->
|
COPYRIGHT_EXCLUDED_FILES_AND_DIRS_MATCHER.walkTopDown(SOURCES_FILE_PATTERN)
|
||||||
for (line in lineSequence) {
|
.filter { sourceFile ->
|
||||||
if (copyrightRegex in line && "JetBrains" !in line) {
|
val relativePath = FileUtil.toSystemIndependentName(sourceFile.toRelativeString(root))
|
||||||
filesWithUnlistedCopyrights.add("$relativePath: $line")
|
!knownThirdPartyCode.any { relativePath.startsWith(it) }
|
||||||
|
}
|
||||||
|
.forEach { sourceFile ->
|
||||||
|
sourceFile.useLines { lineSequence ->
|
||||||
|
for (line in lineSequence) {
|
||||||
|
if (copyrightRegex in line && "JetBrains" !in line) {
|
||||||
|
val relativePath = FileUtil.toSystemIndependentName(sourceFile.toRelativeString(root))
|
||||||
|
filesWithUnlistedCopyrights.add("$relativePath: $line")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (filesWithUnlistedCopyrights.isNotEmpty()) {
|
if (filesWithUnlistedCopyrights.isNotEmpty()) {
|
||||||
fail(
|
fail(
|
||||||
"The following files contain third-party copyrights and no license information. " +
|
"The following files contain third-party copyrights and no license information. " +
|
||||||
@@ -248,10 +255,10 @@ class CodeConformanceTest : TestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class FileMatcher(val root: File, paths: Collection<String>) {
|
private class FileMatcher(val root: File, paths: Collection<String>) {
|
||||||
private val files = paths.filter { !it.startsWith("*/") }.map(::File)
|
private val files = paths.map { File(it) }
|
||||||
private val names = files.mapTo(HashSet()) { it.name }
|
private val names = files.mapTo(HashSet()) { it.name }
|
||||||
private val paths = files.mapTo(HashSet()) { it.systemIndependentPath }
|
private val paths = files.mapTo(HashSet()) { it.systemIndependentPath }
|
||||||
private val relativePaths = files.filter { it.isDirectory }.mapTo(HashSet()) { it.systemIndependentPath + "/" }
|
private val relativePaths = files.filterTo(ArrayList()) { it.isDirectory }.mapTo(HashSet()) { it.systemIndependentPath + "/" }
|
||||||
|
|
||||||
fun matchExact(file: File): Boolean {
|
fun matchExact(file: File): Boolean {
|
||||||
return (file.name in names) && file.relativeTo(root).systemIndependentPath in paths
|
return (file.name in names) && file.relativeTo(root).systemIndependentPath in paths
|
||||||
|
|||||||
Reference in New Issue
Block a user