> mailingList = () -> List.of(new Customer("Bob"), new Customer("Mary"),
+ new Customer("Tom"));
+ MailServer mailServer = initializeMailServer();
+ sendOutSeniorDiscounts(mailServer, mailingList);
+ Approvals.verifyAll("", mailServer.getRecipients());
+ }
// end-snippet
+ private MailServer initializeMailServer()
+ {
+ return new MailServer();
+ }
+ private DataBase initializeDatabase()
+ {
+ return null;
+ }
}
private String generateDiscountMessage(Customer customer, Discount seniorDiscount)
{
diff --git a/approvaltests-util/docs/how_to/LoadersAndSavers.md b/approvaltests-util/docs/how_to/LoadersAndSavers.md
index 079258347..e9e2acdb6 100644
--- a/approvaltests-util/docs/how_to/LoadersAndSavers.md
+++ b/approvaltests-util/docs/how_to/LoadersAndSavers.md
@@ -120,6 +120,7 @@ List.of(new Customer("Bob, Jones, 123 Elm St., Tempe, AZ, 14-MAR-1958"),
### Step 4: In the original method, replace the function call with a Loader
+
public void sendOutSeniorDiscounts(DataBase database, MailServer mailServer) {
List<Customer> seniorCustomers = database.getSeniorCustomers();
@@ -145,41 +146,57 @@ List.of(new Customer("Bob, Jones, 123 Elm St., Tempe, AZ, 14-MAR-1958"),
Step 5: Now we introduce the new loader function as a parameter to the original function. (If you use the IDE's refactoring tools to do this it will save a lot of effort).
-```
-public void sendOutSeniorDiscounts(DataBase database, MailServer mailServer) {
-
- List<Customer> seniorCustomers = ((Loader<List) () -> database.getSeniorCustomers()).load();
-
- // ...
-
-}
-```
-
-becomes
-
-```
-public void sendOutSeniorDiscounts(DataBase database, MailServer mailServer, Loader<List seniorCustomerLoader) {
-
- List<Customer> seniorCustomers = seniorCustomerLoader.load();
-
- // ...
-
-}
-```
-
-Step 6: Update the calls to this function (including tests) to use the new Loader parameter.
+
-public void senior_customer_list_includes_only_those_over_age_65() {
-
- MailServer mailServer = // initialize server
+
+ public void sendOutSeniorDiscounts(DataBase database, MailServer mailServer) {
+ Loader<List<Customer>> seniorCustomerLoader = database::getSeniorCustomers;
+ List<Customer> seniorCustomers = seniorCustomerLoader.load();
+ // ...
+ }
+
+# ⇓ extract method
+
+ public void sendOutSeniorDiscounts(DataBase database, MailServer mailServer) {
+ Loader<List<Customer>> seniorCustomerLoader = database::getSeniorCustomers;
+ sendOutSeniorDiscounts(mailServer, seniorCustomerLoader);
+ }
+
+ public void sendOutSeniorDiscounts(MailServer mailServer, Loader<List<Customer>> seniorCustomerLoader) {
+ List<Customer> seniorCustomers = seniorCustomerLoader.load();
+ // ...
+ }
+
- List<Customer> seniorCustomers = List.of(new Customer("Bob", "Jones", /\* ... /), / ... \*/);
+Step 6: Update the unit tests to use the new Loader parameter.
+We have now removed the reliance on the database to retrieve the data.
+We still rely on a mail server to send the results.
- sendOutSeniorDiscounts(null, mailServer, () -> seniorCustomers));
+
- Approvals.verifyAll(mailServer.getRecipients());
+
+ @Test
+ public void senior_customer_list_includes_only_those_over_age_65()
+ {
+ DataBase database = initializeDatabase();
+ MailServer mailServer = initializeMailServer();
+ sendOutSeniorDiscounts( mailServer, database );
+ Approvals.verifyAll("", mailServer.getRecipients());
+ }
+
+# ⇓
+
+ @Test
+ public void senior_customer_list_includes_only_those_over_age_65()
+ {
+ DataBase database = initializeDatabase();
+ Loader<List<Customer>> mailingList = () -> List.of(new Customer("Bob"), new Customer("Mary"), new Customer("Tom"));
+ MailServer mailServer = initializeMailServer();
+ sendOutSeniorDiscounts( mailServer, database mailingList );
+ Approvals.verifyAll("", mailServer.getRecipients());
+ }
+
-}
Step 7: Now we can remove the DataBase as a parameter altogether.
diff --git a/approvaltests-util/pom.xml b/approvaltests-util/pom.xml
index 6bcaf41b3..278a75a06 100644
--- a/approvaltests-util/pom.xml
+++ b/approvaltests-util/pom.xml
@@ -69,7 +69,7 @@
org.apache.commons
commons-lang3
- 3.14.0
+ 3.16.0
diff --git a/approvaltests-util/src/main/java/com/spun/util/JsonUtils.java b/approvaltests-util/src/main/java/com/spun/util/JsonUtils.java
index 90cfee33b..feee66f20 100644
--- a/approvaltests-util/src/main/java/com/spun/util/JsonUtils.java
+++ b/approvaltests-util/src/main/java/com/spun/util/JsonUtils.java
@@ -66,9 +66,13 @@ private static GsonBuilder addHandlingForDateObjects(GsonBuilder builder)
return builder;
}
public static String reorderFields(String json)
+ {
+ return reorderFields(json, g -> g);
+ }
+ public static String reorderFields(String json, Function1 gsonBuilder)
{
JsonObject sortedJsonObject = sortJsonObject(json);
- return asJson(sortedJsonObject);
+ return asJson(sortedJsonObject, gsonBuilder);
}
public static JsonObject sortJsonObject(String json)
{
@@ -112,7 +116,14 @@ public static class LocalDateTimeAdapter extends TypeAdapter
@Override
public void write(JsonWriter jsonWriter, LocalDateTime instant) throws IOException
{
- jsonWriter.value(instant.toString());
+ if (instant == null)
+ {
+ jsonWriter.nullValue();
+ }
+ else
+ {
+ jsonWriter.value("" + instant);
+ }
}
@Override
public LocalDateTime read(JsonReader jsonReader) throws IOException
diff --git a/approvaltests/docs/how_to/CreateCustomizedVerifyMethods.md b/approvaltests/docs/how_to/CreateCustomizedVerifyMethods.md
index 18fef113e..b13b5dccb 100644
--- a/approvaltests/docs/how_to/CreateCustomizedVerifyMethods.md
+++ b/approvaltests/docs/how_to/CreateCustomizedVerifyMethods.md
@@ -20,7 +20,7 @@ public static void verifyAsJson(Object o, Options options)
Approvals.verify(JsonUtils.asJson(o), options.forFile().withExtension(".json"));
}
```
-snippet source | anchor
+snippet source | anchor
## Create a `Verifiable` Object
diff --git a/approvaltests/docs/reference/Verify.md b/approvaltests/docs/reference/Verify.md
index f771607a4..0f40382d4 100644
--- a/approvaltests/docs/reference/Verify.md
+++ b/approvaltests/docs/reference/Verify.md
@@ -67,10 +67,11 @@ Here is a list:
* CombinationApprovals. [verifyBestCoveringPairs ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/combinations/CombinationApprovals.java#L291-L299) (Function7, Object[], Object[], Object[], Object[], Object[], Object[], Object[], $\color{#AAA}{\textsf{Options}}$)
* CombinationApprovals. [verifyBestCoveringPairs ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/combinations/CombinationApprovals.java#L309-L317) (Function8, Object[], Object[], Object[], Object[], Object[], Object[], Object[], Object[], $\color{#AAA}{\textsf{Options}}$)
* CombinationApprovals. [verifyBestCoveringPairs ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/combinations/CombinationApprovals.java#L326-L333) (Function9, Object[], Object[], Object[], Object[], Object[], Object[], Object[], Object[], Object[], $\color{#AAA}{\textsf{Options}}$)
- * JsonApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L44-L47) (Object, $\color{#AAA}{\textsf{Options}}$)
- * JsonApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L39-L42) (Object, Function1, $\color{#AAA}{\textsf{Options}}$)
- * JsonApprovals. [verifyJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L18-L21) (String, $\color{#AAA}{\textsf{Options}}$)
- * JsonApprovals. [verifyJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L26-L30) (String, boolean, $\color{#AAA}{\textsf{Options}}$)
+ * JsonApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L53-L56) (Object, $\color{#AAA}{\textsf{Options}}$)
+ * JsonApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L48-L51) (Object, Function1, $\color{#AAA}{\textsf{Options}}$)
+ * JsonApprovals. [verifyJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L17-L20) (String, $\color{#AAA}{\textsf{Options}}$)
+ * JsonApprovals. [verifyJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L35-L39) (String, boolean, $\color{#AAA}{\textsf{Options}}$)
+ * JsonApprovals. [verifyJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java#L29-L34) (String, boolean, Function1, $\color{#AAA}{\textsf{Options}}$)
* JsonJacksonApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonJacksonApprovals.java#L14-L17) (Object, $\color{#AAA}{\textsf{Options}}$)
* JsonXstreamApprovals. [verifyAsJson ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/JsonXstreamApprovals.java#L18-L21) (Object, $\color{#AAA}{\textsf{Options}}$)
* VelocityApprovals. [verify ](https://github.com/approvals/ApprovalTests.Java/blob/master/approvaltests/src/main/java/org/approvaltests/velocity/VelocityApprovals.java#L16-L24) (ContextAware, $\color{#AAA}{\textsf{Options}}$)
diff --git a/approvaltests/pom.xml b/approvaltests/pom.xml
index ba7add413..d2330f434 100644
--- a/approvaltests/pom.xml
+++ b/approvaltests/pom.xml
@@ -53,7 +53,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.17.1
+ 2.17.2
true
@@ -100,7 +100,7 @@
org.junit.jupiter
junit-jupiter-api
- 5.10.2
+ 5.10.3
compile
true
@@ -113,13 +113,13 @@
org.junit.jupiter
junit-jupiter-engine
- 5.10.2
+ 5.10.3
test
org.junit.vintage
junit-vintage-engine
- 5.10.2
+ 5.10.3
test
diff --git a/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java b/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java
index 4857da891..8afc4ca8f 100644
--- a/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java
+++ b/approvaltests/src/main/java/org/approvaltests/JsonApprovals.java
@@ -1,7 +1,6 @@
package org.approvaltests;
import com.google.gson.GsonBuilder;
-import com.spun.util.FormattedException;
import com.spun.util.JsonUtils;
import org.approvaltests.core.Options;
import org.lambda.functions.Function1;
@@ -23,6 +22,16 @@ public static void verifyJson(String json, boolean reorderJson)
{
verifyJson(json, reorderJson, new Options());
}
+ public static void verifyJson(String json, boolean reorderJson, Function1 gsonBuilder)
+ {
+ verifyJson(json, reorderJson, gsonBuilder, new Options());
+ }
+ public static void verifyJson(String json, boolean reorderJson, Function1 gsonBuilder,
+ Options options)
+ {
+ String formattedJson = reorderJson ? JsonUtils.reorderFields(json, gsonBuilder) : JsonUtils.prettyPrint(json);
+ Approvals.verify(formattedJson, options.forFile().withExtension(".json"));
+ }
public static void verifyJson(String json, boolean reorderJson, Options options)
{
String formattedJson = reorderJson ? JsonUtils.reorderFields(json) : JsonUtils.prettyPrint(json);
diff --git a/pom.xml b/pom.xml
index 2d199afe1..b3d0adbab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,7 @@
maven-surefire-plugin
- 3.3.0
+ 3.3.1
-Duser.language=en -Duser.region=US
@@ -124,6 +124,16 @@
true
+
+ org.apache.maven.plugins
+ maven-site-plugin
+ 3.12.1
+
+
+ org.apache.maven.plugins
+ maven-project-info-reports-plugin
+ 3.6.2
+
@@ -151,7 +161,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.3.0
+ 3.3.1
org.apache.maven.plugins
@@ -191,7 +201,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 3.7.0
+ 3.8.0
attach-javadocs