Skip to content

Commit c9f1754

Browse files
committed
Adapt the tests to the use of -Yscala2-unpickler
The tests that import things defined in the dotty-compiler jar should only be run with a bootstrapped compiler.
1 parent c61605a commit c9f1754

35 files changed

+145
-87
lines changed

compiler/test/dotty/TestCategories.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ trait SlowTests
55

66
/** Meta tests category for JUnit */
77
trait VulpixMetaTests
8+
9+
/** Tests that should only be run with a bootstrapped compiler */
10+
trait BootstrappedOnlyTests
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package dotty
2+
package tools
3+
package dotc
4+
5+
import org.junit.{ Test, BeforeClass, AfterClass }
6+
import org.junit.Assert._
7+
import org.junit.Assume._
8+
import org.junit.experimental.categories.Category
9+
10+
import java.nio.file._
11+
import java.util.stream.{ Stream => JStream }
12+
import scala.collection.JavaConverters._
13+
import scala.util.matching.Regex
14+
import scala.concurrent.duration._
15+
import vulpix._
16+
import dotty.tools.io.JFile
17+
18+
@Category(Array(classOf[BootstrappedOnlyTests]))
19+
class BootstrappedOnlyCompilationTests extends ParallelTesting {
20+
import ParallelTesting._
21+
import TestConfiguration._
22+
import CompilationTests._
23+
24+
// Test suite configuration --------------------------------------------------
25+
26+
def maxDuration = 30.seconds
27+
def numberOfSlaves = 5
28+
def safeMode = Properties.testsSafeMode
29+
def isInteractive = SummaryReport.isInteractive
30+
def testFilter = Properties.testsFilter
31+
32+
// Positive tests ------------------------------------------------------------
33+
34+
@Test def posWithCompiler: Unit = {
35+
implicit val testGroup: TestGroup = TestGroup("compilePosWithCompiler")
36+
compileFilesInDir("tests/pos-with-compiler", defaultOptions) +
37+
compileDir("compiler/src/dotty/tools/dotc/ast", defaultOptions) +
38+
compileDir("compiler/src/dotty/tools/dotc/config", defaultOptions) +
39+
compileDir("compiler/src/dotty/tools/dotc/core", defaultOptions) +
40+
compileDir("compiler/src/dotty/tools/dotc/transform", defaultOptions) +
41+
compileDir("compiler/src/dotty/tools/dotc/parsing", defaultOptions) +
42+
compileDir("compiler/src/dotty/tools/dotc/printing", defaultOptions) +
43+
compileDir("compiler/src/dotty/tools/dotc/reporting", defaultOptions) +
44+
compileDir("compiler/src/dotty/tools/dotc/typer", defaultOptions) +
45+
compileDir("compiler/src/dotty/tools/dotc/util", defaultOptions) +
46+
compileDir("compiler/src/dotty/tools/io", defaultOptions) +
47+
compileDir("compiler/src/dotty/tools/dotc/core", TestFlags(classPath, noCheckOptions))
48+
}
49+
50+
@Test def posTwiceWithCompiler: Unit = {
51+
implicit val testGroup: TestGroup = TestGroup("posTwiceWithCompiler")
52+
compileFile("tests/pos-with-compiler/Labels.scala", defaultOptions) +
53+
compileFile("tests/pos-with-compiler/Patterns.scala", defaultOptions) +
54+
compileList(
55+
"testNonCyclic",
56+
List(
57+
"compiler/src/dotty/tools/dotc/CompilationUnit.scala",
58+
"compiler/src/dotty/tools/dotc/core/Types.scala",
59+
"compiler/src/dotty/tools/dotc/ast/Trees.scala"
60+
),
61+
defaultOptions.and("-Xprompt")
62+
) +
63+
compileList(
64+
"testIssue34",
65+
List(
66+
"compiler/src/dotty/tools/dotc/config/Properties.scala",
67+
"compiler/src/dotty/tools/dotc/config/PathResolver.scala"
68+
),
69+
defaultOptions.and("-Xprompt")
70+
)
71+
}.times(2).checkCompile()
72+
73+
// Negative tests ------------------------------------------------------------
74+
75+
@Test def negAll: Unit = {
76+
implicit val testGroup: TestGroup = TestGroup("compileNegWithCompiler")
77+
compileFilesInDir("tests/neg-with-compiler", defaultOptions)
78+
}.checkExpectedErrors()
79+
80+
// Run tests -----------------------------------------------------------------
81+
82+
@Test def runWithCompiler: Unit = {
83+
implicit val testGroup: TestGroup = TestGroup("runWithCompiler")
84+
compileFilesInDir("tests/run-with-compiler", defaultRunWithCompilerOptions) +
85+
compileFile("tests/run-with-compiler-custom-args/staged-streams_1.scala", defaultRunWithCompilerOptions without "-Yno-deep-subtypes")
86+
}.checkRuns()
87+
88+
// Pickling Tests ------------------------------------------------------------
89+
//
90+
// Pickling tests are very memory intensive and as such need to be run with a
91+
// lower level of concurrency as to not kill their running VMs
92+
93+
@Test def picklingWithCompiler: Unit = {
94+
implicit val testGroup: TestGroup = TestGroup("testPicklingWithCompiler")
95+
compileDir("compiler/src/dotty/tools", picklingOptions, recursive = false) +
96+
compileDir("compiler/src/dotty/tools/dotc", picklingOptions, recursive = false) +
97+
compileDir("library/src/dotty/runtime", picklingOptions) +
98+
compileDir("compiler/src/dotty/tools/backend/jvm", picklingOptions) +
99+
compileDir("compiler/src/dotty/tools/dotc/ast", picklingOptions) +
100+
compileDir("compiler/src/dotty/tools/dotc/core", picklingOptions, recursive = false) +
101+
compileDir("compiler/src/dotty/tools/dotc/config", picklingOptions) +
102+
compileDir("compiler/src/dotty/tools/dotc/parsing", picklingOptions) +
103+
compileDir("compiler/src/dotty/tools/dotc/printing", picklingOptions) +
104+
compileDir("compiler/src/dotty/tools/repl", picklingOptions) +
105+
compileDir("compiler/src/dotty/tools/dotc/rewrite", picklingOptions) +
106+
compileDir("compiler/src/dotty/tools/dotc/transform", picklingOptions) +
107+
compileDir("compiler/src/dotty/tools/dotc/typer", picklingOptions) +
108+
compileDir("compiler/src/dotty/tools/dotc/util", picklingOptions) +
109+
compileDir("compiler/src/dotty/tools/io", picklingOptions) +
110+
compileFile("tests/pos/pickleinf.scala", picklingOptions) +
111+
compileDir("compiler/src/dotty/tools/dotc/core/classfile", picklingOptions) +
112+
compileDir("compiler/src/dotty/tools/dotc/core/tasty", picklingOptions) +
113+
compileDir("compiler/src/dotty/tools/dotc/core/unpickleScala2", picklingOptions)
114+
}.limitThreads(4).checkCompile()
115+
}

