sbt/launch/src/test/scala/EnumerationTest.scala

52 lines
1.7 KiB
Scala

package xsbt.boot
import org.scalacheck._
import Prop.{ Exception => _, _ }
object EnumerationTest extends Properties("Enumeration") {
property("MultiEnum.toValue") = checkToValue(MultiEnum, multiElements: _*)
property("MultiEnum.elements") = checkElements(MultiEnum, multiElements: _*)
property("EmptyEnum.toValue") = checkToValue(EmptyEnum)
property("EmptyEnum.elements") = EmptyEnum.elements.isEmpty
property("SingleEnum.toValue") = checkToValue(SingleEnum, singleElements)
property("SingleEnum.elements") = checkElements(SingleEnum, singleElements)
def singleElements = ("A", SingleEnum.a)
def multiElements =
{
import MultiEnum.{ a, b, c }
List(("A" -> a), ("B" -> b), ("C" -> c))
}
def checkElements(enum: Enumeration, mapped: (String, Enumeration#Value)*) =
{
val elements = enum.elements
("elements: " + elements) |:
(mapped.forall { case (s, v) => elements.contains(v) } && (elements.length == mapped.length))
}
def checkToValue(enum: Enumeration, mapped: (String, Enumeration#Value)*) =
{
def invalid(s: String) =
("valueOf(" + s + ")") |:
Prop.throws(classOf[Exception])(enum.toValue(s))
def valid(s: String, expected: Enumeration#Value) =
("valueOf(" + s + ")") |:
("Expected " + expected) |:
(enum.toValue(s) == expected)
val map = Map(mapped: _*)
Prop.forAll((s: String) =>
map.get(s) match {
case Some(v) => valid(s, v)
case None => invalid(s)
})
}
object MultiEnum extends Enumeration {
val a = value("A")
val b = value("B")
val c = value("C")
}
object SingleEnum extends Enumeration {
val a = value("A")
}
object EmptyEnum extends Enumeration
}