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


import androidx.build.LibraryType
import androidx.build.Publish
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("kotlin-android")
}

dependencies {
    implementation(libs.testCore)
    implementation(libs.testRules)
    implementation(libs.testUiautomator)
    api("androidx.annotation:annotation:1.2.0")
    implementation(libs.guavaListenableFuture)
    implementation("androidx.appcompat:appcompat:1.1.0")
    api(project(":camera:camera-core"))
    implementation("androidx.core:core:1.1.0")
    implementation("androidx.concurrent:concurrent-futures:1.0.0")
    implementation("androidx.test.espresso:espresso-core:3.3.0")
    implementation("androidx.test.espresso:espresso-idling-resource:3.1.0")
    implementation(libs.junit)
    implementation(libs.kotlinStdlib)
    implementation(libs.kotlinCoroutinesAndroid)

    testImplementation(libs.testCore)
    testImplementation(libs.testRunner)
    testImplementation(libs.junit)
    testImplementation(libs.truth)
    testImplementation(libs.robolectric)
    testImplementation(libs.mockitoCore)
}

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
                arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
            }
        }
    }

    lintOptions {
        enable 'CameraXQuirksClassDetector'
    }

    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version libs.versions.cmake.get()
        }
    }
    namespace "androidx.camera.testing"
}

// Allow usage of Kotlin's @OptIn.
tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += ["-opt-in=kotlin.RequiresOptIn"]
    }
}

androidx {
    name = "Jetpack Camera Testing Library"
    type = LibraryType.INTERNAL_TEST_LIBRARY
    publish = Publish.NONE
    mavenGroup = LibraryGroups.CAMERA
    inceptionYear = "2019"
    description = "Testing components for the Jetpack Camera Library, a library providing a " +
            "consistent and reliable camera foundation that enables great camera driven " +"" +
            "experiences across all of Android."
}
