🚚 Move Kotlin tests to kotlin directory
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / test / Matchers.kt
diff --git a/src/test/kotlin/net/pterodactylus/sone/test/Matchers.kt b/src/test/kotlin/net/pterodactylus/sone/test/Matchers.kt
new file mode 100644 (file)
index 0000000..c084d35
--- /dev/null
@@ -0,0 +1,21 @@
+package net.pterodactylus.sone.test
+
+import net.pterodactylus.util.web.*
+import org.hamcrest.*
+
+fun hasHeader(name: String, value: String) = object : TypeSafeDiagnosingMatcher<Header>() {
+       override fun matchesSafely(item: Header, mismatchDescription: Description) =
+                       compare(item.name, { it.equals(name, ignoreCase = true) }) { mismatchDescription.appendText("name is ").appendValue(it) }
+                                       ?: compare(item.hasValue(value), { it }) { mismatchDescription.appendText("does not have value ").appendValue(value) }
+                                       ?: true
+
+       override fun describeTo(description: Description) {
+               description.appendText("name is ").appendValue(name)
+                               .appendText(", value is ").appendValue(value)
+       }
+}
+
+fun <T : Any> compare(value: T, comparison: (T) -> Boolean, onError: (T) -> Unit) =
+               false.takeUnless { comparison(value) }
+                               ?.also { onError(value) }
+