Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
BraisGabin committed Jan 2, 2022
1 parent 400f15d commit 734f161
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 11 deletions.
Expand Up @@ -25,8 +25,9 @@ internal fun generateBindingContext(
}

val messageCollector = DetektMessageCollector(
debugPrinter = debugPrinter,
minSeverity = CompilerMessageSeverity.ERROR,
debugPrinter = debugPrinter,
warningPrinter = warningPrinter,
)

val analyzer = AnalyzerWithCompilerReport(
Expand All @@ -44,29 +45,33 @@ internal fun generateBindingContext(
)
}

if (messageCollector.messages > 0) {
warningPrinter(
"The BindingContext was created with ${messageCollector.messages} issues. " +
"Run detekt with --debug to see the error messages."
)
}
messageCollector.printIssuesCountIfAny()

return analyzer.analysisResult.bindingContext
}

private class DetektMessageCollector(
private val debugPrinter: (() -> String) -> Unit,
internal class DetektMessageCollector(
private val minSeverity: CompilerMessageSeverity,
private val debugPrinter: (() -> String) -> Unit,
private val warningPrinter: (String) -> Unit,
) : MessageCollector by MessageCollector.NONE {
var messages = 0
private set
private var messages = 0

override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (severity.ordinal <= minSeverity.ordinal) {
debugPrinter { DetektMessageRenderer.render(severity, message, location) }
messages++
}
}

fun printIssuesCountIfAny() {
if (messages > 0) {
warningPrinter(
"The BindingContext was created with $messages issues. " +
"Run detekt with --debug to see the error messages."
)
}
}
}

private object DetektMessageRenderer : PlainTextMessageRenderer() {
Expand Down
@@ -0,0 +1,88 @@
package io.gitlab.arturbosch.detekt.core

import io.mockk.Called
import io.mockk.every
import io.mockk.mockk
import io.mockk.slot
import io.mockk.verify
import org.assertj.core.api.Assertions.assertThat
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.spekframework.spek2.Spek
import org.spekframework.spek2.lifecycle.CachingMode
import org.spekframework.spek2.style.specification.describe

internal object DetektMessageCollectorSpec : Spek({
describe("DetektMessageCollector") {
val debugPrinter: (() -> String) -> Unit by memoized(CachingMode.TEST) {
mockk {
every { this@mockk.invoke(any()) } returns Unit
}
}
val warningPrinter: (String) -> Unit by memoized(CachingMode.TEST) {
mockk {
every { this@mockk.invoke(any()) } returns Unit
}
}
val subject by memoized(CachingMode.TEST) {
DetektMessageCollector(
minSeverity = CompilerMessageSeverity.INFO,
debugPrinter = debugPrinter,
warningPrinter = warningPrinter,
)
}

describe("message with min severity") {
beforeEachTest { subject.report(CompilerMessageSeverity.INFO, "message", null) }

it("prints the message") {
val slot = slot<() -> String>()
verify { debugPrinter.invoke(capture(slot)) }
assertThat(slot.captured() == "info: message")
}

it("adds up to the message count") {
subject.printIssuesCountIfAny()

verify {
warningPrinter(
"The BindingContext was created with 1 issues. " +
"Run detekt with --debug to see the error messages."
)
}
}
}
describe("message with higher severity than the min severity") {
beforeEachTest { subject.report(CompilerMessageSeverity.WARNING, "message", null) }

it("prints the message") {
val slot = slot<() -> String>()
verify { debugPrinter.invoke(capture(slot)) }
assertThat(slot.captured() == "warning: message")
}

it("adds up to the message count") {
subject.printIssuesCountIfAny()

verify {
warningPrinter(
"The BindingContext was created with 1 issues. " +
"Run detekt with --debug to see the error messages."
)
}
}
}
describe("message with lower severity than the min severity") {
beforeEachTest { subject.report(CompilerMessageSeverity.LOGGING, "message", null) }

it("ignores the message") {
verify { debugPrinter wasNot Called }
}

it("doesn't add up to the message count") {
subject.printIssuesCountIfAny()

verify { warningPrinter wasNot Called }
}
}
}
})

0 comments on commit 734f161

Please sign in to comment.