Skip to content

Commit 08a7f50

Browse files
committed
remove use of Task.execute() from OverallCheckTaskTest
1 parent b4f96d0 commit 08a7f50

File tree

2 files changed

+68
-98
lines changed

2 files changed

+68
-98
lines changed

src/main/groovy/org/scoverage/OverallCheckTask.groovy

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import org.gradle.api.DefaultTask
44
import org.gradle.api.GradleException
55
import org.gradle.api.tasks.CacheableTask
66
import org.gradle.api.tasks.TaskAction
7+
import org.gradle.internal.impldep.com.google.common.annotations.VisibleForTesting
78

89
import java.text.DecimalFormat
910
import java.text.NumberFormat
@@ -51,47 +52,50 @@ class OverallCheckTask extends DefaultTask {
5152
/** Overwrite to test for a specific locale. */
5253
Locale locale
5354

54-
protected XmlParser parser
55+
@TaskAction
56+
void requireLineCoverage() {
57+
def extension = ScoveragePlugin.extensionIn(project)
5558

56-
protected DecimalFormat df = new DecimalFormat("#.##")
59+
NumberFormat nf = NumberFormat.getInstance(locale == null ? Locale.getDefault() : locale)
5760

58-
OverallCheckTask() {
59-
parser = new XmlParser()
60-
parser.setFeature('http://apache.org/xml/features/disallow-doctype-decl', false)
61-
parser.setFeature('http://apache.org/xml/features/nonvalidating/load-external-dtd', false)
61+
Exception failure = checkLineCoverage(nf, reportDir == null ? extension.reportDir : reportDir, coverageType, minimumRate)
62+
63+
if (failure) throw failure
6264
}
6365

64-
/** Extracted to method for testing purposes */
65-
static String errorMsg(String actual, String expected, CoverageType type) {
66+
@VisibleForTesting
67+
protected static String errorMsg(String actual, String expected, CoverageType type) {
6668
return "Only $actual% of project is covered by tests instead of $expected% (coverageType: $type)"
6769
}
6870

69-
/** Extracted to method for testing purposes */
70-
static String fileNotFoundErrorMsg(CoverageType coverageType) {
71+
@VisibleForTesting
72+
protected static String fileNotFoundErrorMsg(CoverageType coverageType) {
7173
return "Coverage file (type: $coverageType) not found, check your configuration."
7274
}
7375

74-
@TaskAction
75-
void requireLineCoverage() {
76-
def extension = ScoveragePlugin.extensionIn(project)
76+
@VisibleForTesting
77+
protected static Exception checkLineCoverage(NumberFormat nf, File reportDir, CoverageType coverageType, double minimumRate) {
78+
XmlParser parser = new XmlParser()
79+
parser.setFeature('http://apache.org/xml/features/disallow-doctype-decl', false)
80+
parser.setFeature('http://apache.org/xml/features/nonvalidating/load-external-dtd', false)
7781

78-
File reportFile = new File(reportDir ? reportDir : extension.reportDir, coverageType.fileName)
82+
DecimalFormat df = new DecimalFormat("#.##")
7983

8084
try {
85+
File reportFile = new File(reportDir, coverageType.fileName)
8186
Node xml = parser.parse(reportFile)
82-
NumberFormat nf = NumberFormat.getInstance(locale == null ? Locale.getDefault() : locale)
8387
Double coverageValue = nf.parse(xml.attribute(coverageType.paramName) as String).doubleValue()
8488
Double overallRate = coverageType.normalize(coverageValue)
8589
def difference = (minimumRate - overallRate)
8690

8791
if (difference > 1e-7) {
8892
String is = df.format(overallRate * 100)
8993
String needed = df.format(minimumRate * 100)
90-
throw new GradleException(errorMsg(is, needed, coverageType))
94+
return new GradleException(errorMsg(is, needed, coverageType))
9195
}
9296
} catch (FileNotFoundException fnfe) {
93-
throw new GradleException(fileNotFoundErrorMsg(coverageType), fnfe)
97+
return new GradleException(fileNotFoundErrorMsg(coverageType), fnfe)
9498
}
95-
99+
return null
96100
}
97101
}
Lines changed: 46 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,121 @@
11
package org.scoverage
22

33
import org.gradle.api.GradleException
4-
import org.gradle.api.Project
5-
import org.gradle.testfixtures.ProjectBuilder
64
import org.hamcrest.Description
5+
import org.hamcrest.Matcher
76
import org.hamcrest.TypeSafeMatcher
8-
import org.junit.After
9-
import org.junit.AfterClass
10-
import org.junit.Before
11-
import org.junit.BeforeClass
12-
import org.junit.Rule
137
import org.junit.Test
14-
import org.junit.rules.ExpectedException
158

16-
import javax.swing.text.NumberFormatter
179
import java.text.NumberFormat
1810

11+
import static org.junit.Assert.assertNull
12+
import static org.junit.Assert.assertThat
13+
import static org.scoverage.OverallCheckTask.checkLineCoverage
14+
1915
/**
2016
* Copied from the Internet, just to check if we have correct exception thrown.
2117
*/
2218
class CauseMatcher extends TypeSafeMatcher<Throwable> {
2319

24-
private final Class<? extends Throwable> type;
25-
private final String expectedMessage;
20+
private final Class<? extends Throwable> type
21+
private final String expectedMessage
2622

27-
public CauseMatcher(Class<? extends Throwable> type, String expectedMessage) {
28-
this.type = type;
29-
this.expectedMessage = expectedMessage;
23+
CauseMatcher(Class<? extends Throwable> type, String expectedMessage) {
24+
this.type = type
25+
this.expectedMessage = expectedMessage
3026
}
3127

3228
@Override
3329
protected boolean matchesSafely(Throwable item) {
34-
return item.getClass().isAssignableFrom(type) && item.getMessage().contains(expectedMessage);
30+
return item.getClass().isAssignableFrom(type) && item.getMessage().contains(expectedMessage)
3531
}
3632

3733
@Override
38-
public void describeTo(Description description) {
34+
void describeTo(Description description) {
3935
description.appendText("expects type ")
4036
.appendValue(type)
4137
.appendText(" and a message ")
42-
.appendValue(expectedMessage);
38+
.appendValue(expectedMessage)
4339
}
4440
}
4541

4642
class OverallCheckTaskTest {
4743

48-
@Rule
49-
public ExpectedException expectedException = ExpectedException.none()
50-
51-
private Project projectForRate(Number coverageRate, CoverageType type) {
52-
Project project = ProjectBuilder.builder().build()
53-
project.plugins.apply(ScoveragePlugin)
54-
project.tasks.create('bob', OverallCheckTask) {
55-
locale = Locale.US
56-
minimumRate = coverageRate
57-
reportDir = new File('src/test/resources')
58-
coverageType = type
59-
}
60-
project
44+
private NumberFormat numberFormat = NumberFormat.getInstance(Locale.US)
45+
46+
private static File reportDir = new File('src/test/resources')
47+
48+
private static Matcher<Throwable> failsWith(String message) {
49+
return new CauseMatcher(
50+
GradleException.class,
51+
message
52+
)
6153
}
6254

6355
// error when report file is not there
6456

6557
@Test
6658
void failsWhenReportFileIsNotFound() {
67-
Project project = ProjectBuilder.builder().build()
68-
project.plugins.apply(ScoveragePlugin)
69-
project.tasks.create('bob', OverallCheckTask) {
70-
locale = Locale.US
71-
minimumRate = 1.0
72-
reportDir = new File('src/test/nothingthere')
73-
coverageType = CoverageType.Line
74-
}
75-
expectedException.expectCause(new CauseMatcher(
76-
GradleException.class,
77-
OverallCheckTask.fileNotFoundErrorMsg(CoverageType.Line)
78-
))
79-
project.tasks.bob.execute()
59+
assertThat(
60+
checkLineCoverage(numberFormat, new File('src/test/nothingthere'), CoverageType.Line, 0.0),
61+
failsWith(OverallCheckTask.fileNotFoundErrorMsg(CoverageType.Line)))
8062
}
8163

8264
// line coverage
8365

8466
@Test
8567
void failsWhenLineRateIsBelowTarget() {
86-
Project project = projectForRate(1, CoverageType.Line)
87-
expectedException.expectCause(new CauseMatcher(
88-
GradleException.class,
89-
OverallCheckTask.errorMsg("66", "100", CoverageType.Line)
90-
))
91-
project.tasks.bob.execute()
68+
assertThat(
69+
checkLineCoverage(numberFormat, reportDir, CoverageType.Line, 1.0),
70+
failsWith(OverallCheckTask.errorMsg("66", "100", CoverageType.Line)))
9271
}
9372

9473
@Test
95-
void doesNotFailWhenLineRateIsAtTarget() throws Exception {
96-
Project project = projectForRate(0.66, CoverageType.Line)
97-
project.tasks.bob.execute()
74+
void doesNotFailWhenLineRateIsAtTarget() {
75+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Line, 0.66))
9876
}
9977

10078
@Test
101-
void doesNotFailWhenLineRateIsAboveTarget() throws Exception {
102-
Project project = projectForRate(0.6, CoverageType.Line)
103-
project.tasks.bob.execute()
79+
void doesNotFailWhenLineRateIsAboveTarget() {
80+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Line, 0.6))
10481
}
10582

10683
// Statement coverage
10784

10885
@Test
10986
void failsWhenStatementRateIsBelowTarget() {
110-
Project project = projectForRate(1, CoverageType.Statement)
111-
NumberFormat nf = NumberFormat.getInstance()
112-
expectedException.expectCause(new CauseMatcher(
113-
GradleException.class,
114-
OverallCheckTask.errorMsg(nf.format(new Double(33.33)), "100", CoverageType.Statement)
115-
))
116-
project.tasks.bob.execute()
87+
assertThat(
88+
checkLineCoverage(numberFormat, reportDir, CoverageType.Statement, 1.0),
89+
failsWith(OverallCheckTask.errorMsg(numberFormat.format(new Double(33.33)), "100", CoverageType.Statement)))
11790
}
11891

11992
@Test
120-
void doesNotFailWhenStatementRateIsAtTarget() throws Exception {
121-
Project project = projectForRate(0.33, CoverageType.Statement)
122-
project.tasks.bob.execute()
93+
void doesNotFailWhenStatementRateIsAtTarget() {
94+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Statement, 0.33))
12395
}
12496

12597
@Test
126-
void doesNotFailWhenStatementRateIsAboveTarget() throws Exception {
127-
Project project = projectForRate(0.3, CoverageType.Statement)
128-
project.tasks.bob.execute()
98+
void doesNotFailWhenStatementRateIsAboveTarget() {
99+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Statement, 0.3))
129100
}
130101

131102
// Branch coverage
132103

133104
@Test
134105
void failsWhenBranchRateIsBelowTarget() {
135-
Project project = projectForRate(1, CoverageType.Branch)
136-
expectedException.expectCause(new CauseMatcher(
137-
GradleException.class,
138-
OverallCheckTask.errorMsg("50", "100", CoverageType.Branch)
139-
))
140-
project.tasks.bob.execute()
106+
assertThat(
107+
checkLineCoverage(numberFormat, reportDir, CoverageType.Branch, 1.0),
108+
failsWith(OverallCheckTask.errorMsg("50", "100", CoverageType.Branch)))
141109
}
142110

143111
@Test
144-
void doesNotFailWhenBranchRateIsAtTarget() throws Exception {
145-
Project project = projectForRate(0.50, CoverageType.Branch)
146-
project.tasks.bob.execute()
112+
void doesNotFailWhenBranchRateIsAtTarget() {
113+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Branch, 0.5))
147114
}
148115

149116
@Test
150-
void doesNotFailWhenBranchRateIsAboveTarget() throws Exception {
151-
Project project = projectForRate(0.45, CoverageType.Branch)
152-
project.tasks.bob.execute()
117+
void doesNotFailWhenBranchRateIsAboveTarget() {
118+
assertNull(checkLineCoverage(numberFormat, reportDir, CoverageType.Branch, 0.45))
153119
}
154120

155121
}

0 commit comments

Comments
 (0)