From ed06f0fcc0539646416dac922e34f4fcc4595487 Mon Sep 17 00:00:00 2001 From: "marius a. eriksen" Date: Fri, 19 Nov 2010 14:13:38 -0800 Subject: - add support for evaluating from streams - use test resources when testing, not paths relative to project root --- libraries/eval/Eval.scala | 8 +++++++- libraries/eval/test/EvalTest.scala | 24 +++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/libraries/eval/Eval.scala b/libraries/eval/Eval.scala index 93e09f9..8ca6f89 100644 --- a/libraries/eval/Eval.scala +++ b/libraries/eval/Eval.scala @@ -1,6 +1,6 @@ package com.twitter.util -import java.io.{File, FileWriter} +import java.io.{File, FileWriter, InputStream} import java.math.BigInteger import java.net.{URL, URLClassLoader} import java.security.MessageDigest @@ -100,6 +100,12 @@ object Eval { apply(stringToEval) } + /** + * Eval[Int](getClass.getResourceAsStream("/Foo.scala")) + */ + def apply[T](stream: InputStream): T = + apply(scala.io.Source.fromInputStream(stream).mkString) + private def ifUncompiled(targetDir: File, className: String)(f: File => Unit) { targetDir.mkdirs() targetDir.deleteOnExit() diff --git a/libraries/eval/test/EvalTest.scala b/libraries/eval/test/EvalTest.scala index bdb3d65..abf63d7 100644 --- a/libraries/eval/test/EvalTest.scala +++ b/libraries/eval/test/EvalTest.scala @@ -1,21 +1,39 @@ package com.twitter.util import org.specs.Specification -import java.io.File +import java.io.{File, FileOutputStream} object EvaluatorSpec extends Specification { + def file(path: String) = { + val stream = getClass.getResourceAsStream(path) + val file = File.createTempFile(path, "scala") + val fos = new FileOutputStream(file) + + var byte = stream.read() + while (byte != -1) { + fos.write(byte) + byte = stream.read() + } + + file + } + "Evaluator" should { "apply('expression')" in { Eval[Int]("1 + 1") mustEqual 2 } "apply(new File(...))" in { - Eval[Int](new File("src/test/resources/OnePlusOne.scala")) mustEqual 2 + Eval[Int](file("/OnePlusOne.scala")) mustEqual 2 } "apply(new File(...), new File(...))" in { - val derived = Eval[() => String](new File("src/test/resources/Base.scala"), new File("src/test/resources/Derived.scala")) + val derived = Eval[() => String](file("/Base.scala"), file("/Derived.scala")) derived() mustEqual "hello" } + + "apply(InputStream)" in { + Eval[Int](getClass.getResourceAsStream("/OnePlusOne.scala")) mustEqual 2 + } } } -- cgit v1.2.3