summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-07-21 09:55:39 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-07-21 09:55:39 +1000
commit0e9525aa618a2eca143a1c7379ff1e6efd23b86e (patch)
treecc2dd447c956c96d22a1ac698be8b2bbdaf2991f /test/files
parent62e915decc3e4caf01a9d19392c6adbdf6b55154 (diff)
parentb6feac28697934e3c8ea7d90025cf6032062a886 (diff)
downloadscala-0e9525aa618a2eca143a1c7379ff1e6efd23b86e.tar.gz
scala-0e9525aa618a2eca143a1c7379ff1e6efd23b86e.tar.bz2
scala-0e9525aa618a2eca143a1c7379ff1e6efd23b86e.zip
Merge pull request #4650 from lrytz/t8502-package
SI-8502 create PackageClass instead of Class symbol stubs for pkgs
Diffstat (limited to 'test/files')
-rw-r--r--test/files/run/t8502b.scala46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/files/run/t8502b.scala b/test/files/run/t8502b.scala
new file mode 100644
index 0000000000..4f70d13bb0
--- /dev/null
+++ b/test/files/run/t8502b.scala
@@ -0,0 +1,46 @@
+import scala.tools.partest._
+import java.io.File
+
+// used to crash with an assertion failure in flatten because the type symbol created for the missing
+// package was a ClassSymbol, not a PackageClassSymbol
+// - isFlattenablePrefix(vanishingPackage) was true (wrongly)
+// - therefore flatten tried to flatten the class defined in the package, but the class is
+// top-level, vanishingClass.enclosingTopLevelClass is NoSymbol
+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 show(): Unit = {
+ compileCode("""
+ class Outer {
+ class Nested extends vanishing.Vanishing
+ }
+
+ package vanishing {
+ class Vanishing
+ }
+ """)
+ assert(filteredInfos.isEmpty, filteredInfos)
+ deletePackage("vanishing")
+ compileCode("""
+ class Test {
+ def f(o: Outer): Outer = o
+ }
+ """)
+ assert(storeReporter.infos.isEmpty, storeReporter.infos.mkString("\n")) // Included a MissingRequirementError before.
+ }
+
+ def deletePackage(name: String) {
+ val directory = new File(testOutput.path, name)
+ for (f <- directory.listFiles()) {
+ assert(f.getName.endsWith(".class"))
+ assert(f.delete())
+ }
+ assert(directory.listFiles().isEmpty)
+ assert(directory.delete())
+ }
+}