15
15
*/
16
16
package com .diffplug .spotless .generic ;
17
17
18
+ import java .io .File ;
19
+ import java .io .Serializable ;
18
20
import java .util .Arrays ;
19
- import java .util .Locale ;
21
+ import java .util .Objects ;
22
+
23
+ import javax .annotation .Nullable ;
20
24
21
25
import org .junit .jupiter .api .Test ;
22
26
23
27
import com .diffplug .common .base .StringPrinter ;
28
+ import com .diffplug .spotless .FormatterFunc ;
24
29
import com .diffplug .spotless .FormatterStep ;
25
30
import com .diffplug .spotless .ResourceHarness ;
26
31
import com .diffplug .spotless .StepHarness ;
29
34
class FenceStepTest extends ResourceHarness {
30
35
@ Test
31
36
void single () {
32
- FormatterStep fence = FenceStep .named ("underTest " ).openClose ("spotless:off" , "spotless:on" )
33
- .preserveWithin (Arrays .asList (FormatterStep . createNeverUpToDate ("lowercase" , str -> str . toLowerCase ( Locale . ROOT ) )));
37
+ FormatterStep fence = FenceStep .named ("fence " ).openClose ("spotless:off" , "spotless:on" )
38
+ .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ("lowercase" , String :: toLowerCase )));
34
39
StepHarness harness = StepHarness .forSteps (fence );
35
40
harness .test (
36
41
StringPrinter .buildStringFromLines (
@@ -49,8 +54,8 @@ void single() {
49
54
50
55
@ Test
51
56
void multiple () {
52
- FormatterStep fence = FenceStep .named ("underTest " ).openClose ("spotless:off" , "spotless:on" )
53
- .preserveWithin (Arrays .asList (FormatterStep . createNeverUpToDate ("lowercase" , str -> str . toLowerCase ( Locale . ROOT ) )));
57
+ FormatterStep fence = FenceStep .named ("fence " ).openClose ("spotless:off" , "spotless:on" )
58
+ .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ("lowercase" , String :: toLowerCase )));
54
59
StepHarness harness = StepHarness .forSteps (fence );
55
60
harness .test (
56
61
StringPrinter .buildStringFromLines (
@@ -83,8 +88,8 @@ void multiple() {
83
88
84
89
@ Test
85
90
void broken () {
86
- FormatterStep fence = FenceStep .named ("underTest " ).openClose ("spotless:off" , "spotless:on" )
87
- .preserveWithin (Arrays .asList (FormatterStep . createNeverUpToDate ("uppercase" , str -> str . toUpperCase ( Locale . ROOT ) )));
91
+ FormatterStep fence = FenceStep .named ("fence " ).openClose ("spotless:off" , "spotless:on" )
92
+ .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ("uppercase" , String :: toUpperCase )));
88
93
StepHarnessWithFile harness = StepHarnessWithFile .forStep (this , fence );
89
94
// this fails because uppercase turns spotless:off into SPOTLESS:OFF, etc
90
95
harness .testExceptionMsg (newFile ("test" ), StringPrinter .buildStringFromLines ("A B C" ,
@@ -96,9 +101,8 @@ void broken() {
96
101
97
102
@ Test
98
103
void andApply () {
99
- FormatterStep fence = FenceStep .named ("lowercaseSometimes" ).openClose ("<lower>" , "</lower>" )
100
- .applyWithin (Arrays .asList (
101
- FormatterStep .createNeverUpToDate ("lowercase" , str -> str .toLowerCase (Locale .ROOT ))));
104
+ FormatterStep fence = FenceStep .named ("fence" ).openClose ("<lower>" , "</lower>" )
105
+ .applyWithin (Arrays .asList (createNeverUpToDateSerializable ("lowercase" , String ::toLowerCase )));
102
106
StepHarness .forSteps (fence ).test (
103
107
StringPrinter .buildStringFromLines (
104
108
"A B C" ,
@@ -113,4 +117,40 @@ void andApply() {
113
117
"</lower>" ,
114
118
"G H I" ));
115
119
}
120
+
121
+ /**
122
+ * @param name
123
+ * The name of the formatter step
124
+ * @param function
125
+ * The function used by the formatter step
126
+ * @return A FormatterStep which will never report that it is up-to-date, because
127
+ * it is not equal to the serialized representation of itself.
128
+ */
129
+ static <T extends FormatterFunc & Serializable > FormatterStep createNeverUpToDateSerializable (
130
+ String name ,
131
+ T function ) {
132
+ Objects .requireNonNull (function , "function" );
133
+ return new NeverUpToDateSerializable (name , function );
134
+ }
135
+
136
+ static class NeverUpToDateSerializable <T extends FormatterFunc & Serializable > implements FormatterStep , Serializable {
137
+ private final String name ;
138
+ private final T formatterFunc ;
139
+
140
+ private NeverUpToDateSerializable (String name , T formatterFunc ) {
141
+ this .name = name ;
142
+ this .formatterFunc = formatterFunc ;
143
+ }
144
+
145
+ @ Override
146
+ public String getName () {
147
+ return name ;
148
+ }
149
+
150
+ @ Nullable
151
+ @ Override
152
+ public String format (String rawUnix , File file ) throws Exception {
153
+ return formatterFunc .apply (rawUnix , file );
154
+ }
155
+ }
116
156
}
0 commit comments