forked from scala/scala
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.scala
108 lines (75 loc) · 2.38 KB
/
main.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import scala.collection._
import scala.concurrent._
import scala.concurrent.util.Duration
import java.util.concurrent.{ TimeoutException, CountDownLatch, TimeUnit }
object Test {
def main(args: Array[String]) {
FutureTests.check()
PromiseTests.check()
}
}
trait Output {
val buffer = new StringBuilder
def bufferPrintln(a: Any) = buffer.synchronized {
buffer.append(a.toString + "\n")
}
}
trait MinimalScalaTest extends Output {
val throwables = mutable.ArrayBuffer[Throwable]()
def check() {
if (throwables.nonEmpty) println(buffer.toString)
}
implicit def stringops(s: String) = new {
def should[U](snippets: =>U) = {
bufferPrintln(s + " should:")
snippets
}
def in[U](snippet: =>U) = {
try {
bufferPrintln("- " + s)
snippet
bufferPrintln("[OK] Test passed.")
} catch {
case e =>
bufferPrintln("[FAILED] " + e)
bufferPrintln(e.getStackTrace().mkString("\n"))
throwables += e
}
}
}
implicit def objectops(obj: Any) = new {
def mustBe(other: Any) = assert(obj == other, obj + " is not " + other)
}
def intercept[T <: Throwable: Manifest](body: =>Any): T = {
try {
body
throw new Exception("Exception of type %s was not thrown".format(manifest[T]))
} catch {
case t: Throwable =>
if (manifest[T].erasure != t.getClass) throw t
else t.asInstanceOf[T]
}
}
def checkType[T: Manifest, S](in: Future[T], refmanifest: Manifest[S]): Boolean = manifest[T] == refmanifest
}
object TestLatch {
val DefaultTimeout = Duration(5, TimeUnit.SECONDS)
def apply(count: Int = 1) = new TestLatch(count)
}
class TestLatch(count: Int = 1) extends Awaitable[Unit] {
private var latch = new CountDownLatch(count)
def countDown() = latch.countDown()
def isOpen: Boolean = latch.getCount == 0
def open() = while (!isOpen) countDown()
def reset() = latch = new CountDownLatch(count)
@throws(classOf[TimeoutException])
def ready(atMost: Duration)(implicit permit: CanAwait) = {
val opened = latch.await(atMost.toNanos, TimeUnit.NANOSECONDS)
if (!opened) throw new TimeoutException("Timeout of %s." format (atMost.toString))
this
}
@throws(classOf[Exception])
def result(atMost: Duration)(implicit permit: CanAwait): Unit = {
ready(atMost)
}
}