blob: b702b3b8c9267f790ba3f7c0c1f183abb8891995 (
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
122
123
124
125
|
package org.robolectric.annotation.processing.validator;
import static com.google.common.truth.Fact.simpleFact;
import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaSourcesSubjectFactory.javaSources;
import static org.robolectric.annotation.processing.Utils.DEFAULT_OPTS;
import com.google.common.collect.ImmutableList;
import com.google.common.truth.FailureMetadata;
import com.google.common.truth.Subject;
import com.google.testing.compile.CompileTester;
import com.google.testing.compile.CompileTester.LineClause;
import com.google.testing.compile.CompileTester.SuccessfulCompilationClause;
import com.google.testing.compile.CompileTester.UnsuccessfulCompilationClause;
import com.google.testing.compile.JavaFileObjects;
import javax.tools.JavaFileObject;
import org.robolectric.annotation.processing.RobolectricProcessor;
import org.robolectric.annotation.processing.Utils;
public final class SingleClassSubject extends Subject<SingleClassSubject, String> {
public static Subject.Factory<SingleClassSubject, String> singleClass() {
return SingleClassSubject::new;
}
JavaFileObject source;
CompileTester tester;
public SingleClassSubject(FailureMetadata failureMetadata, String subject) {
super(failureMetadata, subject);
source = JavaFileObjects.forResource(Utils.toResourcePath(subject));
tester =
assertAbout(javaSources())
.that(ImmutableList.of(source, Utils.SHADOW_EXTRACTOR_SOURCE))
.processedWith(new RobolectricProcessor(DEFAULT_OPTS));
}
public SuccessfulCompilationClause compilesWithoutError() {
try {
return tester.compilesWithoutError();
} catch (AssertionError e) {
failWithoutActual(simpleFact(e.getMessage()));
}
return null;
}
public SingleFileClause failsToCompile() {
try {
return new SingleFileClause(tester.failsToCompile(), source);
} catch (AssertionError e) {
failWithoutActual(simpleFact(e.getMessage()));
}
return null;
}
final class SingleFileClause implements CompileTester.ChainingClause<SingleFileClause> {
UnsuccessfulCompilationClause unsuccessful;
JavaFileObject source;
public SingleFileClause(UnsuccessfulCompilationClause unsuccessful, JavaFileObject source) {
this.unsuccessful = unsuccessful;
this.source = source;
}
public SingleLineClause withErrorContaining(final String messageFragment) {
try {
return new SingleLineClause(unsuccessful.withErrorContaining(messageFragment).in(source));
} catch (AssertionError e) {
failWithoutActual(simpleFact(e.getMessage()));
}
return null;
}
public SingleFileClause withNoErrorContaining(final String messageFragment) {
try {
unsuccessful.withErrorContaining(messageFragment);
} catch (AssertionError e) {
return this;
}
failWithoutActual(
simpleFact(
"Shouldn't have found any errors containing " + messageFragment + ", but we did"));
return this;
}
@Override
public SingleFileClause and() {
return this;
}
final class SingleLineClause implements CompileTester.ChainingClause<SingleFileClause> {
LineClause lineClause;
public SingleLineClause(LineClause lineClause) {
this.lineClause = lineClause;
}
public CompileTester.ChainingClause<SingleFileClause> onLine(long lineNumber) {
try {
lineClause.onLine(lineNumber);
return new CompileTester.ChainingClause<SingleFileClause>() {
@Override
public SingleFileClause and() {
return SingleFileClause.this;
}
};
} catch (AssertionError e) {
failWithoutActual(simpleFact(e.getMessage()));
}
return null;
}
@Override
public SingleFileClause and() {
return SingleFileClause.this;
}
}
}
}
|