/*
 * Copyright 2019 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.
 */

// This project contains tests for code contained in buildSrc
// This project is stored outside of buildSrc/ so that waiting for these tests to complete doesn't delay the rest of the build

import static androidx.build.dependencies.DependenciesKt.*
import androidx.build.BuildServerConfigurationKt

plugins {
    id("AndroidXPlugin")
    id("kotlin")
}

dependencies {
    implementation(gradleApi())
    testImplementation(JUNIT)
    implementation(project.files(new File(BuildServerConfigurationKt.getRootOutDirectory(project), "buildSrc/build/libs/buildSrc.jar")))
}

// Also do style checking of the buildSrc project from within this project too
// We run that from this project so that it doesn't block other projects while it runs
def ktlintDir = "../buildSrc/"
def ktlintIncludes = "src/**/*.kt"
def ktlintInputs = project.fileTree(ktlintDir) {
    include ktlintIncludes
}
tasks["ktlint"].configure({ t ->
    t.inputs.files(ktlintInputs)
    t.workingDir = ktlintDir
    t.args = t.args + ktlintIncludes
})
tasks["ktlintFormat"].configure({ t ->
    t.inputs.files(ktlintInputs)
    t.workingDir = ktlintDir
    t.args = t.args + ktlintIncludes
})
