DivisionBy-Zero/erpa-sweng

View on GitHub
app/build.gradle

Summary

Maintainability
Test Coverage
apply plugin: 'com.android.application'
apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.8.0"
}

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "ch.epfl.sweng.erpa"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ['toothpick_registry_package_name': 'ch.epfl.sweng.erpa.smoothie']
            }
        }
    }
    buildTypes {
        debug {
            testCoverageEnabled true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions {
        disable 'InvalidPackage' // Toothpick runtime includes references to javax.inject which have
        // runtime retention even if they're not used since we use registries
        // for injection instead of reflection.
    }

    dataBinding {
        enabled = true
    }
}

allprojects {
    tasks.withType(Test) {
        testLogging {
            exceptionFormat "full"
            showCauses true
            showExceptions true
            showStackTraces true
            showStandardStreams true
            events = ["passed", "skipped", "failed", "standardOut", "standardError"]
        }
    }
}

configurations {
    implementation.exclude module: 'com.android.tools.external.lombok'
    all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '28.0.0'
                }
            }

        }
    }
}

repositories {
    jcenter()
}

ext {
    depVersionAndroidTest = "1.0.2"
    depVersionAndroidWearable = "2.1.0" // needed to fix the version for processing
    depVersionAnnimonStream = "1.1.4"
    depVersionAppcompat = "28.0.0"
    depVersionBcrypt = "0.5.0"
    depVersionButterknife = "8.8.1"
    depVersionCryptoEddsa = "0.3.0"
    depVersionDexmaker = "2.19.1"
    depVersionEspresso = "3.0.2"
    depVersionGuava = "27.0.1-android"
    depVersionJargon2 = "1.1.1"
    depVersionJhash = "2.1.0"
    depVersionJunit = "4.12"
    depVersionLombok = "1.16.20" // github.com/rzwitserloot/lombok/issues/1727
    depVersionMockito = "2.22.0"
    depVersionPowermock = "1.7.4"
    depVersionRetroLambda = "3.2.5"
    depVersionRetrofit = "2.4.0"
    depVersionRetrolambdaLombokAst = "0.2.3.a2"
    depVersionSnakeYaml = "1.23"
    depVersionToothpick = "1.1.3"
    depVersionProcessing = "4.0.3"
}

dependencies {
    implementation "com.android.support:appcompat-v7:${depVersionAppcompat}"
    implementation "com.android.support:cardview-v7:${depVersionAppcompat}"
    implementation "com.android.support:design:${depVersionAppcompat}"
    implementation "com.android.support:recyclerview-v7:${depVersionAppcompat}"
    compileOnly "com.google.android.wearable:wearable:${depVersionAndroidWearable}"

    androidTestAnnotationProcessor "org.projectlombok:lombok:${depVersionLombok}"
    androidTestCompileOnly "org.projectlombok:lombok:${depVersionLombok}"
    androidTestImplementation "com.android.support.test.espresso:espresso-contrib:${depVersionEspresso}"
    androidTestImplementation "com.android.support.test.espresso:espresso-core:${depVersionEspresso}"
    androidTestImplementation "com.android.support.test.espresso:espresso-intents:${depVersionEspresso}"
    androidTestImplementation "com.android.support.test:rules:${depVersionAndroidTest}"
    androidTestImplementation "com.android.support.test:runner:${depVersionAndroidTest}"
    androidTestImplementation "org.mockito:mockito-android:${depVersionMockito}"
    annotationProcessor "com.github.stephanenicolas.toothpick:toothpick-compiler:${depVersionToothpick}"
    annotationProcessor "com.jakewharton:butterknife-compiler:${depVersionButterknife}"
    annotationProcessor "org.projectlombok:lombok:${depVersionLombok}"
    compileOnly "org.projectlombok:lombok:${depVersionLombok}"
    implementation "at.favre.lib:bcrypt:${depVersionBcrypt}"
    implementation "com.amdelamar:jhash:${depVersionJhash}"
    implementation "com.android.support.constraint:constraint-layout:${depVersionToothpick}"
    implementation "com.annimon:stream:${depVersionAnnimonStream}"
    implementation "com.github.stephanenicolas.toothpick:smoothie:${depVersionToothpick}"
    implementation "com.github.stephanenicolas.toothpick:toothpick-runtime:${depVersionToothpick}"
    implementation "com.google.guava:guava:${depVersionGuava}"
    implementation "com.jakewharton:butterknife:${depVersionButterknife}"
    implementation "com.kosprov.jargon2:jargon2-api:${depVersionJargon2}"
    implementation "com.kosprov.jargon2:jargon2-api:${depVersionJargon2}"
    implementation "com.kosprov.jargon2:jargon2-native-ri-backend:${depVersionJargon2}"
    implementation "com.kosprov.jargon2:jargon2-native-ri-backend:${depVersionJargon2}"
    implementation "com.linkedin.dexmaker:dexmaker:${depVersionDexmaker}"
    implementation "com.squareup.retrofit2:converter-scalars:${depVersionRetrofit}"
    implementation "com.squareup.retrofit2:converter-gson:${depVersionRetrofit}"
    implementation "com.squareup.retrofit2:retrofit:${depVersionRetrofit}"
    implementation "net.i2p.crypto:eddsa:${depVersionCryptoEddsa}"
    implementation "me.tatarka.retrolambda.projectlombok:lombok.ast:${depVersionRetrolambdaLombokAst}"
    implementation "me.tatarka:gradle-retrolambda:${depVersionRetroLambda}"
    implementation "org.p5android:processing-core:${depVersionProcessing}"
    implementation "org.yaml:snakeyaml:${depVersionSnakeYaml}"
    testAnnotationProcessor "com.github.stephanenicolas.toothpick:toothpick-compiler:${depVersionToothpick}"
    testImplementation "com.github.stephanenicolas.toothpick:toothpick-testing:${depVersionToothpick}"
    testImplementation "junit:junit:${depVersionJunit}"
    testImplementation "org.powermock:powermock-api-mockito2:${depVersionPowermock}"
    testImplementation("org.powermock:powermock-core:${depVersionPowermock}"){
        exclude group: 'org.hamcrest'
    }
    testImplementation "org.powermock:powermock-module-junit4:${depVersionPowermock}"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
    reports {
        xml.enabled = true
        html.enabled = true
    }

    def jacocoExcludedClasses = [
      // Tests classes
      '**/*Test*.*',
      // Android autogenerated classes
      '**/BuildConfig.*', '**/Manifest*.*', '**/R$*.class', '**/R.class', 'android/**/*.*',
      // Toothpick autogenerated classes
      '**/*$$Factory.class', '**/*$$MemberInjector.class', '**/smoothie/*.class',
      // Butterknife autogenerated classes
      '**/*_ViewBinding*.class',
      // Jargon autogenerated classes
      '**/BR.class', '**/databinding/*.class', '**/DataBinder*.class',
      // Processing sketches, OpenGL activities
      '**/sketches/*.class', '**/DiceActivity*.class'
    ]
    def debugClassesPath = "$project.buildDir/intermediates/javac/debug/compileDebugJavaWithJavac/classes/ch/epfl/sweng/erpa"
    def debugTree = fileTree(dir: debugClassesPath, excludes: jacocoExcludedClasses)
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
    ])
}