/**
 * This self.gradle build file is only run when built in ub-setupwizard-* branches.
 */
apply plugin: 'dist'
apply from: 'standalone-rules.gradle'
// Add targets for tests
android.sourceSets {
    androidTest {
        manifest.srcFile 'test/instrumentation/AndroidManifest.xml'
        java.srcDirs = ['test/instrumentation/src']
        res.srcDirs = ['test/instrumentation/res']

        dependencies {
            androidTestCompile 'com.android.support.test:rules:0.5'
            androidTestCompile 'com.android.support.test:runner:0.5'
            androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
            androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
            androidTestCompile 'junit:junit:4.+'
            androidTestCompile 'org.mockito:mockito-core:1.9.5'
        }
    }

    androidTestPlatform {
        java.srcDirs = ['platform/test/src']
    }

    androidTestGingerbreadCompat {
        java.srcDirs = ['full-support/test/instrumentation/src', 'eclair-mr1/test/instrumentation/src']
        res.srcDirs = ['full-support/test/instrumentation/res']
    }

    test {
        java.srcDirs = ['test/robotest/src']

        dependencies {
            testCompile 'org.robolectric:robolectric:3.+'
            testCompile 'org.robolectric:shadows-core:3.+'
            testCompile 'junit:junit:4.+'
            testCompile 'org.mockito:mockito-core:1.9.5'
            // Workaround for https://github.com/robolectric/robolectric/issues/2566
            testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'
        }
    }

    testGingerbreadCompat {
        java.srcDirs = ['eclair-mr1/test/robotest/src', 'full-support/test/robotest/src']
    }
}
android.defaultConfig.testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
android.lintOptions {
    abortOnError true
    htmlReport true
    textOutput 'stderr'
    textReport true
    warningsAsErrors true
    xmlReport false
}
// Run lint for all variants
android.libraryVariants.all { variant ->
    variant.assemble.dependsOn(tasks.findByName('lint'))
}
// Output all test APKs to the distribution folder
def distTask = tasks.findByName('dist')
if (distTask) {
    android.testVariants.all { variant ->
        // Make the dist task depend on the test variant, so the test APK will be built
        distTask.dependsOn variant.assemble
        // TODO: remap the different test variants to different file names
    }
}
