All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.dev.mokkery.internal.verify.OrderVerifier.kt Maven / Gradle / Ivy

Go to download

Mokkery is a mocking library for Kotlin Multiplatform, easy to use, boilerplate-free and compiler plugin driven.

The newest version!
package dev.mokkery.internal.verify

import dev.mokkery.internal.failAssertion
import dev.mokkery.internal.matcher.CallMatcher
import dev.mokkery.internal.matcher.isMatching
import dev.mokkery.internal.render.Renderer
import dev.mokkery.internal.templating.CallTemplate
import dev.mokkery.internal.tracing.CallTrace
import dev.mokkery.internal.verify.render.TemplateMatchingResultsRenderer
import dev.mokkery.internal.verify.results.TemplateMatchingResult
import dev.mokkery.internal.verify.results.TemplateMatchingResultsComposer

internal class OrderVerifier(
    private val callMatcher: CallMatcher = CallMatcher(),
    private val resultsComposer: TemplateMatchingResultsComposer = TemplateMatchingResultsComposer(callMatcher),
    private val renderer: Renderer> = TemplateMatchingResultsRenderer()
) : Verifier {

    override fun verify(callTraces: List, callTemplates: List): List {
        var currentTraces = callTraces.toMutableList()
        val verifiedTraces = mutableListOf()
        callTemplates.forEachIndexed { templateIndex, template ->
            val matchingTraceIndex = currentTraces.indexOfFirst { callMatcher.match(it, template).isMatching }
            if (matchingTraceIndex == -1) {
                failAssertion {
                    appendMainError(template, templateIndex)
                    appendRenderedResults(callTraces, callTemplates)
                }
            }
            verifiedTraces.add(currentTraces[matchingTraceIndex])
            currentTraces = currentTraces.subList(matchingTraceIndex + 1, currentTraces.size)
        }
        return verifiedTraces
    }

    private fun StringBuilder.appendMainError(
        template: CallTemplate,
        templateIndex: Int
    ) {
        append("Expected calls in specified order but not satisfied! ")
        appendLine("Failed at ${templateIndex + 1}. $template!")
    }

    private fun StringBuilder.appendRenderedResults(callTraces: List, callTemplates: List) {
        val results = resultsComposer.compose(callTraces, callTemplates)
        append(renderer.render(results))
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy