1616package com .diffplug .spotless .generic ;
1717
1818import java .io .File ;
19- import java .io .Serializable ;
2019import java .util .Arrays ;
21- import java .util .Objects ;
22-
23- import javax .annotation .Nullable ;
2420
2521import org .junit .jupiter .api .Test ;
2622
2723import com .diffplug .common .base .StringPrinter ;
28- import com .diffplug .spotless .FormatterFunc ;
2924import com .diffplug .spotless .FormatterStep ;
3025import com .diffplug .spotless .ResourceHarness ;
3126import com .diffplug .spotless .StepHarness ;
@@ -34,8 +29,8 @@ class FenceStepTest extends ResourceHarness {
3429 @ Test
3530 void single () {
3631 FormatterStep fence = FenceStep .named ("fence" ).openClose ("spotless:off" , "spotless:on" )
37- .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ( "lowercase" , String :: toLowerCase )));
38- StepHarness harness = StepHarness .forStepNoRoundtrip (fence );
32+ .preserveWithin (Arrays .asList (ToCaseStep . lower ( )));
33+ StepHarness harness = StepHarness .forStep (fence );
3934 harness .test (
4035 StringPrinter .buildStringFromLines (
4136 "A B C" ,
@@ -54,8 +49,8 @@ void single() {
5449 @ Test
5550 void multiple () {
5651 FormatterStep fence = FenceStep .named ("fence" ).openClose ("spotless:off" , "spotless:on" )
57- .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ( "lowercase" , String :: toLowerCase )));
58- StepHarness harness = StepHarness .forStepNoRoundtrip (fence );
52+ .preserveWithin (Arrays .asList (ToCaseStep . lower ( )));
53+ StepHarness harness = StepHarness .forStep (fence );
5954 harness .test (
6055 StringPrinter .buildStringFromLines (
6156 "A B C" ,
@@ -88,7 +83,7 @@ void multiple() {
8883 @ Test
8984 void broken () {
9085 FormatterStep fence = FenceStep .named ("fence" ).openClose ("spotless:off" , "spotless:on" )
91- .preserveWithin (Arrays .asList (createNeverUpToDateSerializable ( "uppercase" , String :: toUpperCase )));
86+ .preserveWithin (Arrays .asList (ToCaseStep . upper ( )));
9287 // this fails because uppercase turns spotless:off into SPOTLESS:OFF, etc
9388 StepHarness .forStepNoRoundtrip (fence ).testExceptionMsg (StringPrinter .buildStringFromLines ("A B C" ,
9489 "spotless:off" ,
@@ -100,8 +95,8 @@ void broken() {
10095 @ Test
10196 void andApply () {
10297 FormatterStep fence = FenceStep .named ("fence" ).openClose ("<lower>" , "</lower>" )
103- .applyWithin (Arrays .asList (createNeverUpToDateSerializable ( "lowercase" , String :: toLowerCase )));
104- StepHarness .forStepNoRoundtrip (fence ).test (
98+ .applyWithin (Arrays .asList (ToCaseStep . lower ( )));
99+ StepHarness .forStep (fence ).test (
105100 StringPrinter .buildStringFromLines (
106101 "A B C" ,
107102 "<lower>" ,
@@ -116,46 +111,45 @@ void andApply() {
116111 "G H I" ));
117112 }
118113
119- /**
120- * @param name
121- * The name of the formatter step
122- * @param function
123- * The function used by the formatter step
124- * @return A FormatterStep which will never report that it is up-to-date, because
125- * it is not equal to the serialized representation of itself.
126- */
127- static <T extends FormatterFunc & Serializable > FormatterStep createNeverUpToDateSerializable (
128- String name ,
129- T function ) {
130- Objects .requireNonNull (function , "function" );
131- return new NeverUpToDateSerializable (name , function );
132- }
114+ static class ToCaseStep implements FormatterStep {
115+ static ToCaseStep upper () {
116+ return new ToCaseStep (true );
117+ }
133118
134- static class NeverUpToDateSerializable <T extends FormatterFunc & Serializable > implements FormatterStep , Serializable {
135- private final String name ;
136- private final T formatterFunc ;
119+ static ToCaseStep lower () {
120+ return new ToCaseStep (false );
121+ }
122+
123+ private final boolean uppercase ;
137124
138- private NeverUpToDateSerializable (String name , T formatterFunc ) {
139- this .name = name ;
140- this .formatterFunc = formatterFunc ;
125+ ToCaseStep (boolean uppercase ) {
126+ this .uppercase = uppercase ;
141127 }
142128
143129 @ Override
144130 public String getName () {
145- return name ;
131+ return uppercase ? "uppercase" : "lowercase" ;
146132 }
147133
148- @ Nullable
134+ @ org . jetbrains . annotations . Nullable
149135 @ Override
150136 public String format (String rawUnix , File file ) throws Exception {
151- return formatterFunc . apply ( rawUnix , file );
137+ return uppercase ? rawUnix . toUpperCase () : rawUnix . toLowerCase ( );
152138 }
153139
154140 @ Override
155141 public void close () throws Exception {
156- if (formatterFunc instanceof FormatterFunc .Closeable ) {
157- ((FormatterFunc .Closeable ) formatterFunc ).close ();
158- }
142+
143+ }
144+
145+ @ Override
146+ public int hashCode () {
147+ return getName ().hashCode ();
148+ }
149+
150+ @ Override
151+ public boolean equals (Object obj ) {
152+ return obj instanceof ToCaseStep && getName ().equals (((ToCaseStep ) obj ).getName ());
159153 }
160154 }
161155}
0 commit comments