Matching JSON content
This module is available for all targets.
shouldEqualJsonβ
json.shouldEqualJson(other) asserts that the left-hand side represents the same
JSON structure as the right-hand side.
The matcher allows for different formatting, and for different order of keys.
For example, the following two JSON strings would be considered equal:
{
"name": "sam",
"location": "chicago",
"age": 41
}
and
{ "age": 41, "name": "sam", "location": "chicago" }
The inverse of this matcher is shouldNotEqualJson which will error if two JSON strings are considered equal.
compareJsonOptionsβ
shouldEqualJson supports an additional parameter of type CompareJsonOptions which supports the following flags to
toggle behaviour of the JSON comparison:
Usage:β
Options can be specified inline, like:
a.shouldEqualJson(b, compareJsonOptions { arrayOrder = ArrayOrder.Strict })
Another option is to define a compare function which suits your desires, like:
val myOptions = compareJsonOptions {
typeCoercion = TypeCoercion.Enabled
arrayOrder = ArrayOrder.Lenient
}
infix fun String.lenientShouldEqualJson(other: String) = this.shouldEqualJson(other, myOptions)
"[1, 2]" lenientShouldEqualJson "[2, 1]" // This will pass
Parametersβ
| Name | Purpose | Possible values | Default value |
|---|---|---|---|
PropertyOrder | Determines if the order of properties in JSON objects are considered when comparing | PropertyOrder.Strict, PropertyOrder.Lenient | PropertyOrder.Lenient, i.e. order of properties DON'T matter |
ArrayOrder | Determines if the order of elements in JSON arrays are considered when comparing | ArrayOrder.Strict, ArrayOrder.Lenient | ArrayOrder.Strict, i.e. order of elements DO matter |
FieldComparison | Determines if comparison will fail if JSON objects actual contain extra properties, when compared to expected | FieldComparison.Strict, FieldComparison.Lenient | FieldComparison.Strict, i.e. extra properties will cause inequality |
NumberFormat | Determines if comparison of numbers are strict with regards to number format. For instance, if 100.0 and 100 are considered equal. | NumberFormat.Strict, NumberFormat.Lenient | NumberFormat.Lenient, i.e. number formats DON'T matter |
TypeCoercion | Determines if types will try to be coerced, for instance when a string contains a number or boolean value | TypeCoercion.Enabled, TypeCoercion.Disabled | TypeCoercion.Disabled, i.e. types will NOT be coerced |
Targets: Multiplatform
shouldEqualSpecifiedJsonβ
Alias for shouldEqualJson, with default options except FieldComparison which is set to FieldComparison.Lenient
instead.
val a = """ { "a": true, "date": "2019-11-03" } """
val b = """ { "a": true } """
// this would pass
a shouldEqualSpecifiedJson b
// this would fail
a shouldEqualJson b
The inverse of this matcher is shouldNotEqualSpecifiedJson which will error if two JSON strings are considered
equal.
Targets: Multiplatform
shouldEqualSpecifiedJsonIgnoringOrderβ
Alias for shouldEqualJson, with default options except
FieldComparisonwhich is set toFieldComparison.LenientArrayOrderwhich is set toArrayOrder.Lenient
Targets: Multiplatform
shouldBeEmptyJsonArrayβ
json.shouldBeEmptyJsonArray() asserts that the JSON is an empty array ([]).
Targets: Multiplatform
shouldBeEmptyJsonObjectβ
json.shouldBeEmptyJsonObject() asserts that the JSON is an empty array ({}).
Targets: Multiplatform
shouldBeJsonArrayβ
json.shouldBeJsonArray() asserts that the JSON is an array.
The inverse of this matcher is shouldNotBeJsonArray which will error if the JSON string is an array.
Targets: Multiplatform
shouldBeJsonObjectβ
json.shouldBeJsonObject() asserts that the JSON is an object.
The inverse of this matcher is shouldNotBeJsonObject which will error if the JSON string is an object.
Targets: Multiplatform
shouldBeValidJsonβ
json.shouldBeValidJson() asserts that the string is valid JSON.
The inverse of this matcher is shouldNotBeValidJson which will error if the string is valid JSON.
Targets: Multiplatform
shouldContainJsonKeyβ
json.shouldContainJsonKey("$.json.path") asserts that a JSON string contains the given JSON path.
The inverse of this matcher is shouldNotContainJsonKey which will error if a JSON string does contain the given JSON
path.
Targets: JVM
shouldContainJsonKeyValueβ
str.shouldContainJsonKeyValue("$.json.path", value) asserts that a JSON string contains a JSON path with a specific
value.
The inverse of this matcher is shouldNotContainJsonKeyValue which will error if a JSON string does contain the given
value at the given JSON path.
Targets: JVM
shouldMatchJsonResourceβ
json.shouldMatchJsonResource("/file.json") asserts that the JSON is equal to the existing test resource /file.json,
ignoring properties' order and formatting.
Targets: JVM