utest
utest copied to clipboard
ClassCastException under Scala 3
Matching on a None
within a test leads to a ClassCastException under Scala 3.0.0-M3. A couple of notes:
- this only happens when the match is defined directly in a
test
; it does not occur if the match is defined elsewhere (as can be seen in the "indirect" test below) - this type of error also manifests itself when matching on other wrapper types that extend some base type with a
Nothing
type parameter. E.g. matchingNil
orFailure()
- the error only occurs when matching None and the first case does not match (see snippet)
- see this repository https://github.com/jodersky/utest-macro-bug for a self-contained project to reproduce the bug
import utest._
import scala.util.{
Try, Success, Failure
}
object misc extends TestSuite {
val tests = Tests {
// this leads to a runtime error in utest under Scala 3.0.0-M3
test("direct1") { // runtime error: java.lang.ClassCastException: class scala.None$ cannot be cast to class scala.Some
(None: Option[Int]) match {
case Some(a) =>
case None =>
}
}
test("direct2") { // works
(None: Option[Int]) match {
case None =>
case Some(a) =>
}
}
test("direct3") { // works
(Some(1): Option[Int]) match {
case Some(a) =>
case None =>
}
}
test("direct4") { // works
(Some(1): Option[Int]) match {
case None =>
case Some(a) =>
}
}
test("indirect") { // works
runTest()
}
}
def runTest() = {
(None: Option[Int]) match {
case Some(a) =>
case None =>
}
}
}
one more thing to note, the same error occurs under Scala 3.0.0-M2 (with utest 0.7.4) and Scala 3.0.0-RC1