truthish icon indicating copy to clipboard operation
truthish copied to clipboard

Instance check contract

Open joelk-2023 opened this issue 1 year ago • 1 comments

Hi,

Please add a contract such that if isInstanceOf succeeded, there'd be no need to cast the object for additional assertions.

Thanks.

joelk-2023 avatar Jan 29 '24 16:01 joelk-2023

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.

bitspittle avatar Mar 31 '24 05:03 bitspittle