diff options
author | Mirco Dotta <mirco.dotta@typesafe.com> | 2013-12-10 17:12:58 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-12-18 14:28:24 +0100 |
commit | a12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85 (patch) | |
tree | 29edc6d55f5b661175de82ccef087a7420d5e10e /test | |
parent | 5cbb5a7f626aa7bd305ad8ce2ad96ee742315536 (diff) | |
download | scala-a12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85.tar.gz scala-a12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85.tar.bz2 scala-a12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85.zip |
Test demonstrating SI-8085
* The presentation compiler sourcepath is now correctly set-up.
* Amazingly enough (for me at least), the outer import in the
package object seem to be responsible of the faulty behavior.
In fact, if you move the import clause *inside* the package object,
the test succeed!
The test's output does provide the correct hint of this:
```
% diff /Users/mirco/Projects/ide/scala/test/files/presentation/t8085-presentation.log /Users/mirco/Projects/ide/scala/test/files/presentation/t8085.check
@@ -1,3 +1,2 @@
reload: NodeScalaSuite.scala
-prefixes differ: <empty>.nodescala,nodescala
-value always is not a member of object scala.concurrent.Future
+Test OK
```
Notice the ``-prefixes differ: <empty>.nodescala,nodescala``. And compare
it with the output when the import clause is placed inside the package
object:
```
% diff /Users/mirco/Projects/ide/scala/test/files/presentation/t8085-presentation.log /Users/mirco/Projects/ide/scala/test/files/presentation/t8085.check
@@ -1,4 +1,2 @@
reload: NodeScalaSuite.scala
-reload: NodeScalaSuite.scala
-open package module: package object nodescala
Test OK
```
Notice now the ``-open package module: package object nodescala``!
Diffstat (limited to 'test')
-rw-r--r-- | test/files/presentation/t8085.check | 3 | ||||
-rw-r--r-- | test/files/presentation/t8085.flags | 1 | ||||
-rw-r--r-- | test/files/presentation/t8085/Test.scala | 28 | ||||
-rw-r--r-- | test/files/presentation/t8085/src/nodescala/Foo.scala | 3 | ||||
-rw-r--r-- | test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala | 12 | ||||
-rw-r--r-- | test/files/presentation/t8085/src/nodescala/package.scala | 8 |
6 files changed, 55 insertions, 0 deletions
diff --git a/test/files/presentation/t8085.check b/test/files/presentation/t8085.check new file mode 100644 index 0000000000..46aac791f5 --- /dev/null +++ b/test/files/presentation/t8085.check @@ -0,0 +1,3 @@ +reload: NodeScalaSuite.scala +prefixes differ: <empty>.nodescala,nodescala +value always is not a member of object scala.concurrent.Future diff --git a/test/files/presentation/t8085.flags b/test/files/presentation/t8085.flags new file mode 100644 index 0000000000..ec35b223d8 --- /dev/null +++ b/test/files/presentation/t8085.flags @@ -0,0 +1 @@ +-sourcepath src diff --git a/test/files/presentation/t8085/Test.scala b/test/files/presentation/t8085/Test.scala new file mode 100644 index 0000000000..5d11009818 --- /dev/null +++ b/test/files/presentation/t8085/Test.scala @@ -0,0 +1,28 @@ +import scala.tools.nsc.interactive.tests.InteractiveTest +import scala.reflect.internal.util.SourceFile +import scala.tools.nsc.interactive.Response + +object Test extends InteractiveTest { + + override def execute(): Unit = { + // loadSourceAndWaitUntilTypechecked("package.scala") // <-- uncomment this line and the test succeed + val src = loadSourceAndWaitUntilTypechecked("NodeScalaSuite.scala") + checkErrors(src) + } + + private def loadSourceAndWaitUntilTypechecked(sourceName: String): SourceFile = { + val sourceFile = sourceFiles.find(_.file.name == sourceName).head + askReload(List(sourceFile)).get + askLoadedTyped(sourceFile).get + sourceFile + } + + private def checkErrors(source: SourceFile): Unit = compiler.getUnitOf(source) match { + case Some(unit) => + val problems = unit.problems.toList + if(problems.isEmpty) reporter.println("Test OK") + else problems.foreach(problem => reporter.println(problem.msg)) + + case None => reporter.println("No compilation unit found for " + source.file.name) + } +} diff --git a/test/files/presentation/t8085/src/nodescala/Foo.scala b/test/files/presentation/t8085/src/nodescala/Foo.scala new file mode 100644 index 0000000000..19efdb65dd --- /dev/null +++ b/test/files/presentation/t8085/src/nodescala/Foo.scala @@ -0,0 +1,3 @@ +package nodescala + +class Foo diff --git a/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala new file mode 100644 index 0000000000..a8803ff86d --- /dev/null +++ b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala @@ -0,0 +1,12 @@ +package nodescala + +import scala.concurrent.Future + +class NodeScalaSuite { + Future.always(517) + + // This is here only to prove that the presentation compiler is instantiated with the + // correct `sourcepath` value (if it wasn't, you would see a `not found: type Foo` in + // the test's output + println(new Foo()) +}
\ No newline at end of file diff --git a/test/files/presentation/t8085/src/nodescala/package.scala b/test/files/presentation/t8085/src/nodescala/package.scala new file mode 100644 index 0000000000..6e9d4b729a --- /dev/null +++ b/test/files/presentation/t8085/src/nodescala/package.scala @@ -0,0 +1,8 @@ +import scala.concurrent.Future // <-- if you move the import *inside* the package object, then it all works fine!! + +package object nodescala { + implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal { + def always[T](value: T): Future[T] = Promise[T].success(value).future + } +} + |