Exceptions.kt
- package com.hexagonkt.core
- import com.hexagonkt.core.text.eol
- /**
- * This flag is true when assertions are enabled in the JVM (`-ea` flag). Assertions are disabled by
- * default in the JVM, but they are enabled (and should be that way) on the tests.
- */
- val assertEnabled: Boolean by lazy {
- try {
- assert(false)
- false
- } catch (_: AssertionError) {
- true
- }
- }
- /** Syntax sugar to throw errors. */
- val fail: Nothing
- get() = error("Invalid state")
- /**
- * Return the stack trace array of the frames that starts with the given prefix.
- *
- * @receiver Throwable which stack trace will be filtered.
- * @param prefix Prefix used to filter stack trace elements (applied to class names).
- * @return Array with the frames of the throwable whose classes start with the given prefix.
- */
- fun Throwable.filterStackTrace(prefix: String): Array<out StackTraceElement> =
- if (prefix.isEmpty())
- this.stackTrace
- else
- this.stackTrace.filter { it.className.startsWith(prefix) }.toTypedArray()
- /**
- * Return this throwable as a text.
- *
- * @receiver Throwable to be printed to a string.
- * @param prefix Optional prefix to filter stack trace elements.
- * @return The filtered (if filter is provided) Throwable as a string.
- */
- fun Throwable.toText(prefix: String = ""): String =
- "${this.javaClass.name}: ${this.message}" +
- this.filterStackTrace(prefix).joinToString(eol, eol) { "\tat $it" } +
- if (this.cause == null) ""
- else "${eol}Caused by: " + (this.cause as Throwable).toText(prefix)