Skip to content

Commit c1711a6

Browse files
authored
#patch: version Serializers, Comparators & Reporters
Include deprecation warning to upgrade to "v1" versions of the api for V5.
1 parent 194f256 commit c1711a6

File tree

18 files changed

+323
-198
lines changed

18 files changed

+323
-198
lines changed

Diff for: README.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ testRuntimeOnly 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3'
4747
- /src/test/resources/snapshot.properties
4848

4949
```text
50-
serializer=au.com.origin.snapshots.serializers.ToStringSnapshotSerializer
51-
serializer.base64=au.com.origin.snapshots.serializers.Base64SnapshotSerializer
52-
serializer.json=au.com.origin.snapshots.jackson.serializers.JacksonSnapshotSerializer
53-
serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.DeterministicJacksonSnapshotSerializer
54-
comparator=au.com.origin.snapshots.comparators.PlainTextEqualsComparator
55-
reporters=au.com.origin.snapshots.reporters.PlainTextSnapshotReporter
50+
serializer=au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer
51+
serializer.base64=au.com.origin.snapshots.serializers.v1.Base64SnapshotSerializer
52+
serializer.json=au.com.origin.snapshots.jackson.serializers.v1.JacksonSnapshotSerializer
53+
serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer
54+
comparator=au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator
55+
reporters=au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter
5656
snapshot-dir=__snapshots__
5757
output-dir=src/test/java
5858
ci-env-var=CI
@@ -464,12 +464,12 @@ This file allows you to conveniently setup global defaults
464464
For example:
465465

466466
```text
467-
serializer=au.com.origin.snapshots.serializers.ToStringSnapshotSerializer
468-
serializer.base64=au.com.origin.snapshots.serializers.Base64SnapshotSerializer
469-
serializer.json=au.com.origin.snapshots.jackson.serializers.JacksonSnapshotSerializer
470-
serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.DeterministicJacksonSnapshotSerializer
471-
comparator=au.com.origin.snapshots.comparators.PlainTextEqualsComparator
472-
reporters=au.com.origin.snapshots.reporters.PlainTextSnapshotReporter
467+
serializer=au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer
468+
serializer.base64=au.com.origin.snapshots.serializers.v1.Base64SnapshotSerializer
469+
serializer.json=au.com.origin.snapshots.jackson.serializers.v1.JacksonSnapshotSerializer
470+
serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer
471+
comparator=au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator
472+
reporters=au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter
473473
snapshot-dir=__snapshots__
474474
output-dir=src/test/java
475475
ci-env-var=CI
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package au.com.origin.snapshots.comparators;
22

3-
import au.com.origin.snapshots.Snapshot;
3+
import au.com.origin.snapshots.logging.LoggingHelper;
4+
import lombok.extern.slf4j.Slf4j;
45

