truthish
truthish copied to clipboard
Instance check contract
Hi,
Please add a contract such that if isInstanceOf succeeded, there'd be no need to cast the object for additional assertions.
Thanks.
Hey, thanks for the report, and sorry I just saw it now.
As far as I'm aware, what you want isn't possible. However, if you can point me to documentation on how to create such a contract, I'll happily do so.
Otherwise, I would just recommend casting directly:
val x = eval("1 + 2") as Int
assertThat(x * 10).isEqualTo(30)
instead of:
val x = eval("1 + 2") // returns "Any"
assertThat(x).isInstanceOf<Int>()
assertThat(x * 10).isEqualTo(30)
Sure, it's unfortunate you miss out on some slightly clearer wording in the case of a type mismatch, but your test will fail fast anyway.
If you really want a clear, custom message, you could also do:
val x = eval("1 + 2") as? Int ?: error("Eval 1+2 did not return an int, as expected")
assertThat(x * 10).isEqualTo(30)
But if you can find docs on how to smart cast with a contract, I'd love to see the link! I'm failing to find it myself but I could be missing something.