/* * Copyright (C) 2012 Typesafe Inc. */ package scala import reflect._ import tools.reflect.ToolBoxError package object async { implicit class objectops(obj: Any) { def mustBe(other: Any) = assert(obj == other, obj + " is not " + other) def mustEqual(other: Any) = mustBe(other) } implicit class stringops(text: String) { def mustContain(substring: String) = assert(text contains substring, text) } def intercept[T <: Throwable : ClassTag](body: => Any): T = { try { body throw new Exception(s"Exception of type ${classTag[T]} was not thrown") } catch { case t: Throwable => if (classTag[T].runtimeClass != t.getClass) throw t else t.asInstanceOf[T] } } def eval(code: String, compileOptions: String = ""): Any = { val tb = mkToolbox(compileOptions) tb.eval(tb.parse(code)) } def mkToolbox(compileOptions: String = "") = { val m = scala.reflect.runtime.currentMirror import scala.tools.reflect.ToolBox m.mkToolBox(options = compileOptions) } def expectError(errorSnippet: String, compileOptions: String = "", baseCompileOptions: String = "-cp target/scala-2.10/classes")(code: String) { intercept[ToolBoxError] { eval(code, compileOptions + " " + baseCompileOptions) }.getMessage mustContain errorSnippet } }