/*
 * Copyright (C) 2017 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 static android.support.dependencies.DependenciesKt.*

plugins {
    id("SupportAndroidTestAppPlugin")
    id("kotlin-kapt")
    id("kotlin-android")
}

android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }
    sourceSets {
        androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    }
}

dependencies {
    implementation(project(":room:common"))
    implementation(project(":persistence:db"))
    implementation(project(":persistence:db-framework"))
    implementation(project(":room:runtime"))
    implementation(project(":arch:runtime"))

    implementation(SUPPORT_APPCOMPAT, libs.support_exclude_config)
    kaptAndroidTest project(":room:compiler")

    androidTestImplementation(TEST_RUNNER) {
        exclude module: 'support-annotations'
        exclude module: 'hamcrest-core'
    }
    androidTestImplementation(ESPRESSO_CORE, {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude module: "hamcrest-core"
    })
    // IJ's gradle integration just cannot figure this out ...
    androidTestImplementation project(':lifecycle:extensions')
    androidTestImplementation project(':lifecycle:common')
    androidTestImplementation project(':lifecycle:runtime')
    androidTestImplementation project(':room:testing')
    androidTestImplementation project(':room:rxjava2')
    androidTestImplementation project(':arch:core-testing')
    androidTestImplementation(GUAVA_ANDROID)
    androidTestImplementation(RX_JAVA)
    testImplementation(MOCKITO_CORE)
}

tasks['check'].dependsOn(tasks['connectedCheck'])

uploadArchives.enabled = false
