aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain-Test/build.gradle
blob: 2bf35b3d15610ef39c3360320a34af86f8445047 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information
        classpath 'com.novoda:gradle-android-test-plugin:0.10.4'
    }
}

apply plugin: 'java'
apply plugin: 'android-test'
apply plugin: 'jacoco'

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'com.google.android:android:4.1.1.4'
    testCompile('com.squareup:fest-android:1.0.8') { exclude module: 'support-v4' }
    testCompile 'org.apache.maven:maven-ant-tasks:2.1.3'
    testCompile ('org.robolectric:robolectric:2.4') {
        exclude module: 'classworlds'
        exclude module: 'maven-artifact'
        exclude module: 'maven-artifact-manager'
        exclude module: 'maven-error-diagnostics'
        exclude module: 'maven-model'
        exclude module: 'maven-plugin-registry'
        exclude module: 'maven-profile'
        exclude module: 'maven-project'
        exclude module: 'maven-settings'
        exclude module: 'nekohtml'
        exclude module: 'plexus-container-default'
        exclude module: 'plexus-interpolation'
        exclude module: 'plexus-utils'
        exclude module: 'support-v4' // crazy but my android studio don't like this dependency and to fix it remove .idea and re import project
        exclude module: 'wagon-file'
        exclude module: 'wagon-http-lightweight'
        exclude module: 'wagon-http-shared'
        exclude module: 'wagon-provider-api'
    }
}

test {
    exclude '**/*$*'
}

android {
    projectUnderTest ':OpenKeychain'
}

jacoco {
    toolVersion = "0.7.2.201409121644"
}


def coverageSourceDirs = [
        '../OpenKeychain/src/main/java',
        '../OpenKeychain/src/gen',
        '../OpenKeychain/build/source/apt/debug',
        '../OpenKeychain/build/source/generated/buildConfig/debug',
        '../OpenKeychain/build/source/generated/r/debug'
    ]

jacocoTestReport {
    reports {
        xml.enabled = true
        html.destination "${buildDir}/jacocoHtml"
    }
    // class R is used, but usage will not be covered, so ignore this class from report
    classDirectories = fileTree(dir: '../OpenKeychain/build/intermediates/classes/debug/org/sufficientlysecure/keychain', exclude: [ 'R*.class' ])
    additionalSourceDirs = files(coverageSourceDirs)
    executionData = files('build/jacoco/testDebug.exec')
}

// new workaround to force add custom output dirs for android studio
task addTest {
    def file = file(project.name + ".iml")
    doLast {
        try {
            def parsedXml = (new XmlParser()).parse(file)
            def node = parsedXml.component[1]
            def outputNode = parsedXml.component[1].output[0]
            def outputTestNode = parsedXml.component[1].'output-test'[0]
            def rewrite = false

            new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}", 'isTestSource': "true"])

            if(outputNode == null) {
                new Node(node, 'output', ['url': 'file://$MODULE_DIR$/build/resources/testDebug'])
            } else {
                if(outputNode.attributes['url'] != 'file://$MODULE_DIR$/build/resources/testDebug') {
                    outputNode.attributes = ['url': 'file://$MODULE_DIR$/build/resources/testDebug']
                    rewrite = true
                }
            }

            if(outputTestNode == null) {
                new Node(node, 'output-test', ['url': 'file://$MODULE_DIR$/build/test-classes/debug'])
            } else {
                if(outputTestNode.attributes['url'] != 'file://$MODULE_DIR$/build/test-classes/debug') {
                    outputTestNode.attributes = ['url': 'file://$MODULE_DIR$/build/test-classes/debug']
                    rewrite = true
                }
            }

            if(rewrite) {
                def writer = new StringWriter()
                new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
                file.text = writer.toString()
            }
        } catch (FileNotFoundException e) {
            // iml not found, common on command line only builds
        }

    }
}

// always do the addtest on prebuild
gradle.projectsEvaluated {
    testDebugClasses.dependsOn(addTest)
}