Skip to content

Commit 2017779

Browse files
authored
Clean up tests (#36)
1 parent 9542ae2 commit 2017779

File tree

2 files changed

+43
-139
lines changed

2 files changed

+43
-139
lines changed

src/test/groovy/com/vanniktech/android/junit/jacoco/GenerationTest.groovy

Lines changed: 20 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -9,219 +9,154 @@ import org.junit.Test
99
import static com.vanniktech.android.junit.jacoco.ProjectHelper.ProjectType.*
1010

1111
public class GenerationTest {
12-
1312
@Test
1413
public void addJacocoAndroidAppWithFlavors() {
15-
16-
// Given
1714
def androidAppProject = ProjectHelper.prepare(ANDROID_APPLICATION).withRedBlueFlavors().get()
1815

19-
// When
2016
Generation.addJacoco(androidAppProject, new JunitJacocoExtension())
2117

22-
// Then
2318
assertJacocoAndroidWithFlavors(androidAppProject)
2419
}
2520

2621
@Test
2722
public void addJacocoAndroidLibraryWithFlavors() {
28-
29-
// Given
3023
def androidLibraryProject = ProjectHelper.prepare(ANDROID_LIBRARY).withRedBlueFlavors().get()
3124

32-
// When
3325
Generation.addJacoco(androidLibraryProject, new JunitJacocoExtension())
3426

35-
// Then
3627
assertJacocoAndroidWithFlavors(androidLibraryProject)
3728
}
3829

3930
@Test
4031
public void addJacocoAndroidApp() {
41-
42-
// Given
4332
def androidAppProject = ProjectHelper.prepare(ANDROID_APPLICATION).get()
4433

45-
// When
4634
Generation.addJacoco(androidAppProject, new JunitJacocoExtension())
4735

48-
// Then
4936
assertJacocoAndroidWithoutFlavors(androidAppProject)
5037
}
5138

5239
@Test
5340
public void addJacocoAndroidLibrary() {
54-
55-
// Given
5641
def androidLibraryProject = ProjectHelper.prepare(ANDROID_LIBRARY).get()
5742

58-
// When
5943
Generation.addJacoco(androidLibraryProject, new JunitJacocoExtension())
6044

61-
// Then
6245
assertJacocoAndroidWithoutFlavors(androidLibraryProject)
6346
}
6447

6548
@Test
6649
public void addJacocoJava() {
67-
68-
// Given
6950
def javaProject = ProjectHelper.prepare(JAVA).get()
7051

71-
// When
7252
Generation.addJacoco(javaProject, new JunitJacocoExtension())
7353

74-
// Then
7554
assertJacocoJava(javaProject)
7655
}
7756

7857
@Test
7958
public void jacocoVersion() {
80-
81-
// Given
8259
final def extension = new JunitJacocoExtension()
8360
extension.jacocoVersion = '0.7.6.201602180812'
8461
def androidAppProject = ProjectHelper.prepare(ANDROID_APPLICATION).get()
8562
def androidLibraryProject = ProjectHelper.prepare(ANDROID_LIBRARY).get()
8663
def javaProject = ProjectHelper.prepare(JAVA).get()
8764

88-
// When
8965
Generation.addJacoco(androidAppProject, extension)
9066
Generation.addJacoco(androidLibraryProject, extension)
9167
Generation.addJacoco(javaProject, extension)
9268

93-
// Then
9469
assert androidAppProject.jacoco.toolVersion == '0.7.6.201602180812'
9570
assert androidLibraryProject.jacoco.toolVersion == '0.7.6.201602180812'
9671
assert javaProject.jacoco.toolVersion == '0.7.6.201602180812'
9772
}
9873

9974
@Test
10075
public void ignoreProjects() {
101-
// Given
10276
final def extension = new JunitJacocoExtension()
10377
final def projects = [
10478
ProjectHelper.prepare(ANDROID_APPLICATION).get(),
10579
ProjectHelper.prepare(ANDROID_LIBRARY).get(),
10680
ProjectHelper.prepare(JAVA).get()] as Project[]
10781

10882
for (final def project : projects) {
109-
// When
11083
extension.ignoreProjects = [project.name]
11184

112-
// Then
11385
assert !Generation.addJacoco(project, extension)
11486
assert !project.plugins.hasPlugin(JacocoPlugin)
11587
}
11688
}
11789

11890
@Test
11991
public void androidAppBuildExecutesJacocoTask() {
120-
121-
// Given
12292
def androidAppProject = ProjectHelper.prepare(ANDROID_APPLICATION).get()
12393

124-
// When
12594
Generation.addJacoco(androidAppProject, new JunitJacocoExtension())
12695

127-
// Then
12896
assert taskDependsOn(androidAppProject.check, 'jacocoTestReportDebug')
12997
assert taskDependsOn(androidAppProject.check, 'jacocoTestReportRelease')
13098
}
13199

132100
@Test
133101
public void androidLibraryBuildExecutesJacocoTask() {
134-
135-
// Given
136102
def androidLibraryProject = ProjectHelper.prepare(ANDROID_LIBRARY).get()
137103

138-
// When
139104
Generation.addJacoco(androidLibraryProject, new JunitJacocoExtension())
140105

141-
// Then
142106
assert taskDependsOn(androidLibraryProject.check, 'jacocoTestReportDebug')
143107
assert taskDependsOn(androidLibraryProject.check, 'jacocoTestReportRelease')
144108
}
145109

146110
@Test
147111
public void javaBuildExecutesJacocoTask() {
148-
149-
// Given
150112
def javaProject = ProjectHelper.prepare(JAVA).get()
151113

152-
// When
153114
Generation.addJacoco(javaProject, new JunitJacocoExtension())
154115

155-
// Then
156116
assert taskDependsOn(javaProject.check, 'jacocoTestReport')
157117
}
158118

159-
// TODO some cleanup needed code is almost the same for with and without flavors variants
160119
private void assertJacocoAndroidWithFlavors(final Project project) {
161120
assert project.plugins.hasPlugin(JacocoPlugin)
162121

163122
assert project.jacoco.toolVersion == '0.7.2.201409121644'
164123

165-
final def redDebugTask = project.tasks.findByName('jacocoTestReportRedDebug')
166-
167-
assert redDebugTask instanceof JacocoReport
168-
169-
redDebugTask.with {
170-
assert description == 'Generate Jacoco coverage reports after running redDebug tests.'
171-
assert group == 'Reporting'
172-
173-
assert executionData.singleFile == project.file("${project.buildDir}/jacoco/testRedDebugUnitTest.exec")
174-
175-
assert additionalSourceDirs.size() == 3
176-
assert additionalSourceDirs.contains(project.file('src/main/java'))
177-
assert additionalSourceDirs.contains(project.file('src/debug/java'))
178-
assert additionalSourceDirs.contains(project.file('src/red/java'))
179-
180-
assert sourceDirectories.size() == 3
181-
assert sourceDirectories.contains(project.file('src/main/java'))
182-
assert sourceDirectories.contains(project.file('src/debug/java'))
183-
assert sourceDirectories.contains(project.file('src/red/java'))
184-
185-
assert reports.xml.enabled
186-
assert reports.xml.destination.toString() == project.buildDir.absolutePath + '/reports/jacoco/redDebug/jacoco.xml'
187-
assert reports.html.enabled
188-
assert reports.html.destination.toString() == project.buildDir.absolutePath + '/reports/jacoco/redDebug'
189-
190-
assert classDirectories.dir == project.file('build/intermediates/classes/red/debug')
191-
192-
assert taskDependsOn(redDebugTask, 'testRedDebugUnitTest')
193-
assert taskDependsOn(project.tasks.findByName('check'), 'jacocoTestReportRedDebug')
194-
}
124+
assertTask(project, 'red', 'debug')
125+
assertTask(project, 'red', 'release')
126+
assertTask(project, 'blue', 'debug')
127+
assertTask(project, 'blue', 'release')
128+
}
195129

196-
final def blueReleaseTask = project.tasks.findByName('jacocoTestReportBlueRelease')
130+
private void assertTask(final Project project, final String flavor, final String buildType) {
131+
final def task = project.tasks.findByName("jacocoTestReport${flavor.capitalize()}${buildType.capitalize()}")
197132

198-
assert blueReleaseTask instanceof JacocoReport
133+
assert task instanceof JacocoReport
199134

200-
blueReleaseTask.with {
201-
assert description == 'Generate Jacoco coverage reports after running blueRelease tests.'
135+
task.with {
136+
assert description == "Generate Jacoco coverage reports after running ${flavor}${buildType.capitalize()} tests."
202137
assert group == 'Reporting'
203138

204-
assert executionData.singleFile == project.file("${project.buildDir}/jacoco/testBlueReleaseUnitTest.exec")
139+
assert executionData.singleFile == project.file("${project.buildDir}/jacoco/test${flavor.capitalize()}${buildType.capitalize()}UnitTest.exec")
205140

206141
assert additionalSourceDirs.size() == 3
207142
assert additionalSourceDirs.contains(project.file('src/main/java'))
208-
assert additionalSourceDirs.contains(project.file('src/release/java'))
209-
assert additionalSourceDirs.contains(project.file('src/blue/java'))
143+
assert additionalSourceDirs.contains(project.file("src/${buildType}/java"))
144+
assert additionalSourceDirs.contains(project.file("src/${flavor}/java"))
210145

211146
assert sourceDirectories.size() == 3
212147
assert sourceDirectories.contains(project.file('src/main/java'))
213-
assert sourceDirectories.contains(project.file('src/release/java'))
214-
assert sourceDirectories.contains(project.file('src/blue/java'))
148+
assert sourceDirectories.contains(project.file("src/${buildType}/java"))
149+
assert sourceDirectories.contains(project.file("src/${flavor}/java"))
215150

216151
assert reports.xml.enabled
217-
assert reports.xml.destination.toString() == project.buildDir.absolutePath + '/reports/jacoco/blueRelease/jacoco.xml'
152+
assert reports.xml.destination.toString() == project.buildDir.absolutePath + "/reports/jacoco/${flavor}${buildType.capitalize()}/jacoco.xml"
218153
assert reports.html.enabled
219-
assert reports.html.destination.toString() == project.buildDir.absolutePath + '/reports/jacoco/blueRelease'
154+
assert reports.html.destination.toString() == project.buildDir.absolutePath + "/reports/jacoco/${flavor}${buildType.capitalize()}"
220155

221-
assert classDirectories.dir == project.file('build/intermediates/classes/blue/release')
156+
assert classDirectories.dir == project.file("build/intermediates/classes/${flavor}/${buildType}")
222157

223-
assert taskDependsOn(blueReleaseTask, 'testBlueReleaseUnitTest')
224-
assert taskDependsOn(project.tasks.findByName('check'), 'jacocoTestReportBlueRelease')
158+
assert taskDependsOn(task, "test${flavor.capitalize()}${buildType.capitalize()}UnitTest")
159+
assert taskDependsOn(project.tasks.findByName('check'), "jacocoTestReport${flavor.capitalize()}${buildType.capitalize()}")
225160
}
226161
}
227162

@@ -289,11 +224,6 @@ public class GenerationTest {
289224
}
290225
}
291226

292-
/**
293-
* Assert proper JAva project construction
294-
*
295-
* @param project
296-
*/
297227
private void assertJacocoJava(final Project project) {
298228
assert project.plugins.hasPlugin(JacocoPlugin)
299229

src/test/groovy/com/vanniktech/android/junit/jacoco/ProjectHelper.groovy

Lines changed: 23 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,48 @@
11
package com.vanniktech.android.junit.jacoco
22

3-
import org.gradle.api.Project;
4-
import org.gradle.testfixtures.ProjectBuilder;
3+
import org.gradle.api.Project
4+
import org.gradle.testfixtures.ProjectBuilder
55

6-
/**
7-
* Provides projects for testing
8-
*/
9-
public class ProjectHelper {
6+
/** Provides projects for testing */
7+
final class ProjectHelper {
8+
public static ProjectHelper prepare(ProjectType projectType) {
9+
return new ProjectHelper(projectType)
10+
}
1011

1112
private final ProjectType projectType;
1213
private final Project project;
1314

1415
private ProjectHelper(ProjectType projectType) {
1516
this.projectType = projectType;
1617

17-
switch (projectType){
18+
switch (projectType) {
1819
case ProjectType.JAVA:
19-
def rootProject = ProjectBuilder.builder().withName('root').build()
20-
project = ProjectBuilder.builder().withName('java').withParent(rootProject).build()
21-
project.plugins.apply('java')
20+
project = ProjectBuilder.builder().withName('java').build()
2221
break
23-
2422
case ProjectType.ANDROID_APPLICATION:
2523
project = ProjectBuilder.builder().withName('android app').build()
26-
project.plugins.apply('com.android.application')
2724
break
28-
2925
case ProjectType.ANDROID_LIBRARY:
3026
project = ProjectBuilder.builder().withName('android library').build()
31-
project.plugins.apply('com.android.library')
3227
break
3328
}
29+
30+
project.plugins.apply(projectType.pluginName)
3431
}
3532

36-
/**
37-
* Adds flavors to project, only for Android based projects
38-
*
39-
* @return ProjectHelper instance
40-
*/
41-
public ProjectHelper withRedBlueFlavors(){
33+
/** Adds flavors to project, only for Android based projects */
34+
public ProjectHelper withRedBlueFlavors() {
35+
if (projectType == ProjectType.JAVA) {
36+
throw new UnsupportedOperationException('Not supported with Java project')
37+
}
4238

4339
def customFlavors = [
44-
red: [
45-
applicationId: "com.example.red"
46-
],
47-
blue: [
48-
applicationId: "com.example.blue"
49-
]
40+
red : [applicationId: 'com.example.red'],
41+
blue: [applicationId: 'com.example.blue']
5042
]
5143

5244
project.android.productFlavors {
53-
customFlavors.each {name, config ->
45+
customFlavors.each { name, config ->
5446
"$name" {
5547
applicationId config.applicationId
5648
}
@@ -60,32 +52,14 @@ public class ProjectHelper {
6052
return this
6153
}
6254

63-
/**
64-
* Access configured project
65-
*
66-
* @return
67-
*/
68-
public Project get(){
55+
public Project get() {
6956
return project
7057
}
7158

72-
/**
73-
*
74-
*
75-
* @param projectType
76-
* @return
77-
*/
78-
public static ProjectHelper prepare(ProjectType projectType){
79-
return new ProjectHelper(projectType)
80-
}
81-
82-
/**
83-
* Type of project
84-
*/
8559
public enum ProjectType {
86-
ANDROID_APPLICATION("com.android.application"),
87-
ANDROID_LIBRARY("com.android.library"),
88-
JAVA("java");
60+
ANDROID_APPLICATION('com.android.application'),
61+
ANDROID_LIBRARY('com.android.library'),
62+
JAVA('java');
8963

9064
private final String pluginName;
9165

0 commit comments

Comments
 (0)