Skip to content

Commit 1bb5fd4

Browse files
committed
Test pickling paths with a JUnit test
1 parent b6f38c8 commit 1bb5fd4

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package dotty.tools.dotc.core.tasty
2+
3+
import java.io.{File => JFile, ByteArrayOutputStream, IOException}
4+
import java.nio.file.{Files, NoSuchFileException, Path, Paths}
5+
6+
import scala.sys.process._
7+
8+
import org.junit.Test
9+
import org.junit.Assert.{assertEquals, assertTrue, assertFalse, fail}
10+
11+
import dotty.tools.dotc.ast.tpd
12+
import dotty.tools.dotc.ast.tpd.TreeOps
13+
import dotty.tools.dotc.{Driver, Main}
14+
import dotty.tools.dotc.decompiler
15+
import dotty.tools.dotc.core.Comments.CommentsContext
16+
import dotty.tools.dotc.core.Contexts.Context
17+
import dotty.tools.dotc.core.Decorators.{toTermName, toTypeName}
18+
import dotty.tools.dotc.core.Mode
19+
import dotty.tools.dotc.core.Names.Name
20+
import dotty.tools.dotc.interfaces.Diagnostic.ERROR
21+
import dotty.tools.dotc.reporting.TestReporter
22+
import dotty.tools.io.{Directory, File, Path}
23+
24+
import dotty.tools.vulpix.TestConfiguration
25+
26+
class PathPicklingTest {
27+
28+
@Test def test(): Unit = {
29+
val out = JFile("out/testPathPickling")
30+
val cwd = JFile("").getAbsolutePath()
31+
delete(out)
32+
out.mkdir()
33+
34+
// let's try to avoid potentially catastrophic things, shall we?
35+
require(!out.toString.contains(" "))
36+
require(!cwd.toString.contains(" "))
37+
38+
val exitcode =
39+
val ignorantProcessLogger = ProcessLogger(_ => ())
40+
val options = TestConfiguration.defaultOptions
41+
.and("-d", s"$out/out.jar")
42+
.and("-sourceroot", "tests/pos")
43+
.and(s"$cwd/tests/pos/i10430/lib.scala", s"$cwd/tests/pos/i10430/app.scala")
44+
val reporter = TestReporter.reporter(System.out, logLevel = ERROR)
45+
val rep = Main.process(options.all, reporter)
46+
assertFalse("Compilation failed.", rep.hasErrors)
47+
// Seq("sbt", s"scalac -d $out/out.jar -sourceroot tests/pos $cwd/tests/pos/i10430/lib.scala ").!(ignorantProcessLogger)
48+
49+
50+
val decompiled =
51+
val outstream = new ByteArrayOutputStream()
52+
val options = TestConfiguration.defaultOptions
53+
.and("-print-tasty")
54+
.and("-color:never")
55+
.and(s"$out/out.jar")
56+
val reporter = TestReporter.reporter(System.out, logLevel = ERROR)
57+
val rep = Console.withOut(outstream) {
58+
decompiler.Main.process(options.all, reporter)
59+
}
60+
assertFalse("Decompilation failed.", rep.hasErrors)
61+
new String(outstream.toByteArray(), "UTF-8")
62+
63+
assertTrue(decompiled.contains(": i10430/lib.scala"))
64+
assertTrue(decompiled.contains(": i10430/app.scala"))
65+
assertTrue(decompiled.contains("[i10430/lib.scala]"))
66+
assertTrue(decompiled.contains("[i10430/app.scala]"))
67+
68+
assertFalse(decompiled.contains(": i10430\\lib.scala"))
69+
assertFalse(decompiled.contains(": i10430\\app.scala"))
70+
assertFalse(decompiled.contains("[i10430\\lib.scala]"))
71+
assertFalse(decompiled.contains("[i10430\\app.scala]"))
72+
}
73+
74+
private def delete(file: JFile): Unit = {
75+
if (file.isDirectory) file.listFiles.foreach(delete)
76+
try Files.delete(file.toPath)
77+
catch {
78+
case _: NoSuchFileException => // already deleted, everything's fine
79+
}
80+
}
81+
}

0 commit comments

Comments
 (0)