X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftest%2FPaginationMatcher.kt;fp=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftest%2FPaginationMatcher.kt;h=5a47ca7ad1c62ec0aeaab248ea735611959ee262;hb=059a9194badec4e9c36e8fcb7fea458eea243bb0;hp=0000000000000000000000000000000000000000;hpb=2000b0561c6a7e4b1fbc6e452b89c9504b3b5d33;p=Sone.git diff --git a/src/test/kotlin/net/pterodactylus/sone/test/PaginationMatcher.kt b/src/test/kotlin/net/pterodactylus/sone/test/PaginationMatcher.kt new file mode 100644 index 0000000..5a47ca7 --- /dev/null +++ b/src/test/kotlin/net/pterodactylus/sone/test/PaginationMatcher.kt @@ -0,0 +1,46 @@ +package net.pterodactylus.sone.test + +import net.pterodactylus.sone.utils.Pagination +import org.hamcrest.Description +import org.hamcrest.TypeSafeDiagnosingMatcher + +/** + * Hamcrest matcher for [Pagination]s. + */ +class PaginationMatcher(private val page: Int? = null, private val pages: Int? = null): + TypeSafeDiagnosingMatcher>() { + + override fun matchesSafely(pagination: Pagination<*>, mismatchDescription: Description): Boolean { + page?.let { + if (pagination.page != page) { + mismatchDescription.appendText("page is ").appendValue(pagination.page) + return false + } + } + pages?.let { + if (pagination.pageCount != pages) { + mismatchDescription.appendText("total pages is ").appendValue(pagination.pageCount) + return false + } + } + return true + } + + override fun describeTo(description: Description) { + page?.also { + description.appendText("is on page ").appendValue(page) + pages?.also { + description.appendText(" of ").appendValue(pages) + } + } ?: pages?.also { + description.appendText("has ").appendValue(pages).appendText(" pages") + } + } + + fun isOnPage(page: Int) = PaginationMatcher(page = page, pages = pages) + fun hasPages(pages: Int) = PaginationMatcher(page = page, pages = pages) + +} + +fun isOnPage(page: Int) = PaginationMatcher(page = page) +fun hasPages(pages: Int) = PaginationMatcher(pages = pages)