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. matching Nil or Failure()
the error only occurs when matching None and the first case does not match (see snippet)
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 =>
}
}
}
Matching on a
None
within a test leads to a ClassCastException under Scala 3.0.0-M3. A couple of notes:test
; it does not occur if the match is defined elsewhere (as can be seen in the "indirect" test below)Nothing
type parameter. E.g. matchingNil
orFailure()