blob: a01e2e622a3bd695daf39932a9b69cf6e1f58224 [file] [log] [blame]
/*
* Copyright 2021 The Android Open Source Project
*
* 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.
*/
import androidx.build.BuildOnServerKt
import androidx.build.dependencyTracker.AffectedModuleDetector
import androidx.build.uptodatedness.EnableCachingKt
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import static androidx.build.dependencies.DependenciesKt.KOTLIN_STDLIB
plugins {
id("AndroidXPlugin")
id("com.android.library")
id("kotlin-android")
}
dependencies {
implementation(projectOrArtifact(":annotation:annotation"))
implementation(KOTLIN_STDLIB)
}
// Allow usage of Kotlin's @Experimental and @RequiresOptIn annotations.
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
freeCompilerArgs += [
"-Xuse-experimental=kotlin.Experimental",
"-Xopt-in=kotlin.RequiresOptIn",
]
}
}
androidx {
name = "Lint Checks Integration Tests"
description = "This is a sample library for confirming that lint checks execute correctly, b/177437928"
}
android {
lintOptions {
// lint is supposed to detect errors in this project
// We don't need to see the errors in stdout
textOutput("${buildDir}/lint-output.txt")
// We don't want errors to cause lint to fail
abortOnError false
}
}
class CompareFilesTask extends DefaultTask {
@InputFile
File actualFile
@InputFile
File expectedFile
@TaskAction
def compare() {
def actualResults = actualFile.text
def expectedResults = expectedFile.text
if (actualResults != expectedResults) {
throw new GradleException("Incorrect lint results.\n" +
"\n" +
"Actual text: '" + actualResults + "'\n" +
"\n" +
"Expected text: '" + expectedResults + "'\n" +
"\n" +
"Are all lint checks running?\n" +
"\n" +
"Actual output at: " + actualFile + "\n" +
"Expected output at: " + expectedFile + "\n")
}
}
}
def lintOutputFile = project.file("${buildDir}/reports/lint-results-debug.xml")
def lintOutputFileNormalized = project.file("${buildDir}/lint-results-normalized/lint-results-debug.xml.normalized")
def normalizeLintOutput = tasks.register("normalizeLintOutput", Copy) {
def supportRootFolder = project.rootProject.ext.supportRootFolder
from(lintOutputFile) {
filter { line ->
return line.replace(supportRootFolder.getAbsolutePath(), "\$SUPPORT")
}
}
into(lintOutputFileNormalized.parentFile)
rename(".*", lintOutputFileNormalized.name)
dependsOn("lintDebug")
}
def validateLint = tasks.register("validateLint", CompareFilesTask) { task ->
task.actualFile = lintOutputFileNormalized
task.expectedFile = project.file("expected-lint-results.xml")
EnableCachingKt.cacheEvenIfNoOutputs(task)
dependsOn(normalizeLintOutput)
AffectedModuleDetector.configureTaskGuard(task)
}
BuildOnServerKt.addToBuildOnServer(project, validateLint)