summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala31
-rw-r--r--test/files/presentation/simple-tests.check6
-rw-r--r--test/files/presentation/simple-tests/SimpleInteractiveTest.scala1
3 files changed, 30 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala b/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala
index 1cda29fdba..1d106a5c64 100644
--- a/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala
+++ b/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala
@@ -94,19 +94,40 @@ abstract class InteractiveTest {
buf.toList
}
+ /** Should askAllSources wait for each ask to finish before issueing the next? */
+ val synchronousRequests = true
+
/** Perform an operation on all sources at all positions that match the given
* marker string. For instance, askAllSources("/*!*/")(askTypeAt)(println) would
* ask the tyep at all positions marked with /*!*/ and println the result.
*/
- def askAllSources[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) {
+ def askAllSourcesAsync[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) {
val positions = allPositionsOf(str = marker).valuesIterator.toList.flatten
val responses = for (pos <- positions) yield askAt(pos)
- for ((pos, r) <- positions zip responses) r.get(TIMEOUT) match {
- case Some(Left(members)) =>
- f(pos, members)
+ for ((pos, r) <- positions zip responses) withResponse(pos, r)(f)
+ }
+
+ /** Synchronous version of askAllSources. Each position is treated in turn, waiting for the
+ * response before going to the next one.
+ */
+ def askAllSourcesSync[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) {
+ val positions = allPositionsOf(str = marker).valuesIterator.toList.flatten
+ for (pos <- positions) withResponse(pos, askAt(pos))(f)
+ }
+
+ def askAllSources[T] = if (synchronousRequests) askAllSourcesSync[T] _ else askAllSourcesAsync[T] _
+
+ /** Return the filename:line:col version of this position. */
+ def showPos(pos: Position): String =
+ "%s:%d:%d".format(pos.source.file.name, pos.line, pos.column)
+
+ protected def withResponse[T](pos: Position, response: Response[T])(f: (Position, T) => Unit) {
+ response.get(TIMEOUT) match {
+ case Some(Left(t)) =>
+ f(pos, t)
case None =>
- println("TIMEOUT: " + r)
+ println("TIMEOUT: " + showPos(pos))
case Some(r) =>
println("ERROR: " + r)
}
diff --git a/test/files/presentation/simple-tests.check b/test/files/presentation/simple-tests.check
index 26ddc0836c..ed972ddcda 100644
--- a/test/files/presentation/simple-tests.check
+++ b/test/files/presentation/simple-tests.check
@@ -1,7 +1,5 @@
reload: Tester.scala
askTypeCompletion at Tester.scala(12,39)
-askTypeCompletion at Tester.scala(23,24)
-askTypeCompletion at Tester.scala(105,29)
================================================================================
[response] aksTypeCompletion at (12,39)
@@ -71,6 +69,7 @@ TypeMember(method withSource,[A](src: scala.tools.nsc.util.SourceFile)(op: => A)
TypeMember(method withoutTruncating,[T](body: => T)T,true,true,<none>)
TypeMember(value x,=> scala.tools.nsc.reporters.StoreReporter,true,false,method any2ArrowAssoc)
TypeMember(value x,scala.tools.nsc.reporters.StoreReporter,false,false,method any2ArrowAssoc)
+askTypeCompletion at Tester.scala(23,24)
================================================================================
[response] aksTypeCompletion at (23,24)
@@ -125,6 +124,7 @@ TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,<none>)
TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
TypeMember(value x,=> scala.tools.nsc.interactive.Response[U],true,false,method any2ArrowAssoc)
TypeMember(value x,scala.tools.nsc.interactive.Response[U],false,false,method any2ArrowAssoc)
+askTypeCompletion at Tester.scala(105,29)
================================================================================
[response] aksTypeCompletion at (105,29)
@@ -181,8 +181,8 @@ TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
TypeMember(value x,=> scala.tools.nsc.util.SourceFile,true,false,method any2ArrowAssoc)
TypeMember(value x,scala.tools.nsc.util.SourceFile,false,false,method any2ArrowAssoc)
askTypeAt at Tester.scala(12,14)
-askTypeAt at Tester.scala(13,14)
[response] askTypeAt at (12,14)
private[this] val reporter: scala.tools.nsc.reporters.StoreReporter = new reporters.StoreReporter()
+askTypeAt at Tester.scala(13,14)
[response] askTypeAt at (13,14)
private[this] val compiler: scala.tools.nsc.interactive.Global = new Global(Tester.this.settings, Tester.this.reporter)
diff --git a/test/files/presentation/simple-tests/SimpleInteractiveTest.scala b/test/files/presentation/simple-tests/SimpleInteractiveTest.scala
index 0456f9f5e7..cfadc561ae 100644
--- a/test/files/presentation/simple-tests/SimpleInteractiveTest.scala
+++ b/test/files/presentation/simple-tests/SimpleInteractiveTest.scala
@@ -6,4 +6,5 @@ import scala.tools.nsc.interactive.tests._
*/
object Test extends InteractiveTest {
override val runRandomTests = false
+// override val synchronousRequests = false
}