kotlin-power-assert

Kotlin compiler plugin to enable power assertions in the Kotlin programming language

License

License

Categories

Categories

Kotlin Languages ORM Data
GroupId

GroupId

com.bnorm.power
ArtifactId

ArtifactId

kotlin-power-assert
Last Version

Last Version

0.4.0
Release Date

Release Date

Type

Type

pom.sha512
Description

Description

kotlin-power-assert
Kotlin compiler plugin to enable power assertions in the Kotlin programming language
Project URL

Project URL

https://github.com/bnorm/kotlin-power-assert
Source Code Management

Source Code Management

https://github.com/bnorm/kotlin-power-assert

Download kotlin-power-assert

Dependencies

runtime (1)

Group / Artifact Type Version
org.jetbrains.kotlin : kotlin-stdlib-jdk8 jar 1.4.0

Project Modules

There are no modules declared in this project.

kotlin-power-assert

Maven Central

Kotlin Compiler Plugin which high-jacks Kotlin assert function calls and transforms them similar to Groovy's Power Assert feature. This plugin uses the IR backend for the Kotlin compiler and supports all platforms: JVM, JS, and Native!

Example

Given following code:

val hello = "Hello"
assert(hello.length == "World".substring(1, 4).length)

Normally the assertion message would look like:

java.lang.AssertionError: Assertion failed
	at <stacktrace>

A custom assertion message can be provided:

val hello = "Hello"
assert(hello.length == "World".substring(1, 4).length) { "Incorrect length" }

But this just replaces the message:

java.lang.AssertionError: Incorrect length
	at <stacktrace>

With kotlin-power-assert included, the error message for the previous example will be transformed:

java.lang.AssertionError: Incorrect length
assert(hello.length == "World".substring(1, 4).length)
       |     |      |          |               |
       |     |      |          |               3
       |     |      |          orl
       |     |      false
       |     5
       Hello
	at <stacktrace>

Complex, multi-line, boolean expression are also supported:

Assertion failed
assert(
  (text != null && text.toLowerCase() == text) ||
   |    |
   |    false
   null
      text == "Hello"
      |    |
      |    false
      null
)

Gradle Plugin

Builds of the Gradle plugin are available through the Gradle Plugin Portal.

plugins {
  kotlin("multiplatform") version "1.4.20"
  id("com.bnorm.power.kotlin-power-assert") version "0.6.1"
}

The plugin by default will transform assert function call but can also transform other functions like require, check, and/or assertTrue. The function needs to validate the Boolean expression evaluates to true and has a form which also takes a String or String producing lambda.

configure<com.bnorm.power.PowerAssertGradleExtension> {
  functions = listOf("kotlin.assert", "kotlin.test.assertTrue")
}

Kotlin IR

Using this compiler plugin only works if the code is compiled using Kotlin 1.4.20 and IR is enabled. This includes all IR based compiler backends: JVM, JS, and Native! As Kotlin IR is still experimental, mileage may vary.

Kotlin/JVM
tasks.withType<KotlinCompile>().configureEach {
  kotlinOptions {
    useIR = true
  }
}
Kotlin/JS
target {
  js(IR) {
  }
}
Kotlin/Native

IR already enabled by default!

Versions

Version
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0