5-
public class PlainTextEqualsComparator implements SnapshotComparator {
6+
@Deprecated
7+
@Slf4j
8+
public class PlainTextEqualsComparator
9+
extends au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator {
610

7-
@Override
8-
public boolean matches(Snapshot previous, Snapshot current) {
9-
return previous.getBody().equals(current.getBody());
11+
public PlainTextEqualsComparator() {
12+
super();
13+
LoggingHelper.deprecatedV5(
14+
log,
15+
"Update to `au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator` in `snapshot.properties`");
1016
}
1117
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package au.com.origin.snapshots.comparators.v1;
2+
3+
import au.com.origin.snapshots.Snapshot;
4+
import au.com.origin.snapshots.comparators.SnapshotComparator;
5+
6+
public class PlainTextEqualsComparator implements SnapshotComparator {
7+
8+
@Override
9+
public boolean matches(Snapshot previous, Snapshot current) {
10+
return previous.getBody().equals(current.getBody());
11+
}
12+
}

Diff for: java-snapshot-testing-core/src/main/java/au/com/origin/snapshots/logging/LoggingHelper.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ public class LoggingHelper {
66

77
public static void deprecatedV5(Logger log, String message) {
88
log.warn(
9-
"Deprecation Warning:\n " + message + "\n\nThis feature will be removed in version 5.X");
9+
"\n\n** Deprecation Warning **\nThis feature will be removed in version 5.X\n"
10+
+ message
11+
+ "\n\n");
1012
}
1113
}
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,17 @@
11
package au.com.origin.snapshots.reporters;
22

3-
import au.com.origin.snapshots.Snapshot;
4-
import java.util.Arrays;
5-
import java.util.function.Supplier;
6-
import org.assertj.core.util.diff.DiffUtils;
7-
import org.assertj.core.util.diff.Patch;
8-
import org.opentest4j.AssertionFailedError;
9-
10-
public class PlainTextSnapshotReporter implements SnapshotReporter {
11-
12-
private static final Supplier<IllegalStateException> NO_DIFF_EXCEPTION_SUPPLIER =
13-
() ->
14-
new IllegalStateException(
15-
"No differences found. Potential mismatch between comparator and reporter");
16-
17-
public static String getDiffString(Patch<String> patch) {
18-
return patch.getDeltas().stream()
19-
.map(delta -> delta.toString() + "\n")
20-
.reduce(String::concat)
21-
.orElseThrow(NO_DIFF_EXCEPTION_SUPPLIER);
22-
}
23-
24-
@Override
25-
public boolean supportsFormat(String outputFormat) {
26-
return true; // always true
27-
}
28-
29-
@Override
30-
public void report(Snapshot previous, Snapshot current) {
31-
Patch<String> patch =
32-
DiffUtils.diff(
33-
Arrays.asList(previous.raw().split("\n")), Arrays.asList(current.raw().split("\n")));
34-
35-
String message = "Error on: \n" + current.raw() + "\n\n" + getDiffString(patch);
36-
37-
throw new AssertionFailedError(message, previous.raw(), current.raw());
3+
import au.com.origin.snapshots.logging.LoggingHelper;
4+
import lombok.extern.slf4j.Slf4j;
5+
6+
@Deprecated
7+
@Slf4j
8+
public class PlainTextSnapshotReporter
9+
extends au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter {
10+
11+
public PlainTextSnapshotReporter() {
12+
super();
13+
LoggingHelper.deprecatedV5(
14+
log,
15+
"Update to `au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter` in `snapshot.properties`");
3816
}
3917
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package au.com.origin.snapshots.reporters.v1;
2+
3+
import au.com.origin.snapshots.Snapshot;
4+
import au.com.origin.snapshots.reporters.SnapshotReporter;
5+
import java.util.Arrays;
6+
import java.util.function.Supplier;
7+
import org.assertj.core.util.diff.DiffUtils;
8+
import org.assertj.core.util.diff.Patch;
9+
import org.opentest4j.AssertionFailedError;
10+
11+
public class PlainTextSnapshotReporter implements SnapshotReporter {
12+
13+
private static final Supplier<IllegalStateException> NO_DIFF_EXCEPTION_SUPPLIER =
14+
() ->
15+
new IllegalStateException(
16+
"No differences found. Potential mismatch between comparator and reporter");
17+
18+
public static String getDiffString(Patch<String> patch) {
19+
return patch.getDeltas().stream()
20+
.map(delta -> delta.toString() + "\n")
21+
.reduce(String::concat)
22+
.orElseThrow(NO_DIFF_EXCEPTION_SUPPLIER);
23+
}
24+
25+
@Override
26+
public boolean supportsFormat(String outputFormat) {
27+
return true; // always true
28+
}
29+
30+
@Override
31+
public void report(Snapshot previous, Snapshot current) {
32+
Patch<String> patch =
33+
DiffUtils.diff(
34+
Arrays.asList(previous.raw().split("\n")), Arrays.asList(current.raw().split("\n")));
35+
36+
String message = "Error on: \n" + current.raw() + "\n\n" + getDiffString(patch);
37+
38+
throw new AssertionFailedError(message, previous.raw(), current.raw());
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,20 @@
11
package au.com.origin.snapshots.serializers;
22

3-
import au.com.origin.snapshots.Snapshot;
4-
import au.com.origin.snapshots.SnapshotSerializerContext;
5-
import java.nio.charset.StandardCharsets;
6-
import java.util.Base64;
3+
import au.com.origin.snapshots.logging.LoggingHelper;
4+
import lombok.extern.slf4j.Slf4j;
75

86
/**
97
* This Serializer converts a byte[] into a base64 encoded string. If the input is not a byte[] it
108
* will be converted using `.getBytes(StandardCharsets.UTF_8)` method
119
*/
12-
public class Base64SnapshotSerializer implements SnapshotSerializer {
13-
private static final ToStringSnapshotSerializer toStringSnapshotSerializer =
14-
new ToStringSnapshotSerializer();
15-
16-
@Override
17-
public Snapshot apply(Object object, SnapshotSerializerContext gen) {
18-
if (object == null) {
19-
toStringSnapshotSerializer.apply("", gen);
20-
}
21-
byte[] bytes =
22-
object instanceof byte[]
23-
? (byte[]) object
24-
: object.toString().getBytes(StandardCharsets.UTF_8);
25-
String encoded = Base64.getEncoder().encodeToString(bytes);
26-
return toStringSnapshotSerializer.apply(encoded, gen);
27-
}
28-
29-
@Override
30-
public String getOutputFormat() {
31-
return SerializerType.BASE64.name();
10+
@Slf4j
11+
@Deprecated
12+
public class Base64SnapshotSerializer
13+
extends au.com.origin.snapshots.serializers.v1.Base64SnapshotSerializer {
14+
public Base64SnapshotSerializer() {
15+
super();
16+
LoggingHelper.deprecatedV5(
17+
log,
18+
"Update to `au.com.origin.snapshots.serializers.v1.Base64SnapshotSerializer` in `snapshot.properties`");
3219
}
3320
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package au.com.origin.snapshots.serializers;
22

3-
import au.com.origin.snapshots.Snapshot;
4-
import au.com.origin.snapshots.SnapshotFile;
5-
import au.com.origin.snapshots.SnapshotSerializerContext;
3+
import au.com.origin.snapshots.logging.LoggingHelper;
64
import lombok.extern.slf4j.Slf4j;
75

86
/**
@@ -11,21 +9,13 @@
119
* <p>Will render each toString() on a separate line
1210
*/
1311
@Slf4j
14-
public class ToStringSnapshotSerializer implements SnapshotSerializer {
15-
16-
@Override
17-
public Snapshot apply(Object object, SnapshotSerializerContext gen) {
18-
String body = "[\n" + object.toString() + "\n]";
19-
if (body.contains(SnapshotFile.SPLIT_STRING)) {
20-
log.warn(
21-
"Found 3 consecutive lines in your snapshot \\n\\n\\n. This sequence is reserved as the snapshot separator - replacing with \\n.\\n.\\n");
22-
body = body.replaceAll(SnapshotFile.SPLIT_STRING, "\n.\n.\n");
23-
}
24-
return gen.toSnapshot(body);
25-
}
26-
27-
@Override
28-
public String getOutputFormat() {
29-
return SerializerType.TEXT.name();
12+
@Deprecated
13+
public class ToStringSnapshotSerializer
14+
extends au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer {
15+
public ToStringSnapshotSerializer() {
16+
super();
17+
LoggingHelper.deprecatedV5(
18+
log,
19+
"Update to `au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer` in `snapshot.properties`");
3020
}
3121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package au.com.origin.snapshots.serializers.v1;
2+
3+
import au.com.origin.snapshots.Snapshot;
4+
import au.com.origin.snapshots.SnapshotSerializerContext;
5+
import au.com.origin.snapshots.serializers.SerializerType;
6+
import au.com.origin.snapshots.serializers.SnapshotSerializer;
7+
import java.nio.charset.StandardCharsets;
8+
import java.util.Base64;
9+
10+
/**
11+
* This Serializer converts a byte[] into a base64 encoded string. If the input is not a byte[] it
12+
* will be converted using `.getBytes(StandardCharsets.UTF_8)` method
13+
*/
14+
public class Base64SnapshotSerializer implements SnapshotSerializer {
15+
private static final ToStringSnapshotSerializer toStringSnapshotSerializer =
16+
new ToStringSnapshotSerializer();
17+
18+
@Override
19+
public Snapshot apply(Object object, SnapshotSerializerContext gen) {
20+
if (object == null) {
21+
toStringSnapshotSerializer.apply("", gen);
22+
}
23+
byte[] bytes =
24+
object instanceof byte[]
25+
? (byte[]) object
26+
: object.toString().getBytes(StandardCharsets.UTF_8);
27+
String encoded = Base64.getEncoder().encodeToString(bytes);
28+
return toStringSnapshotSerializer.apply(encoded, gen);
29+
}
30+
31+
@Override
32+
public String getOutputFormat() {
33+
return SerializerType.BASE64.name();
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package au.com.origin.snapshots.serializers.v1;
2+
3+
import au.com.origin.snapshots.Snapshot;
4+
import au.com.origin.snapshots.SnapshotFile;
5+
import au.com.origin.snapshots.SnapshotSerializerContext;
6+
import au.com.origin.snapshots.serializers.SerializerType;
7+
import au.com.origin.snapshots.serializers.SnapshotSerializer;
8+
import lombok.extern.slf4j.Slf4j;
9+
10+
/**
11+
* This Serializer does a snapshot of the {@link Object#toString()} method
12+
*
13+
* <p>Will render each toString() on a separate line
14+
*/
15+
@Slf4j
16+
public class ToStringSnapshotSerializer implements SnapshotSerializer {
17+
18+
@Override
19+
public Snapshot apply(Object object, SnapshotSerializerContext gen) {
20+
String body = "[\n" + object.toString() + "\n]";
21+
if (body.contains(SnapshotFile.SPLIT_STRING)) {
22+
log.warn(
23+
"Found 3 consecutive lines in your snapshot \\n\\n\\n. This sequence is reserved as the snapshot separator - replacing with \\n.\\n.\\n");
24+
body = body.replaceAll(SnapshotFile.SPLIT_STRING, "\n.\n.\n");
25+
}
26+
return gen.toSnapshot(body);
27+
}
28+
29+
@Override
30+
public String getOutputFormat() {
31+
return SerializerType.TEXT.name();
32+
}
33+
}

Diff for: java-snapshot-testing-junit4/src/test/resources/snapshot.properties

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
serializer=au.com.origin.snapshots.serializers.ToStringSnapshotSerializer
2-
comparator=au.com.origin.snapshots.comparators.PlainTextEqualsComparator
3-
reporters=au.com.origin.snapshots.reporters.PlainTextSnapshotReporter
1+
serializer=au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer
2+
comparator=au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator
3+
reporters=au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter
44
snapshot-dir=__snapshots__
55
output-dir=src/test/java
66
ci-env-var=CI

Diff for: java-snapshot-testing-junit5/src/test/java/au/com/origin/snapshots/SnapshotParameterTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package au.com.origin.snapshots;
22

3-
import au.com.origin.snapshots.jackson.serializers.JacksonSnapshotSerializer;
3+
import au.com.origin.snapshots.jackson.serializers.v1.JacksonSnapshotSerializer;
44
import au.com.origin.snapshots.junit5.SnapshotExtension;
55
import java.util.stream.Stream;
66
import org.junit.jupiter.api.extension.ExtendWith;

Diff for: java-snapshot-testing-junit5/src/test/resources/snapshot.properties

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
serializer=au.com.origin.snapshots.serializers.ToStringSnapshotSerializer
2-
serializer.json=au.com.origin.snapshots.jackson.serializers.DeterministicJacksonSnapshotSerializer
3-
comparator=au.com.origin.snapshots.comparators.PlainTextEqualsComparator
4-
reporters=au.com.origin.snapshots.reporters.PlainTextSnapshotReporter
1+
serializer=au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer
2+
serializer.json=au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer
3+
comparator=au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator
4+
reporters=au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter
55
snapshot-dir=__snapshots__
66
output-dir=src/test/java
77
ci-env-var=CI
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package au.com.origin.snapshots.jackson.serializers;
22

3-
import com.fasterxml.jackson.databind.MapperFeature;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
3+
import au.com.origin.snapshots.logging.LoggingHelper;
4+
import lombok.extern.slf4j.Slf4j;
55

66
/**
77
* Attempts to deterministically render a snapshot.
@@ -11,11 +11,14 @@
1111
*
1212
* <p>Note that collections will be ordered which mar or may not be desirable given your use case.
1313
*/
14-
public class DeterministicJacksonSnapshotSerializer extends JacksonSnapshotSerializer {
15-
16-
@Override
17-
public void configure(ObjectMapper objectMapper) {
18-
objectMapper.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY);
19-
objectMapper.registerModule(new DeterministicCollectionModule());
14+
@Deprecated
15+
@Slf4j
16+
public class DeterministicJacksonSnapshotSerializer
17+
extends au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer {
18+
public DeterministicJacksonSnapshotSerializer() {
19+
super();
20+
LoggingHelper.deprecatedV5(
21+
log,
22+
"Update to `au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer` in `snapshot.properties`");
2023
}
2124
}

0 commit comments

Comments
 (0)