Created
January 31, 2018 12:55
-
-
Save bastman/b62303bb42234e48c07f6c768a22b3f4 to your computer and use it in GitHub Desktop.
Kotlin extensions for json based assertions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Example: jsonExpected shouldEqualJson jsonGiven | |
import com.fasterxml.jackson.databind.ObjectMapper | |
import com.fasterxml.jackson.databind.SerializationFeature | |
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module | |
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule | |
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper | |
import com.fasterxml.jackson.module.kotlin.readValue | |
import org.amshove.kluent.shouldEqual | |
fun simpleJsonSerializer(): ObjectMapper { | |
return jacksonObjectMapper() | |
.registerModules( | |
JavaTimeModule(), | |
Jdk8Module() | |
) | |
.disable( | |
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, | |
SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, | |
SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, | |
SerializationFeature.WRITE_ENUMS_USING_INDEX | |
) | |
} | |
fun String.toNormalizedJson(): String { | |
val mapper = jacksonObjectMapper() | |
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); | |
val decoded:Any? = mapper.readValue(this)// mapper.readTree(this) | |
return mapper | |
.writeValueAsString(decoded) | |
.trim() | |
} | |
infix fun String.shouldEqualJson(theOther: String) = | |
this.toNormalizedJson() shouldEqual theOther.toNormalizedJson() | |
fun Any?.toJson(mapper: ObjectMapper = simpleJsonSerializer()): String { | |
return mapper.writeValueAsString(this) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment