16
16
17
17
package org .springframework .test .json ;
18
18
19
+ import org .json .JSONException ;
19
20
import org .skyscreamer .jsonassert .JSONCompare ;
20
21
import org .skyscreamer .jsonassert .JSONCompareMode ;
21
22
import org .skyscreamer .jsonassert .JSONCompareResult ;
23
+ import org .skyscreamer .jsonassert .comparator .DefaultComparator ;
22
24
import org .skyscreamer .jsonassert .comparator .JSONComparator ;
23
25
24
26
import org .springframework .lang .Nullable ;
25
- import org .springframework .util .function .ThrowingBiFunction ;
26
27
27
28
/**
28
29
* Useful methods that can be used with {@code org.skyscreamer.jsonassert}.
@@ -40,7 +41,9 @@ public abstract class JsonAssert {
40
41
* @see JSONCompareMode#LENIENT
41
42
*/
42
43
public static JsonComparator comparator (JsonCompareMode compareMode ) {
43
- return comparator (toJSONCompareMode (compareMode ));
44
+ JSONCompareMode jsonAssertCompareMode = (compareMode != JsonCompareMode .LENIENT
45
+ ? JSONCompareMode .STRICT : JSONCompareMode .LENIENT );
46
+ return comparator (jsonAssertCompareMode );
44
47
}
45
48
46
49
/**
@@ -50,8 +53,7 @@ public static JsonComparator comparator(JsonCompareMode compareMode) {
50
53
* @return a new {@link JsonComparator} instance
51
54
*/
52
55
public static JsonComparator comparator (JSONComparator comparator ) {
53
- return comparator ((expectedJson , actualJson ) -> JSONCompare
54
- .compareJSON (expectedJson , actualJson , comparator ));
56
+ return new JsonAssertJsonComparator (comparator );
55
57
}
56
58
57
59
/**
@@ -61,33 +63,41 @@ public static JsonComparator comparator(JSONComparator comparator) {
61
63
* @return a new {@link JsonComparator} instance
62
64
*/
63
65
public static JsonComparator comparator (JSONCompareMode mode ) {
64
- return comparator ((expectedJson , actualJson ) -> JSONCompare
65
- .compareJSON (expectedJson , actualJson , mode ));
66
+ return new JsonAssertJsonComparator (mode );
66
67
}
67
68
68
- private static JsonComparator comparator (ThrowingBiFunction <String , String , JSONCompareResult > compareFunction ) {
69
- return (expectedJson , actualJson ) -> compare (expectedJson , actualJson , compareFunction );
70
- }
69
+ private static class JsonAssertJsonComparator implements JsonComparator {
71
70
72
- private static JsonComparison compare (@ Nullable String expectedJson , @ Nullable String actualJson ,
73
- ThrowingBiFunction <String , String , JSONCompareResult > compareFunction ) {
71
+ private final JSONComparator jsonAssertComparator ;
74
72
75
- if (actualJson == null ) {
76
- return (expectedJson != null )
77
- ? JsonComparison .mismatch ("Expected null JSON" )
78
- : JsonComparison .match ();
73
+ JsonAssertJsonComparator (JSONComparator jsonAssertComparator ) {
74
+ this .jsonAssertComparator = jsonAssertComparator ;
79
75
}
80
- if (expectedJson == null ) {
81
- return JsonComparison .mismatch ("Expected non-null JSON" );
76
+
77
+ JsonAssertJsonComparator (JSONCompareMode compareMode ) {
78
+ this (new DefaultComparator (compareMode ));
82
79
}
83
- JSONCompareResult result = compareFunction .throwing (IllegalStateException ::new ).apply (expectedJson , actualJson );
84
- return (!result .passed ())
85
- ? JsonComparison .mismatch (result .getMessage ())
86
- : JsonComparison .match ();
87
- }
88
80
89
- private static JSONCompareMode toJSONCompareMode (JsonCompareMode compareMode ) {
90
- return (compareMode != JsonCompareMode .LENIENT ? JSONCompareMode .STRICT : JSONCompareMode .LENIENT );
81
+ @ Override
82
+ public JsonComparison compare (@ Nullable String expectedJson , @ Nullable String actualJson ) {
83
+ if (actualJson == null ) {
84
+ return (expectedJson != null )
85
+ ? JsonComparison .mismatch ("Expected null JSON" )
86
+ : JsonComparison .match ();
87
+ }
88
+ if (expectedJson == null ) {
89
+ return JsonComparison .mismatch ("Expected non-null JSON" );
90
+ }
91
+ try {
92
+ JSONCompareResult result = JSONCompare .compareJSON (expectedJson , actualJson , this .jsonAssertComparator );
93
+ return (!result .passed ())
94
+ ? JsonComparison .mismatch (result .getMessage ())
95
+ : JsonComparison .match ();
96
+ }
97
+ catch (JSONException ex ) {
98
+ throw new IllegalStateException (ex );
99
+ }
100
+ }
91
101
}
92
102
93
103
}
0 commit comments