aboutsummaryrefslogtreecommitdiff
path: root/libraries/eval
diff options
context:
space:
mode:
authormarius a. eriksen <marius@twitter.com>2010-11-19 14:13:38 -0800
committerChristopher Vogt <oss.nsp@cvogt.org>2016-11-07 02:08:37 -0500
commited06f0fcc0539646416dac922e34f4fcc4595487 (patch)
tree7f6b27b20281e5a2e198e0f8452f22a69d36f8bb /libraries/eval
parent54fe2f15640ba71f01f3bd6637270ce4b7ac3420 (diff)
downloadcbt-ed06f0fcc0539646416dac922e34f4fcc4595487.tar.gz
cbt-ed06f0fcc0539646416dac922e34f4fcc4595487.tar.bz2
cbt-ed06f0fcc0539646416dac922e34f4fcc4595487.zip
- add support for evaluating from streams
- use test resources when testing, not paths relative to project root
Diffstat (limited to 'libraries/eval')
-rw-r--r--libraries/eval/Eval.scala8
-rw-r--r--libraries/eval/test/EvalTest.scala24
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
+ }
}
}