diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/SpringTestRules.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/SpringTestRules.java new file mode 100644 index 0000000000..3a34bf1fde --- /dev/null +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/SpringTestRules.java @@ -0,0 +1,47 @@ +package tech.picnic.errorprone.refasterrules; + +import com.google.errorprone.refaster.Refaster; +import com.google.errorprone.refaster.annotation.AfterTemplate; +import com.google.errorprone.refaster.annotation.BeforeTemplate; +import org.springframework.test.json.JsonCompareMode; +import org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec; +import tech.picnic.errorprone.refaster.annotation.OnlineDocumentation; + +/** Refaster rules related to Spring Test expressions and statements. */ +@OnlineDocumentation +final class SpringTestRules { + private SpringTestRules() {} + + /** + * Prefer {@link BodyContentSpec#json(String, JsonCompareMode)} over alternatives that implicitly + * perform a {@link JsonCompareMode#LENIENT lenient} comparison or are deprecated. + */ + static final class BodyContentSpecJsonLenient { + @BeforeTemplate + @SuppressWarnings("deprecation" /* This deprecated method invocation will be rewritten. */) + BodyContentSpec before(BodyContentSpec spec, String expectedJson) { + return Refaster.anyOf(spec.json(expectedJson), spec.json(expectedJson, /* strict= */ false)); + } + + @AfterTemplate + BodyContentSpec after(BodyContentSpec spec, String expectedJson) { + return spec.json(expectedJson, JsonCompareMode.LENIENT); + } + } + + /** + * Prefer {@link BodyContentSpec#json(String, JsonCompareMode)} over the deprecated alternative. + */ + static final class BodyContentSpecJsonStrict { + @BeforeTemplate + @SuppressWarnings("deprecation" /* This deprecated method invocation will be rewritten. */) + BodyContentSpec before(BodyContentSpec spec, String expectedJson) { + return spec.json(expectedJson, /* strict= */ true); + } + + @AfterTemplate + BodyContentSpec after(BodyContentSpec spec, String expectedJson) { + return spec.json(expectedJson, JsonCompareMode.STRICT); + } + } +} diff --git a/error-prone-contrib/src/test/java/tech/picnic/errorprone/refasterrules/RefasterRulesTest.java b/error-prone-contrib/src/test/java/tech/picnic/errorprone/refasterrules/RefasterRulesTest.java index 0d7046f918..d7c5af75f8 100644 --- a/error-prone-contrib/src/test/java/tech/picnic/errorprone/refasterrules/RefasterRulesTest.java +++ b/error-prone-contrib/src/test/java/tech/picnic/errorprone/refasterrules/RefasterRulesTest.java @@ -73,6 +73,7 @@ final class RefasterRulesTest { PrimitiveRules.class, ReactorRules.class, RxJava2AdapterRules.class, + SpringTestRules.class, StreamRules.class, StringRules.class, SuggestedFixRules.class, diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestInput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestInput.java new file mode 100644 index 0000000000..6b67e8a365 --- /dev/null +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestInput.java @@ -0,0 +1,18 @@ +package tech.picnic.errorprone.refasterrules; + +import com.google.common.collect.ImmutableSet; +import org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec; +import tech.picnic.errorprone.refaster.test.RefasterRuleCollectionTestCase; + +final class SpringTestRulesTest implements RefasterRuleCollectionTestCase { + @SuppressWarnings("deprecation" /* Rule rewrites deprecated method invocation. */) + ImmutableSet testBodyContentSpecJsonLenient() { + return ImmutableSet.of( + ((BodyContentSpec) null).json("foo"), ((BodyContentSpec) null).json("bar", false)); + } + + @SuppressWarnings("deprecation" /* Rule rewrites deprecated method invocation. */) + BodyContentSpec testBodyContentSpecJsonStrict() { + return ((BodyContentSpec) null).json("foo", true); + } +} diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestOutput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestOutput.java new file mode 100644 index 0000000000..85a1651c53 --- /dev/null +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/SpringTestRulesTestOutput.java @@ -0,0 +1,20 @@ +package tech.picnic.errorprone.refasterrules; + +import com.google.common.collect.ImmutableSet; +import org.springframework.test.json.JsonCompareMode; +import org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec; +import tech.picnic.errorprone.refaster.test.RefasterRuleCollectionTestCase; + +final class SpringTestRulesTest implements RefasterRuleCollectionTestCase { + @SuppressWarnings("deprecation" /* Rule rewrites deprecated method invocation. */) + ImmutableSet testBodyContentSpecJsonLenient() { + return ImmutableSet.of( + ((BodyContentSpec) null).json("foo", JsonCompareMode.LENIENT), + ((BodyContentSpec) null).json("bar", JsonCompareMode.LENIENT)); + } + + @SuppressWarnings("deprecation" /* Rule rewrites deprecated method invocation. */) + BodyContentSpec testBodyContentSpecJsonStrict() { + return ((BodyContentSpec) null).json("foo", JsonCompareMode.STRICT); + } +}