// see https://github.com/mik3y/usb-serial-for-android/wiki/Device-Tests-&-Coverage-Report for instructions
apply plugin: 'jacoco'

android {
    flavorDimensions 'device'
    productFlavors {
        anyDevice {
            // Used as fallback in usbSerialExample/build.gradle -> missingDimensionStrategy, but not for coverage report
            dimension 'device'
        }
        arduino {
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'CdcAcm']
        }
        ch340 {
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Ch34x']
        }
        cp2102 { // and cp2105 first port
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Cp21xx']
        }
        cp2105 { // second port
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Cp21xx', 'test_device_port': '1']
        }
        ft232 { // and ft2232 first port
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Ftdi']
        }
        ft2232 { // second port
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Ftdi', 'test_device_port': '1']
        }
        pl2303 {
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Prolific']
        }
        pl2303t {
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Prolific']
        }
        pl2303g {
            dimension 'device'
            testInstrumentationRunnerArguments = ['test_device_driver': 'Prolific']
        }
    }

    buildTypes {
        debug {
            testCoverageEnabled true // disable for testAnyDeviceDebugUnitTest
        }
    }
}

// create report even if tests fail
project.gradle.taskGraph.whenReady {
    -> project.tasks.findAll { it.name =~ /connected.+AndroidTest/ }.each {
        it.ignoreFailures = true
    }
}

task jacocoTestReport(type: JacocoReport ,
        dependsOn: ['compileAnyDeviceDebugSources' /*'testAnyDeviceDebugUnitTest' , 'create<device>DebugCoverageReport'*/]) {
    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
    def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/anyDeviceDebug", excludes: fileFilter)
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories.from files([mainSrc])
    classDirectories.from files([debugTree])
    executionData.from fileTree(dir: project.buildDir, includes: [
            'jacoco/testAnyDeviceDebugUnitTest.exec', 'outputs/code_coverage/*AndroidTest/connected/*.ec'
    ])
}