compiler/test/dotty/tools/dotc/CompilationTests.scala

Lines changed: 7 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,9 @@ class CompilationTests extends ParallelTesting {
3737
compileList("compileStdLib", TestSources.stdLibWhitelisted, scala2Mode.and("-migration", "-Yno-inline", "-Ydetailed-stats"))
3838
}.checkCompile()
3939

40-
@Test def compilePos: Unit = {
40+
@Test def pos: Unit = {
4141
implicit val testGroup: TestGroup = TestGroup("compilePos")
4242
compileList("compileStdLib", TestSources.stdLibWhitelisted, scala2Mode.and("-migration", "-Yno-inline")) +
43-
compileDir("compiler/src/dotty/tools/dotc/ast", defaultOptions) +
44-
compileDir("compiler/src/dotty/tools/dotc/config", defaultOptions) +
45-
compileDir("compiler/src/dotty/tools/dotc/core", defaultOptions) +
46-
compileDir("compiler/src/dotty/tools/dotc/transform", defaultOptions) +
47-
compileDir("compiler/src/dotty/tools/dotc/parsing", defaultOptions) +
48-
compileDir("compiler/src/dotty/tools/dotc/printing", defaultOptions) +
49-
compileDir("compiler/src/dotty/tools/dotc/reporting", defaultOptions) +
50-
compileDir("compiler/src/dotty/tools/dotc/typer", defaultOptions) +
51-
compileDir("compiler/src/dotty/tools/dotc/util", defaultOptions) +
52-
compileDir("compiler/src/dotty/tools/io", defaultOptions) +
53-
compileDir("compiler/src/dotty/tools/dotc/core", TestFlags(classPath, noCheckOptions)) +
5443
compileFile("tests/pos/nullarify.scala", defaultOptions.and("-Ycheck:nullarify")) +
5544
compileFile("tests/pos-scala2/rewrites.scala", scala2Mode.and("-rewrite")).copyToTarget() +
5645
compileFile("tests/pos-special/utf8encoded.scala", explicitUTF8) +
@@ -111,7 +100,6 @@ class CompilationTests extends ParallelTesting {
111100

112101
@Test def posTwice: Unit = {
113102
implicit val testGroup: TestGroup = TestGroup("posTwice")
114-
compileFile("tests/pos/Labels.scala", defaultOptions) +
115103
compileFilesInDir("tests/pos-java-interop", defaultOptions) +
116104
compileFilesInDir("tests/pos-java-interop-separate", defaultOptions) +
117105
compileFile("tests/pos/t2168.scala", defaultOptions) +
@@ -122,7 +110,6 @@ class CompilationTests extends ParallelTesting {
122110
compileFile("tests/pos/functions1.scala", defaultOptions) +
123111
compileFile("tests/pos/implicits1.scala", defaultOptions) +
124112
compileFile("tests/pos/inferred.scala", defaultOptions) +
125-
compileFile("tests/pos/Patterns.scala", defaultOptions) +
126113
compileFile("tests/pos/selftypes.scala", defaultOptions) +
127114
compileFile("tests/pos/varargs.scala", defaultOptions) +
128115
compileFile("tests/pos/vararg-pattern.scala", defaultOptions) +
@@ -147,29 +134,12 @@ class CompilationTests extends ParallelTesting {
147134
compileFile("tests/pos/i0239.scala", defaultOptions) +
148135
compileFile("tests/pos/anonClassSubtyping.scala", defaultOptions) +
149136
compileFile("tests/pos/extmethods.scala", defaultOptions) +
150-
compileFile("tests/pos/companions.scala", defaultOptions) +
151-
compileList(
152-
"testNonCyclic",
153-
List(
154-
"compiler/src/dotty/tools/dotc/CompilationUnit.scala",
155-
"compiler/src/dotty/tools/dotc/core/Types.scala",
156-
"compiler/src/dotty/tools/dotc/ast/Trees.scala"
157-
),
158-
defaultOptions.and("-Xprompt")
159-
) +
160-
compileList(
161-
"testIssue34",
162-
List(
163-
"compiler/src/dotty/tools/dotc/config/Properties.scala",
164-
"compiler/src/dotty/tools/dotc/config/PathResolver.scala"
165-
),
166-
defaultOptions.and("-Xprompt")
167-
)
137+
compileFile("tests/pos/companions.scala", defaultOptions)
168138
}.times(2).checkCompile()
169139

170140
// Negative tests ------------------------------------------------------------
171141

172-
@Test def compileNeg: Unit = {
142+
@Test def negAll: Unit = {
173143
implicit val testGroup: TestGroup = TestGroup("compileNeg")
174144
compileFilesInDir("tests/neg", defaultOptions) +
175145
compileFilesInDir("tests/neg-tailcall", defaultOptions) +
@@ -195,9 +165,7 @@ class CompilationTests extends ParallelTesting {
195165

196166
@Test def runAll: Unit = {
197167
implicit val testGroup: TestGroup = TestGroup("runAll")
198-
compileFilesInDir("tests/run", defaultOptions) +
199-
compileFilesInDir("tests/run-with-compiler", defaultRunWithCompilerOptions) +
200-
compileFile("tests/run-with-compiler-custom-args/staged-streams_1.scala", defaultRunWithCompilerOptions without "-Yno-deep-subtypes")
168+
compileFilesInDir("tests/run", defaultOptions)
201169
}.checkRuns()
202170

203171
// Generic java signatures tests ---------------------------------------------
@@ -208,34 +176,12 @@ class CompilationTests extends ParallelTesting {
208176
}.checkRuns()
209177

210178
// Pickling Tests ------------------------------------------------------------
211-
//
212-
// Pickling tests are very memory intensive and as such need to be run with a
213-
// lower level of concurrency as to not kill their running VMs
214179

215-
@Test def testPickling: Unit = {
180+
@Test def pickling: Unit = {
216181
implicit val testGroup: TestGroup = TestGroup("testPickling")
217-
compileDir("compiler/src/dotty/tools", picklingOptions, recursive = false) +
218-
compileDir("compiler/src/dotty/tools/dotc", picklingOptions, recursive = false) +
219182
compileFilesInDir("tests/new", picklingOptions) +
220-
compileFilesInDir("tests/pickling", picklingOptions) +
221-
compileDir("library/src/dotty/runtime", picklingOptions) +
222-
compileDir("compiler/src/dotty/tools/backend/jvm", picklingOptions) +
223-
compileDir("compiler/src/dotty/tools/dotc/ast", picklingOptions) +
224-
compileDir("compiler/src/dotty/tools/dotc/core", picklingOptions, recursive = false) +
225-
compileDir("compiler/src/dotty/tools/dotc/config", picklingOptions) +
226-
compileDir("compiler/src/dotty/tools/dotc/parsing", picklingOptions) +
227-
compileDir("compiler/src/dotty/tools/dotc/printing", picklingOptions) +
228-
compileDir("compiler/src/dotty/tools/repl", picklingOptions) +
229-
compileDir("compiler/src/dotty/tools/dotc/rewrite", picklingOptions) +
230-
compileDir("compiler/src/dotty/tools/dotc/transform", picklingOptions) +
231-
compileDir("compiler/src/dotty/tools/dotc/typer", picklingOptions) +
232-
compileDir("compiler/src/dotty/tools/dotc/util", picklingOptions) +
233-
compileDir("compiler/src/dotty/tools/io", picklingOptions) +
234-
compileFile("tests/pos/pickleinf.scala", picklingOptions) +
235-
compileDir("compiler/src/dotty/tools/dotc/core/classfile", picklingOptions) +
236-
compileDir("compiler/src/dotty/tools/dotc/core/tasty", picklingOptions) +
237-
compileDir("compiler/src/dotty/tools/dotc/core/unpickleScala2", picklingOptions)
238-
}.limitThreads(4).checkCompile()
183+
compileFilesInDir("tests/pickling", picklingOptions)
184+
}.checkCompile()
239185

240186
/** The purpose of this test is two-fold, being able to compile dotty
241187
* bootstrapped, and making sure that TASTY can link against a compiled

project/Build.scala

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,8 @@ object Build {
530530
},
531531

532532
testOptions in Test += Tests.Argument(
533-
TestFrameworks.JUnit, "--run-listener=dotty.tools.ContextEscapeDetector"
533+
TestFrameworks.JUnit,
534+
"--run-listener=dotty.tools.ContextEscapeDetector",
534535
),
535536

536537
// Spawn new JVM in run and test
@@ -606,6 +607,9 @@ object Build {
606607
} else if (scalaLib == "") {
607608
println("Couldn't find scala-library on classpath, please run using script in bin dir instead")
608609
} else if (args.contains("-with-compiler")) {
610+
if (!isDotty.value) {
611+
throw new MessageOnlyException("-with-compiler can only be used with a bootstrapped compiler")
612+
}
609613
val args1 = args.filter(_ != "-with-compiler")
610614
val asm = findLib(attList, "scala-asm")
611615
val dottyCompiler = jars("dotty-compiler")
@@ -671,7 +675,12 @@ object Build {
671675

672676
var extraClasspath = dottyLib
673677
if ((decompile || printTasty) && !args.contains("-classpath")) extraClasspath += ":."
674-
if (args0.contains("-with-compiler")) extraClasspath += s":$dottyCompiler"
678+
if (args0.contains("-with-compiler")) {
679+
if (!isDotty.value) {
680+
throw new MessageOnlyException("-with-compiler can only be used with a bootstrapped compiler")
681+
}
682+
extraClasspath += s":$dottyCompiler"
683+
}
675684

676685
val fullArgs = main :: insertClasspathInArgs(args, extraClasspath)
677686

@@ -699,7 +708,12 @@ object Build {
699708
"dotty-library" -> packageBin.in(`dotty-library-bootstrapped`, Compile).value
700709
).mapValues(_.getAbsolutePath)
701710
}
702-
}.value
711+
}.value,
712+
713+
testOptions in Test += Tests.Argument(
714+
TestFrameworks.JUnit,
715+
"--exclude-categories=dotty.BootstrappedOnlyTests",
716+
),
703717
)
704718

705719
lazy val bootstrapedDottyCompilerSettings = commonDottyCompilerSettings ++ Seq(

project/scripts/cmdTests

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ SBT="./project/scripts/sbt" # if run on CI
88
SOURCE="tests/pos/HelloWorld.scala"
99
MAIN="HelloWorld"
1010
EXPECTED_OUTPUT="hello world"
11-
COMPILER_CP="compiler/target/scala-2.12/classes" # FIXME: This is not very reliable
1211

1312
# check that benchmarks can run
1413
"$SBT" "dotty-bench/jmh:run 1 1 tests/pos/alias.scala"
@@ -51,7 +50,7 @@ clear_out "$OUT"
5150
grep -qe "def main(args: scala.Array\[scala.Predef.String\]): scala.Unit =" "$tmp"
5251

5352
echo "testing scala.quoted.Expr.run from sbt dotr"
54-
"$SBT" ";dotty-compiler/compile ;dotc -classpath $COMPILER_CP tests/run-with-compiler/quote-run.scala; dotr -with-compiler Test" > "$tmp"
53+
"$SBT" ";dotty-compiler-bootstrapped/dotc -with-compiler tests/run-with-compiler/quote-run.scala; dotty-compiler-bootstrapped/dotr -with-compiler Test" > "$tmp"
5554
grep -qe "val a: scala.Int = 3" "$tmp"
5655

5756

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

tests/pos/lazyValsSepComp.scala

Lines changed: 0 additions & 16 deletions
This file was deleted.

tests/run/lst/Lst.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
package dotty.tools.dotc
2-
package util
1+
package lst
32

4-
import printing.{Printer, Texts}
5-
import Texts.Text
63
import collection.mutable.{ListBuffer, StringBuilder}
74
import collection.immutable.Map
85
import reflect.ClassTag

tests/run/lst/LstTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
object Test extends App {
2-
import dotty.tools.dotc.util.Lst
2+
import lst.Lst
33

44
val xs0: Lst[String] = Lst.Empty
55
val xs1 = Lst("a")

0 commit comments

Comments
 (0)