diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-13 11:02:30 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-13 11:02:30 +0100 |
commit | 079296632d8ef5ecc40aafa83757231599c78783 (patch) | |
tree | ae523bd1269c22b460890298c34dc6c922e1aafa /test/files/run/t6440.scala | |
parent | 86e045e2863b04bf4af4abb5c2ce345bcdae2b80 (diff) | |
download | scala-079296632d8ef5ecc40aafa83757231599c78783.tar.gz scala-079296632d8ef5ecc40aafa83757231599c78783.tar.bz2 scala-079296632d8ef5ecc40aafa83757231599c78783.zip |
SI-6440 Address regressions around MissingRequirementError
Go back to using globalError to report when a stub's info is referenced,
and only throw the MissingRequirementError when compilation really
must abort due to having a StubTermSymbol in a place where a
StubClassSymbol would have been a better choice.
This situation arises when an entire package is missing from the
classpath, as was the case in the reported bug.
Adds `StoreReporterDirectTest`, which buffers messages issued
during compilation for more structured interrogation. Use this
in two test for manifests -- these tests were using a crude means
of grepping compiler console output to focus on the relevant output,
but this approach was insufficient with the new multi-line error
message emitted as part of this change.
Also used that base test class to add two new tests: one for
the reported error (package missing), and another for a simpler
error (class missing). The latter test shows how stub symbols
allow code to compile if it doesn't the subset of signatures
in some type that refer to a missing class.
Gave the INFO/WARNING/ERROR members of Reporter sensible
toString implementations; they inherit from Enumeration#Value
in an unusual manner (why?) that means the built in toString of
Enumeration printed `Severity@0`.
Diffstat (limited to 'test/files/run/t6440.scala')
-rw-r--r-- | test/files/run/t6440.scala | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/test/files/run/t6440.scala b/test/files/run/t6440.scala index 2b690f31e1..5a3a4150d9 100644 --- a/test/files/run/t6440.scala +++ b/test/files/run/t6440.scala @@ -1,7 +1,48 @@ -object Test { +import scala.tools.partest._ +import java.io.File - def main(args: Array[String]): Unit = { - println(Stream.continually(()).filterNot(_ => false).take(2)) +object Test extends StoreReporterDirectTest { + def code = ??? + + def compileCode(code: String) = { + val classpath = List(sys.props("partest.lib"), testOutput.path) mkString sys.props("path.separator") + compileString(newCompiler("-cp", classpath, "-d", testOutput.path))(code) } + def library1 = """ + package pack1 + trait T + """ + + def library2 = """ + package pack2 + trait U extends pack1.T + """ + + def app = """ + package pack3 + object X { + trait U + } + import X._ + import pack2._ + + trait V extends U + """ + + def show(): Unit = { + Seq(library1, library2) foreach compileCode + assert(filteredInfos.isEmpty, filteredInfos) + + // blow away the entire package + val pack1 = new File(testOutput.path, "pack1") + val tClass = new File(pack1, "T.class") + assert(tClass.exists) + assert(tClass.delete()) + assert(pack1.delete()) + + // bad symbolic reference error expected (but no stack trace!) + compileCode(app) + println(filteredInfos.mkString("\n")) + } } |