inline infix fun <reified TSub : Any> Assert<Any>.isA(noinline assertionCreator: AssertionPlant<TSub>.() -> Unit): Unit
Makes the assertion that the Assert.subject is a TSub (the same type or a sub-type) and if so, uses assertionCreator which could create further assertions which are added as a group.
Notice, that asserting a function type is flawed.
The actual types are ignored as function types erase to Function0,
Function1 etc. on byte code level, which means the assertion holds as long as the Assert.subject is a
function and has the same amount of arguments regardless if the types differ. For instance
assert({x: Int -> "hello"}).isA<String -> Unit>{}
holds, even though (Int) -> String
is clearly not
a (String) -> Unit
.
More generally speaking, the flaw applies to all generic types.
For instance isA<List<String>>
would only check if the Assert.subject is a List
without checking if
the element type is actually String
. Or in other words
assert(listOf(1, 2)).isA<List<String>>{}
holds, even though List<Int>
is clearly not a List<String>
.
AssertionError
- Might throw an AssertionError if the assertion made is not correct.
Return
Notice, that this assertion function cannot provide a fluent API because it depends on whether the first
assertion (Assert.subject is a TSub) holds or not. Define subsequent assertions
via the assertionCreator lambda.